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

Accessでレコードのデータを読もうと標準モジュールに次のプログラムを作りました

Option Compare Database
Public longTATENO As Long
Public longYOKINO As Long

Public Sub no_gen()

Dim dbs As database
Dim RS As Recordset
Set dbs = CurrentDb

Set RS = dbs.Openrecordset("M_基本情報")
longTATENO = RS![立替処理No]
longYOKINO = RS![預金処理No]

End Sub

別のフォームを開くときに no_gen と書きそのフォームを開くと
dbs As database の所が反転表示になり
コンパイルエラー 
ユーザ定義型は定義されていませんと出ます。

何が悪いのでしょう?
Access初心者ですよろしくお願いします

A 回答 (4件)

ACCESSのバージョンは何でしょうか?



2000以降はADOが標準のデータベースになっています。ご質問者の書かれている文法はDAO用のものですので、NO.1の方が言われるようにVBAの参照設定で、DAO(たぶん3.6以降になると思います)の利用ができるようになっている(チェックがついている)か確認してください。

利用できるようになっていたら、明示的に
Dim dbs As DAO.database
Dim RS As DAO.Recordset
と指定してください。

この方が確実にDAOのデータベースやレコードセットとして認識されると思います。
    • good
    • 0
この回答へのお礼

早速のご回答、ありがとうございます。
Access2002です
ご指摘のようにDAOを明示的に書かないと
Set RS = dbs.Openrecordset("M_基本情報")
の所で型が違うというようなエラーが出て明示的に書くと
総て解決しました。

ちなみにDAOを使わない場合は、M_基本情報を他のテーブルと
リンクさせて呼び出すのでしょうか?

お礼日時:2006/11/22 11:00

>フォームに関連付けしないでテーブルのデータを呼び出す方法として、DAOやADOを使わないでもっと簡単に呼び出す方法はあるのかな、アクセスの基本機能としてプログラムの中にどのテーブルのどのデータを使うか明示的に書けないのかなと思っています。



根本的に勘違いされているような気がします。

ここはACCESSのコンサルティングをする場所ではありません。ご自身でACCESSに関する本などで基本的なことを勉強されてから質問された方がよろしいかと思います。私がこうしたことをコンサルティングする場合は、1時間あたり数万円をいただきます。
    • good
    • 0
この回答へのお礼

そのとうりですね。
ついつい甘えてしまったようです。

後は自分でじっくりと調べて見ますので
質問はこれで打ち切らさせていただきます。

申し訳ございませんでした。

お礼日時:2006/11/23 18:50

>ちなみにDAOを使わない場合は、M_基本情報を他のテーブルとリンクさせて呼び出すのでしょうか?



何を言われているのかよくわかりませんが、DAOと明示的に宣言していなければ、単にADOのデータベースとして定義されてしまったので、

Set RS = dbs.Openrecordset("M_基本情報")

の部分でDAOのデータベースとしては扱えず、エラーとなったのだと思います。

この回答への補足

解りにくい書き方で申し訳ありません。

アクセスではテーブルのデータはフォームにレコードソースや値集合ソースとして関連付けをし、利用すると理解しています。

フォームに関連付けしないでテーブルのデータを呼び出す方法として、DAOやADOを使わないでもっと簡単に呼び出す方法はあるのかな、アクセスの基本機能としてプログラムの中にどのテーブルのどのデータを使うか明示的に書けないのかなと思っています。

(参照設定でいろいろな機能を追加するのはなんとなく不安定な気がしますし、フォームに関連付けするのはプログラムが理解しづらくなるような気がして・・・)

私の理解不足等あればご指摘戴ければ助かります。

補足日時:2006/11/22 21:48
    • good
    • 0

dao(もしくはado)にチェックが入ってないのでは?


VBAを立ち上げた状態で
[ツール]の[参照設定]
の中のチェックを確認してみてください。
あと、関係ないですが
setしたもの(dbsとRS)は開放してあげないと
どんどんごみがたまっていってしまいますよ。
    • good
    • 0
この回答へのお礼

早速のご回答、ありがとうございます。
問題は解決しました。

お礼日時:2006/11/22 10:55

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