お世話になっております。
ACCESSの件で色々教えて頂き、とても感謝しております。
つきましては、ACCESS2007で疑問に思える点がありましたので
以下に記述いたします。
あるACCESS2007のVBAの記述で
Dim myDB As Database
Dim myQueryDef As QueryDef
なる変数定義がされているのを見たのですが
質問があります
<質問1>
上記の定義はDAOを使用しているという事になるのでしょうか?
<質問2>
DAOであるならば
Dim myDB As DAO.Database
Dim myQueryDef As DAO.QueryDef
と記述するのが正しいのではないでしょうか?
(Option Explicitは記述してあります)
私には謝った記述に見えるのですが、動作
している理由がわかりません。
質問が変かもしれませんが、どなたか教えて
頂けるありがたいです。
No.1ベストアンサー
- 回答日時:
> 上記の定義はDAOを使用しているという事になるのでしょうか?
参照設定されている項目や、その優先順によるかと思いますが、他に
同名のオブジェクト等をもつものがなければ、「DAOを使用」との判断で
よいかと思います。
(外部DLLや自身で作成したMDBなどを新たに参照設定に追加して、
そこでも「Database」や「QueryDef」という名前のオブジェクトなどが
宣言されていれば、DAOとどちらが優先順が高いかによって、
どちらが使用されているかは変わる、と)
なお、Access2003までのDAOに対し、Access2007のそれはバージョンが
上がっているとのことです:
http://isawseashell.blogspot.com/2007/02/attachm …
> Dim myDB As DAO.Database
> Dim myQueryDef As DAO.QueryDef
> と記述するのが正しいのではないでしょうか?
参照設定されているライブラリ内で、同名のオブジェクト等がある場合、
ご質問のように「DAO.~」と明示することが【推奨】されると思います。
(加えて、(他人に見せる際などの)コードの読みやすさの観点からも)
例えば、DAOとADOの双方に参照設定がある状態で、単に
「Dim objRS As Recordset」と宣言した場合、参照設定で
DAOとADOのどちらがより上位になっているかによって、
「DAO.Recordset」と「ADODB.Recordset」のどちらとして扱われるかが
変わってしまうことになります。
(結果として、DAOのつもりで「objRS.Edit」と記述した箇所が、何かの
拍子でADOの方が参照設定の優先順が上げられた場合、
ADODBにはEditメソッドはありませんので、「メソッド又はデータ メンバ
が見つかりません」というエラーも発生し得る、と)
ただ、逆に、同名のオブジェクト等が存在しなければ(→今回のご質問で
挙げられているQueryDefなど)、上位オブジェクトの宣言はなくても動作は
しますので、上位オブジェクトまでつけて宣言しないことを、誤りということ
まではできないように思います。
(例えば、DoCmdオブジェクトは厳密にはAccessの配下にありますので、
同じ理屈でいくとこれは「Access.DoCmd.OpenForm」として
呼び出さなければ、ということになってしまうのではないでしょうか)
うおーー
とてつもなくよく理解できました。
ADOは「ADODB.Recordset」
があること理解できただけでも感謝です。
参照設定での以降この辺もちゃんと記述したいと考えております。
ありがとうございました。
No.2
- 回答日時:
VBAを動作させる環境が手元に無いので確認が取れないのですが、VB6や.net以降では、名前空間を事前に宣言できるImportsステートメントという物があります。
そこで、DAOを宣言されているのだと思います。
その場合、
Dim myDB As DAO.Database を Dim myDB As Database と書くことができるようになります。
Importsステートメントのい使用は、プログラムの先頭に宣言する必要があります。
プログラムの先頭(ソースコードの先頭行付近)に 「Imports DAO」の宣言があると思われます。
早々の御回答ありがとうございます
Importsステートメント
なるものがあるのですね
チェックしていみます
ありがとうございます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) セルS2に入力した「月」と一致したB列の右隣へセルS110の値を転記する下記マクロを実行するとエラー 2 2022/12/06 17:32
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) 転記マクロ 変数が定義されていませんの解決法 2 2023/04/16 16:46
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- Visual Basic(VBA) VBAの繰り返し処理表記と複数の処置条件について 1 2023/01/23 20:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AccessのMDBファイルを開く際に...
-
ストアドプロシージャで外部プ...
-
ADOを使ったDBアクセス後のメモ...
-
オラクルのシーケンスについて
-
VBからRDOの接続ができない!困...
-
テキストボックス名を変数で指...
-
postgresql DELETE後commit...
-
【Excel】[Expression.Error] ...
-
共有フォルダに誰が何にアクセ...
-
SQLPLUSで結果を画面に表示しない
-
100万行のCSVを10万行ずつのフ...
-
#1062 - '0' は索引 'PRIMARY' ...
-
特定のエクセルファイルを起動...
-
Access VBA を利用して、フォル...
-
Batch: フォルダ内の特定のファ...
-
アクセスでエラー このフィー...
-
excelを共有ファイルにすると行...
-
AccessVBAで作成したExcelファ...
-
【CSVファイル】先頭の文字列に...
-
Accessで「誰々が使用中です」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ADOを使ったDBアクセス後のメモ...
-
ストアドプロシージャで外部プ...
-
テキストボックス名を変数で指...
-
AccessのMDBファイルを開く際に...
-
VBからRDOの接続ができない!困...
-
オラクルのシーケンスについて
-
Symfowareでの動的SQL
-
Oracle:Oracleシーケンスとは?
-
SQL Serverへエクスポートする...
-
postgresql DELETE後commit...
-
SQLファイルへの変数渡しについて
-
SQL Server 2000 SELECT文実行...
-
ORACLE9iをVB6のADOで更新でき...
-
ACCESS97 でISAMがありません
-
アウトルックのメール送信
-
共有フォルダに誰が何にアクセ...
-
【Excel】[Expression.Error] ...
-
特定のエクセルファイルを起動...
-
SQLPLUSで結果を画面に表示しない
-
【CSVファイル】先頭の文字列に...
おすすめ情報