• ベストアンサー

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

  • AccessVBAにて動的にテーブルを作成する方法

    AccessVBAにて現在入力された値に従ってAccessVBAにて動的にテーブルを作成したいのですが方法がわかりません。 作成するテーブルの要件として列のデータ型は全てテキスト型で構わないのですが列数を可変にしたいのです。 対策をご存知の方ご教授願います。 宜しくお願いします。

  • テーブルのデータをテキストボックスに表示させるには?

    ソース修正をしています。 が、約4年ぶりの仕事で、行き詰まっています。 AccessVBAは初心者です。 この問題で、もう3日を費やしてしまいました・・・。 どなたか、助けてくださいませ!! Formに約10個のテキストボックスがあり、そこにはあるテーブルのデータが表示されるようになっています。 そこで、もう一つ表示させたいデータがあったので 1)Formにテキストボックスを1個追加し、 2)テーブルに一つフィールドを追加し、 3)テーブルにデータを入れるためのINSERT文を修正し、 4)実行してみました。 が、テキストボックスには #Name? が表示されて、どうも思ったと通りに動きません。 テーブルを確認すると、データはちゃんと入っていますが、テキストボックスにはどうしても値が入ってきません。 よろしくお願いします。m(__)m

  • AccessVBA でテーブルをインポートする方法

    AccessVBAでテーブルをインポートする方法 aaa.mdbの中のあるテーブルを、bbb.mdbにインポートする方法を教えてください。 ボタンで実行させたいのでVBAを使った方法をお願いします。

  • Accessのデータ操作について(AccessVBA)

    AccessVBA初心者です。 Accessのデータを操作する方法について質問です。 例えば形式、フィールドが同じ複数のテーブルを一つのテーブルにまとめるようなとき、 Insert into~構文を使っていく方法でするとします。 (1) Dim connAccess As ADODB.Connection Set connAccess = Application.CurrentProject.Connection のような接続方法でSQL文を実行する (2) CurrentDb.Execute SQL文 上記の2つのパターン、どちらでも出来ますよね? (1)の方は全然理解できません。 あの2行だけでは接続すらで来ていないかもしれません… (2)の方が単純で接続なんかも意識せずに出来ますよね。 この2つの方法はどう違うのでしょうか。 こうゆうデータベースの操作について書かれているサイトがあれば、 そちらも教えてほしいです。 よろしくお願いいたします。

  • 2つのテーブルのデータまとめて取得したい

    SQL Server2008を使用しているのですが、どうのようにデータを取得すれば良いか わからず困っております。 例えば、 名前は違うが全く同じテーブルが2つあるとします。 テーブルAには6レコード、テーブルBには3レコードのデータが存在するとします。 この時、単純に6レコード+3レコードの 9レコード分をひとつのテーブルとしてデータを 取得するにはどのようなSQL文を書けばよいでしょうか? SELECT * FROM テーブルA, テーブルBでは18レコードもデータを取得してしまい、且つ フィールド数も増加してしまいます。 宜しくお願いいたします。

  • AccessVBAでサポートお願いします。

    こんばんわ。AccessVBA初心者です。 下記のような処理を作りたいのですがわかりません・・。 もしお分かりになる方がいらっしゃいましたらサポートをお願い致します。 「テーブルA」「テーブルB」があり、それぞれのテーブルに連結した「フォームA」「フォームB」(両方とも帳票フォーム)があります。 テーブルには幾つかのフィールドがあり、その中にチェックボックスに連結したフィールドがあります。 まず、「フォームA」を開き、任意のレコードのチェックボックスにチェックを入れ(複数選択あり)、あるコマンドボタンをクリックするとチェックの入ったレコードのみを「テーブルA」から「テーブルB」へ移動させる処理を作成したいのですがどうもうまく作れません。 「テーブルB」へ移動後は「テーブルA」から該当のレコードが削除されている必要があります。 また、テーブルBには随時データが蓄積されていく必要があります。 どなたかお分かりになる方がいらっしゃいましたらご教授願います。 その際、VBAのソースを記述頂けますと助かります。 どうぞ宜しくお願い致します。

  • Access97でテーブルのデータを並べ替える方法

    Access97で(OSは98)テーブルで入力したデータをクエリーで並べ替えをかけるのですが、 そのフィールドのデータを昇順、降順以外で自分の思うような順番で 並べ替えることができますか? 例) パソコン、デジタルカメラ、プリンタ、メディアのような順番で。。。 今後他のテーブルと結合するのでこれら以外にコード番号を入力する フィールドを作り、これらをこの順番で入力すればよいのかもしれませんが Excelのユーザー設定リストを並べ替えで使うような機能がAccessにあったかと思いまして。よろしくお願いいたします。

  • accessvbaで内容を結合して保存

    accessvba初心者です。質問なのですが下記のようなxmlファイルがあるとします。 <?xml version="1.0" encoding="shift_jis"?> <データ> <aaa> <bbb>1</bbb> <ccc>2</ccc> <ddd>3</ddd> <eee>4</eee> <fff>5</fff> </aaa> </データ> これをvbaにて<bbb><ccc><ddd><eee>の内容を取り出し結合して出来た1234をAテーブルのBフィールドにレコード保存したいのですが出来ますでしょうか? テーブルを開いてフィールドに保存する部分はなんとか理解出来たのですが要素を取り出して結合する部分がわかりません。 access2003を使用しています。よろしくお願いします。

  • ACCESSVBAにてフォーム内項目のプロパティ取得

    ACCESSVBAでフォーム内の項目のプロパティを取得したいです。 (その項目はどのテーブルを参照しているかをみたいのです。値集合ソースなどでしょうか?) テーブルのプロパティを取得するプログラムサンプルはあるのでそれを利用して作成しようとしていますが、フォームの見方がわかりません。 テーブルの場合のサンプルでは (うろ覚えです。ごめんなさい) Dim XXXX As tabledef XXXX.attribute などを使用していて、このあたりをフォームに当てはめればよいのではと思っていますが、見当違いでしょうか。 初心者なうえにうろ覚えの内容で申し訳ありません。 よろしくお願いいたします。

  • フォームから2つのテーブルにデータを書き込みたい

    Accessで T_aテーブルとT_bテーブルがありそれぞれのフィールドが以下のようになっているとします。 T_a:フィールド名 データ型    ID  オートナンバー型    商品番号 テキスト型 主キー T_b:フィールド名 データ型    ID  オートナンバー型 主キー    商品番号 テキスト型 このときフォームから入力したデータをそれぞれのテーブルの商品番号に追加したいのですがどのようにすればよいのでしょうか。  よろしくお願いいたします。