• ベストアンサー

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

  • DATABASE型について

    ACCESSプロジェクトを使っています。  (基本的な理解不足だと思いますが) Access97では、 Dim DB As Database Dim RS As Recordset と宣言して Set DB =CurrentDb() Set RS=DB.OpenRecordset(… で使えていましたが、Accessプロジェクトでは使えません。 (ストアドプロシージャ部分ではなく、フォームのVBA部分で) フォーム上のボタンから、モジュール操作を実行したいのですが、 上記 そのまま使用すると 「コンパイルエラー ユーザー定義型は定義されていません」 と出てきます。 Accessプロジェクトで操作するにはどのようにすればいいのでしょうか?

  • アクセスでDATABASEの表示がされない

    アクセス2000を使用しています。 初歩的質問かと思いますが、以前、アクセスのプログラム(アクセス97など)で dim dbs as database set dbs=currentdb のような記述をして何も問題なかったのですが、 ちょっとアクセスを操作しようとして dim dbs as でDATABASEが表示されません。(ちなみに表示されるのはdで始まるのはdataaccesspageが最初です) 何が問題でどうすれば良いかご教示下さい。 よろしくお願いします。

  • 実行時エラー'13' :型が一致しません。

    Windows XPで、Access 2002を使用しています。 テーブル1のフィールド1の値を、ハイフン区切りで分割をしたいと思い、split関数を使用して、 下記、VBAを実行しましたが、「実行時エラー'13' :型が一致しません。」と言うエラーが 発生して、先に進む事ができません。 ツール→参照設定で、Microsoft DAO 3.6 Object Libraryにチェックを入れたり外したりしましたが、 全く改善されず、同じエラーが発生します。 DAO.を付けると解決するとの事で、 Dim dbs As DAO.Database Dim rs As DAO.Connection としましても、同じエラーが出ます。 デバッグしますと、 Set rs = dbs.OpenRecordset("select フィールド1 from テーブル1") の所で発生しているようです。 Private Sub コマンド0_Click() Dim dbs As DAO.Database Dim rs As DAO.Connection Set dbs = CurrentDb Set rs = dbs.OpenRecordset("select フィールド1 from テーブル1") Dim Vartemp As Variant Vartemp = Split(rs, "-") Debug.Print Vartemp(0) Debug.Print Vartemp(1) Debug.Print Vartemp(2) Debug.Print Vartemp(3) End Sub 以上、初心者で、行き詰ってしまっておりますので、どうか宜しくお願いします。

  • ACCESS2000VBAでエラー「型が一致しません」

    ACCESS2000で、フォーム上にボタンを作り、そのボタンをクリック時に 以下のイベント プロシージャを実行させています。 Dim dbs As Database Dim rst As Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("採番_相談者") Dim Number rst.MoveFirst Number = rst!相談者番号 Number = Number + 1 Me.相談者NO = Number '相談者NOはフォーム上のテキストボックスです。 で上記 Set rst = dbs.OpenRecordset("採番_相談者") の所で、「実行時エラー 13 型が一致しません」とエラーになります。 テーブル:採番_相談者は、オートナンバー型のIDフィールドと相談者番号という7桁のテキスト型で ”1000001”が入っています。(ちなみに、数値型に変えても同じエラーでした。) 詳しい方教えてください。お願いします。

  • OpenRecordSet  他について

    Accessプロジェクトを使用しています。 Dim strSQL As String Dim DBS As Database Dim RST As DAO.Recordset Set DBS = CurrentDb Set RST = DBS.OpenRecordset("TESTDATA", dbOpenDynaset,dbReadOnly) 「実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。」 と出てきます。デバッグを押すと、 上記最終行でSTOPします。 次のように変更しても同じでした。 Set RST = DBS.OpenRecordset("TESTDATA") 又は Set RST = DBS.OpenRecordset("TESTDATA", dbOpenDynaset) ヘルプ等を見ると、Jetワークスペースでのみ 使用可と出てきます。 ADO,DAO,OpenRecordset等が理解しきれていないように思うのですが、 Access97(DAO?)では 何も出てこなかった上記のような内容、 何故Accessプロジェクトでは 上手くいかないのでしょうか?

  • ACCESS2000でテーブルをVBAからテーブルを読み込む方法

    ACCESS2000を使っています。 以下の指定をした場合、「ユーザ定義型は定義されていません」のメッセージが出て、コンパイルが通りません。 なにかインストールや設定が必要なのでしょうか? Dim db As Database Dim rs As Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("テーブル名", dbopendynaset) ヘルプ等を自分なりに参照してみたのですが、わかりません。教えてください。

  • AccessVBAで「dim dbs as database」がエラーになる

    済みませんが、非常に基本的なことを聞かせていただきたいと思います。 AccessのVBAで関数を実行すると、いきなりエラーになりました。 dim dbs as database の文でエラーになり、「コンパイルエラー ユーザ定義型が定義されていません」というエラーメッセージが出ました。 databaseが定義されているような感じです。 どうすれば宜しいでしょうか?

  • アクセス2000VBA DAOをADOに書き換えてください

    アクセス2000VBA DAOをADOに書き換えてください 下記プログラムをADOに書き換えてください。(DAT1、DAT2はモジュールにて定義してあります) Option Compare Database Dim DBS As Database Dim QDF As QueryDef Dim RST As DAO.Recordset Dim COUNT1 Private Sub Form_Load() On Error Resume Next DAT2 = [Forms]![伝票]![HAKKOU1] Set DBS = CurrentDb Set QDF = DBS.QueryDefs("発行") With QDF .Parameters("DAT1") = DAT2 ’もしかしたら DAT2 ではエラーがでるかもしれません。 Set RST = .OpenRecordset() ’正しい記述を教えてください .Close End With With RST COUNT1 = !指示書 .Close End With

  • Access2002 VB がエラー

    Access2002 VBで以下のコーディングをしてます Dim db As Database Dim rs As Recordset Dim fld As Field Set db = CurrentDb Set rs = db.OpenRecordset("ConvertChar") これを実行するとdb宣言行で以下のエラーが表示されます。 コンパイルエラー: ユーザ定義型は定義されていません。 これは何が原因でエラーとなるのでしょうか? 宜しくお願いします。

  • ACCESSの SELECT SUM

    SELECT SUMを 計算させると ゼロしか 出てきません。 どこが悪いのでしょうか?  日付         出金       氏名 2012/12/10      540      安田 2012/12/10      1020      斉藤 2012/12/10       970      TOM 2012/12/11      650      池田  2012/12/11     2010      南 2012/12/12      350      林田 2012/12/12     1200      加藤 のようなテーブルがあり Private Sub コマンド_click() Dim Db As Database Dim SQL As String Dim rs As Recordset Dim gokei As Long Set Db = CurrentDb SQL = "SELECT Sum(出金) as gokei FROM テーブル  WHERE 日付= #" & [Forms]![フォームアルファ]![テキスト] & "# " Set rs = Db.OpenRecordset(SQL) MsgBox gokei End Sub を フォームアルファに 新しく作ったコマンドボタンのクリック時に 書きました。 これを テキストの日付を変えておいて いろいろ試しても ゼロのメッセージしか出ません。 WHERE以下が 間違っていないか 試しに Private Sub コマンド_click() Dim Db As Database Dim SQL As String Dim rs As Recordset Dim Count As Long Set Db = CurrentDb SQL = "SELECT (出金)  FROM テーブル  WHERE 日付= #" & [Forms]![フォームアルファ]![テキスト] & "# " Set rs = Db.OpenRecordset(SQL) If rs.EOF Then Count = 0 Else rs.MoveLast Count = rs.RecordCount End If MsgBox Count End Sub を 実行すると ちゃんと 正しいレコード数が 表示されます。 「出金」のデータ型は 長整数になっています。 どこが 悪いのでしょうか? 目的は 指定した日付の 出金の合計を取り出したいのです。 . . .