プロが教えるわが家の防犯対策術!

お世話になっております。
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は記述してあります)
私には謝った記述に見えるのですが、動作
している理由がわかりません。

質問が変かもしれませんが、どなたか教えて
頂けるありがたいです。

A 回答 (2件)

> 上記の定義は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」として
 呼び出さなければ、ということになってしまうのではないでしょうか)
    • good
    • 0
この回答へのお礼

うおーー
とてつもなくよく理解できました。
ADOは「ADODB.Recordset」
があること理解できただけでも感謝です。
参照設定での以降この辺もちゃんと記述したいと考えております。

ありがとうございました。

お礼日時:2010/03/05 08:43

VBAを動作させる環境が手元に無いので確認が取れないのですが、VB6や.net以降では、名前空間を事前に宣言できるImportsステートメントという物があります。


そこで、DAOを宣言されているのだと思います。
その場合、
Dim myDB As DAO.Database を Dim myDB As Database と書くことができるようになります。
Importsステートメントのい使用は、プログラムの先頭に宣言する必要があります。
プログラムの先頭(ソースコードの先頭行付近)に 「Imports DAO」の宣言があると思われます。
    • good
    • 0
この回答へのお礼

早々の御回答ありがとうございます
Importsステートメント
なるものがあるのですね

チェックしていみます
ありがとうございます

お礼日時:2010/03/05 08:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!