• ベストアンサー

MSAccess で database定義されていない?

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初心者ですよろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • gatt_mk
  • ベストアンサー率29% (356/1220)
回答No.2

ACCESSのバージョンは何でしょうか? 2000以降はADOが標準のデータベースになっています。ご質問者の書かれている文法はDAO用のものですので、NO.1の方が言われるようにVBAの参照設定で、DAO(たぶん3.6以降になると思います)の利用ができるようになっている(チェックがついている)か確認してください。 利用できるようになっていたら、明示的に Dim dbs As DAO.database Dim RS As DAO.Recordset と指定してください。 この方が確実にDAOのデータベースやレコードセットとして認識されると思います。

omelet
質問者

お礼

早速のご回答、ありがとうございます。 Access2002です ご指摘のようにDAOを明示的に書かないと Set RS = dbs.Openrecordset("M_基本情報") の所で型が違うというようなエラーが出て明示的に書くと 総て解決しました。 ちなみにDAOを使わない場合は、M_基本情報を他のテーブルと リンクさせて呼び出すのでしょうか?

その他の回答 (3)

  • gatt_mk
  • ベストアンサー率29% (356/1220)
回答No.4

>フォームに関連付けしないでテーブルのデータを呼び出す方法として、DAOやADOを使わないでもっと簡単に呼び出す方法はあるのかな、アクセスの基本機能としてプログラムの中にどのテーブルのどのデータを使うか明示的に書けないのかなと思っています。 根本的に勘違いされているような気がします。 ここはACCESSのコンサルティングをする場所ではありません。ご自身でACCESSに関する本などで基本的なことを勉強されてから質問された方がよろしいかと思います。私がこうしたことをコンサルティングする場合は、1時間あたり数万円をいただきます。

omelet
質問者

お礼

そのとうりですね。 ついつい甘えてしまったようです。 後は自分でじっくりと調べて見ますので 質問はこれで打ち切らさせていただきます。 申し訳ございませんでした。

  • gatt_mk
  • ベストアンサー率29% (356/1220)
回答No.3

>ちなみにDAOを使わない場合は、M_基本情報を他のテーブルとリンクさせて呼び出すのでしょうか? 何を言われているのかよくわかりませんが、DAOと明示的に宣言していなければ、単にADOのデータベースとして定義されてしまったので、 Set RS = dbs.Openrecordset("M_基本情報") の部分でDAOのデータベースとしては扱えず、エラーとなったのだと思います。

omelet
質問者

補足

解りにくい書き方で申し訳ありません。 アクセスではテーブルのデータはフォームにレコードソースや値集合ソースとして関連付けをし、利用すると理解しています。 フォームに関連付けしないでテーブルのデータを呼び出す方法として、DAOやADOを使わないでもっと簡単に呼び出す方法はあるのかな、アクセスの基本機能としてプログラムの中にどのテーブルのどのデータを使うか明示的に書けないのかなと思っています。 (参照設定でいろいろな機能を追加するのはなんとなく不安定な気がしますし、フォームに関連付けするのはプログラムが理解しづらくなるような気がして・・・) 私の理解不足等あればご指摘戴ければ助かります。

回答No.1

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

omelet
質問者

お礼

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

関連するQ&A