■データアクセス・コンポーネント編
                  
                   連結フォームのレコードセットを利用しようと、次のようなコードを書きましたが、コンパイル・エラーが出て、うまく実行することができません。どこが悪いのでしょう。使用環境は、Access 
                  2000 + mdbファイルです。 
                  
                    
                    
                      Dim rst As Recordset ' --- 
                        [1]
  Set rst = 
                        Forms("frmMain").Recordset rst.FindFirst "氏名 = 
                        '後藤次郎'" ...
  |   
                  
                  
                   Access 2000で利用できるデータアクセス・コンポーネントには、DAO(Data 
                  Access Objects)とADO(ActiveX Data 
                  Objects)の2種類あります。両者には、同じ名前のオブジェクトが含まれています。RecordsetやField、Parameterといったものです。  連結フォームでは、DAOを利用してデータベース中のレコードを取得しています。そのため、FormのRecordsetプロパティで取得できるのはDAOのRecordsetオブジェクトです。 
                  
                    
                    
                         |  
                    
                      図4-1 mdbを新規作成時の参照設定 (表示されるライブラリ一覧の内容は、環境によって異なります) 
                         |   
                   一方、上記プログラムのDimステートメントで宣言しているRecordset変数([1])は、どちらのコンポーネントに属するものでしょう? 
                  これは、使用している環境によって異なります。Alt+F11キーでVisual Basic 
                  Editor(VBE)を開いて、[ツール] - [参照設定] 
                  のメニューを開いてみましょう。mdbファイルを新規作成して、参照設定を何も操作していない場合、(図4-1)のようになります。この状態で新たにDAOへの参照を付け加えると、(図4-2)のようになります。 
                  
                    
                    
                         |  
                    
                      | 図4-2 DAOへの参照を追加 
                   |   
                   VBでは、[1]のように宣言した場合、参照設定しているリストの上の方から順に該当するオブジェクトを検索します。図4-1, 
                  4-2 いずれの場合でも、ADO中のRecordsetオブジェクトが最初に該当するので、[1] 
                  では、ADOのRecordsetオブジェクトを宣言していることになります。 
                   参照設定を操作し、DAOをリストの上位に持ってくることでこのエラーを避けることはできます。しかし、あとで環境を変更してしまえば再びエラーが復活します。これを根本的に避けるには、変数宣言のさいに、使用するオブジェクトがどのコンポーネント・ライブラリに属するものであるかを明示することです。具体的には、次のようにします。 
                  
                    
                    
                      
                        
                          
                          
                            Dim 
                              rst1 As DAO.Recordset | 
                            …' 
                              DAOのRecordsetを使用 |  
                          
                            Dim 
                              rst2 As ADODB.Recordset | 
                            …' 
                              ADOのRecordsetを使用 |    |   
                   つまらないエラーを避けるため、変数宣言のさいには、いつでもできるだけライブラリ名で修飾する習慣をつけるようにしましょう。 
                   なお、参照設定というのは、プログラム中で使用するオブジェクト・ライブラリをあらかじめ指定しておくものです。参照設定されていないライブラリを使用する場合には、プログラム中でCreateObject関数を使用しないとライブラリを使用することができません。 
                  
                  
                    
                    
                        | 
                      1/4 | 
                        |  
                    
                       本サイト掲載の記事・写真等の無断での転載・複写を禁じます。 
                      本ページは、技術評論社様のご好意により掲載許可をいただいたものです。  
                     |    |