• ベストアンサー

AccessVBAで他テーブルのデータを取得する方法について。

>はじめまして、私は、AccessVBAであるプログラム(仕事用)を作っていますが、初心者でもあり、行き詰まってしまいました。 テーブル1にフィールド1,2,3,4,5があり、各フィールドには、データが入力されています。 テーブル2には、フィールド1,2,3,4,5,6,7があり、フィールド1,2,3はテーブル1のフィールド1,2,3と同じデータが入力されています。 そこで、テーブル2のフィールド4,5に、テーブル1のフィールド4,5のデータを、プログラムを用いて取り込みたいのですが、どうすればいいのですか。 よろしくお願いします。

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

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.2

プログラムを書かずとも、更新クエリを使えばいいと思いますよ。 1:クエリを新規作成して、テーブル1、テーブル2をクエリに追加します。 2:んで、フィールド1,2,3をそれぞれマウスを使って結び付けます。 3:[クエリ]-[更新]を実行 4:テーブル2のフィールド4,5をクエリ下部のフィールド欄に追加 5:フィールド4のレコードの更新欄に「[テーブル1].[フィールド4]」などと入力(カギ括弧は不要) 6:フィールド5についても同様。 7:[!]ボタンをクリック。もしくは、クエリを保存してから、そのクエリをダブルクリックして実行する。 以上で、フィールド4,5の取り込みが完了するはずです。 尚、このクエリをプログラムから実行するには、 CurrentDB.Execute "更新クエリ名" を実行します。 Dim DB as Database Set DB = CurrentDB DB.Execute "更新クエリ名" MsgBox DB.RecordsAffected などとすると、変更のあったレコード数を知ることが出来ます。 蛇足になりますが、ご質問の内容に真っ正直に答えるとすると、 複数テーブルを参照する選択クエリを作成(上記を参照)して、 Dim RS As Recordset Set RS = CurrentDB.OpenRecordSet("クエリ名") で、複数テーブルをプログラムから開けます。

takabon02051016
質問者

お礼

今までは、エクセルで行っていたんですが、いろいろ問題もあり、データベースからレポートという、手法が必要となりました。 今回のプログラムは、3月末までに、レポートも含めて完成させなければなりません。 今まで、基礎となるデータを各テーブルを作成し、入力してきました。 今後は、そのデータを用いて、あらゆるレポートを作成しなければなりません。 今回の質問は、その過程における効率化(手作業は不可)の部分です。 したがって、何かのCmdボタンをクリックしただけで、基礎データにあるものは、条件が合えば抽出して、使用するという事柄でした。 一度、クエリについて勉強してみます。 また、ご相談する事と思いますが、よろしくお願いします。

takabon02051016
質問者

補足

早速教えて頂いたとおり行ってみました。 クエリはうまくいったのですが、プログラムで実行する時に、DB AS Databaseの変数確保で、ユーザー定義は使用できないというエラーが、発生してしまいました。 当然ですね、DAOならいいのですがADOでプログラムを作っているのですから、宣言から異なる事に気がつきました。 そこで、 Dim cn As ADODB.Connection Set cn = CurrentProject.Connection cn.Execute "クエリ名" オブジェクトを変えてみたところ成功です。 プログラム完成までは、まだまだ先の長い話ですが今後ともよろしくお願いします。 ありがとうございました。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

「クエリを作成する」ではだめなんですか?

takabon02051016
質問者

お礼

クエリを作成し、プログラムで実行することとし、成功しました。 プログラム完成までは、まだまだ先の長い話ですが今後ともよろしくお願いします。 ありがとうございました。

takabon02051016
質問者

補足

回答ありがとうございます。 「谷尻かおり書」に更新クエリが掲載されていたので参考にましたが、他テーブルのオープン等プログラムの記述がわからずエラーとなっています。 そのあたりを、参考プログラムで詳しく教えていただけるとありがたいです。

関連するQ&A