- ベストアンサー
Accsess テーブルを参照して別のテーブルにデータを取得する方法を教えてください
初めて質問します。 アクセスでデータベースを作成しようと悪戦苦闘中です。 <質問> 元データとなる住所録テーブルAがあります。 テーブルBにテーブルAの情報+αのデータをフォームを使って入力したいのです。 (1)テーブルAにはコードがあり、テーブルBに入力する際に、そのコードを入力するとテーブルAからデータを取得でき、テーブルBにコピーとして取得したいです。 (2)また同じコードが複数ある場合は、別ウィンドウを 開きそこから選択してテーブルBにコピーしたいです。 (1)と(2)では方法が違うと思うのですが、どちらの場合も教えて頂けないでしょうか? DLookup関数を使うのでしょうか・・・? よろしくお願いします。
- kanakana0220
- お礼率33% (1/3)
- オフィス系ソフト
- 回答数3
- ありがとう数1
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
補足 No1の補足に <A>テーブル ID Data1 Data2 1 abc *** <B>テーブル ID A_ID A_Data1 A_Data2 Data3 1 1 abc *** ××× とありますが、テーブルAと同一の内容をテーブルBに持たす必要性は? ま、私の書いた例でも都道府県名がダブってますが^^; No2の回答は、(2)の要望を実現する為に記載しました。 都道府県名も住所に連結すればいいのですが、複数の値を取得する例の為に書き直してあります。 住所には番地を付加する必要があるので、テーブルB上に別フィールドで持たせてあります。 テーブルAから取得した値を編集する必要が無いのなら、No1の例のようにして、補足の様にわざわざテーブルBに持たさない方がいいですよ。 モジュールを使用せず、フォーム上で選択したテーブルAの値に応じてテーブルAの内容を表示する例です。 テーブルAのレコードが少ない時は、この方法で大丈夫かと思います。 入力フォームのレコードソースをBとし、そのフォーム上でコンボボックスを作成し、コンボボックスのコントロールソースをA_ID、集合値ソースは、SELECT [A].[ID], [A].[Data1], [A].[Data2] FROM A; とします。 AテーブルのData1を表示したいテキストボックスのコントロールソースに、=[コンボ名].column(1)、Data2を表示したいテキストボックスのコントロールソースに、=[コンボ名].column(2)と設定してみてください。
その他の回答 (2)
- Nii
- ベストアンサー率48% (79/162)
補足無視で回答します。 テーブルAに郵便番号と都道府県、及び、市町村のデータが格納されている。 入力フォーム上で、郵便番号を入力すると、テーブルAから、該当する郵便番号の一覧が表示されたフォームが開き、選択にてフォーム上に該当住所をセット出来る。 該当の郵便番号が1件のみの場合は、無条件に住所をセットする。 呼び出しもとのフォームには、郵便番号・都道府県名・住所のテキストボックス 呼び出されるフォーム(例の場合は住所入力支援)には、呼び出しForm名・郵便番号・都道府県名・市区町村名漢字・町域名漢字が表示されるテキストボックス、SETというコマンドボタンがある。 入力フォーム Private Sub 郵便番号_AfterUpdate() If Not IsNull(Me.住所) Then If MsgBox("住所を置き返しますか?", vbYesNo, "上書き確認") = 7 Then Exit Sub End If End If DoCmd.OpenForm "住所入力支援", acNormal, , "郵便番号 like '" & Me.郵便番号 & "*'" Forms.住所入力支援.呼び出しForm名 = Me.Name If Forms.住所入力支援.Recordset.RecordCount = 1 Then Me.郵便番号 = Forms.住所入力支援.郵便番号 Me.都道府県名 = Forms.住所入力支援.都道府県名漢字 Me.住所 = Forms.住所入力支援.市区町村名漢字 & " " & Forms.住所入力支援.町域名漢字 & " " DoCmd.Close acForm, "住所入力支援" ElseIf Forms.住所入力支援.Recordset.RecordCount = 0 Then MsgBox "該当なし" Me.都道府県名 = Null Me.住所 = Null DoCmd.Close acForm, "住所入力支援" End If End Sub 呼び出されたフォームでは Private Sub SET_Click() r = dataset() End Sub Private Sub 町域名漢字_DblClick(Cancel As Integer) r = dataset() End Sub Public Function dataset() If Len(Me.呼び出しForm名) Then If IsLoaded(Me.呼び出しForm名) Then Forms(Me.呼び出しForm名).郵便番号 = Me.郵便番号 Forms(Me.呼び出しForm名).都道府県名 = Me.都道府県名漢字 Forms(Me.呼び出しForm名).住所 = Me.市区町村名漢字 & " " & Me.町域名漢字 End If End If DoCmd.Close acForm, Me.Name End Function
少し、考え方を整理する必要があるのでは・・・。 1、テーブル設計とデータ参照。 <A> ID Data1 Data2 1 A xxxx1 2 A xxxx2 3 B yyyyyy テーブル<B>は、次のようにしたいとします。 ID A_Data2 Data3 1 XXXX1 abc 2 XXXX2 efg この場合、テーブル<B>は次のように設計します。 <B> ID A_ID Data3 1 1 abc 2 2 efg この設計で、目的を達成するには、 (1)テーブルデザインで、列[A_ID]を選びます。 (2)下段の[フィールプロパティ]の[ルックアップ]をクリックします。 (3)表示コントロールを[コンボボックス]にします。 (4)[値集合ソース]をクリックして、{SELECT A.ID, A.Data1, A.Data2, * FROM A;}となるように<A>の列を選びます。 (5)[列数]を{3}にします。 (6)[列幅]を{0cm;0cm;3cm} これで、目的は達成されます。 2、テーブル<B>の入力フォーム。 ただ単に、<B>を選んで入力フォームを生成すれば、質問者が望むようなフォームが自動生成されます。 参照する<A>のデータが一つであれ複数であれ自動的に参照される形のフォームが出来上がります。 *つまり、悪戦苦闘中する必要は全くないということです。
補足
早速のご回答有り難うございました。 上記の作業をやってみました。 コンポボックスはうまく表示できました。 でも私の説明不足だったのですが、 <A>テーブル ID Data1 Data2 1 abc *** <B>テーブル ID A_ID A_Data1 A_Data2 Data3 1 1 abc *** ××× としたいのです。 上記のやり方ですと、A_IDの列にコンポボックスが 表示され選択できるようにはなるのですが、 次のカーソルにとんだ時、 A_Data1 A_Data2 の列にも自動的に数値が入るようにしたいのですが出来ません。 どうすればいいでしょうか? 折角丁寧にご説明いただいたのに申し訳ございませんが、もう少し私にお知恵を貸してください。 よろしくお願い申し上げます。
関連するQ&A
- 複数のテーブルからのデータ取得と連結
いつもお世話になっております。 JavaでDBからデータを取得するプログラムを作成中です。 単純なものは問題無いのですが、 複数のテーブルからデータを取得し、そのデータを連結させるプログラムを作りたいのですがわからず困っています。 テーブル1 コードA(Key) 名称A テーブル2 コードB(Key) 名称B テーブル3 コードA(Key) コードB(Key) コードC(Key) 名称C となっており、取得したデータを 名称A+名称B+名称C と表示したいのですが、どのような処理を行えばよいのでしょうか? ちなみに複数のレコードを操作するプログラムも作ったことが無いレベルです。 どなたかご教授お願いします。
- ベストアンサー
- Java
- INSERTしたテーブルデータの参照
いつもお世話になっています。 早速ですが質問したいことがあります。 環境は、ORACLE11gです。 よろしくお願いします。 PL/SQLにて、テーブルAに対してINSERTを行い、テーブルAにINSERTした データを元にデータを作成し、テーブルBにINSERTをしたいと考えています。 COMMITは、プログラムの処理が全て終わった後に行います。 一応プログラムを作成し、想定どおりの動作を確認できたのですが、一点だけ 気になることがあります。 テーブルAにデータをINSERTしてから、COMMITせずに、テーブルBのデータを 作成するために、テーブルAのデータを取得します。その際、最初に登録した テーブルAのデータは、テーブルBを作成する際、必ず取得できるのでしょうか。 (一応作成したプログラムでは取得できていますが、必ず取得できるものなのか を教えていただきたいです。) COMMITは、仕様上プログラムが全て終わった後にしか行えません。 質問は以上です。 質問文がごちゃごちゃして見難くてすみませんが、ご回答よろしくお願いします。
- ベストアンサー
- Oracle
- 2つのテーブルのデータまとめて取得したい
SQL Server2008を使用しているのですが、どうのようにデータを取得すれば良いか わからず困っております。 例えば、 名前は違うが全く同じテーブルが2つあるとします。 テーブルAには6レコード、テーブルBには3レコードのデータが存在するとします。 この時、単純に6レコード+3レコードの 9レコード分をひとつのテーブルとしてデータを 取得するにはどのようなSQL文を書けばよいでしょうか? SELECT * FROM テーブルA, テーブルBでは18レコードもデータを取得してしまい、且つ フィールド数も増加してしまいます。 宜しくお願いいたします。
- ベストアンサー
- SQL Server
- フォームデータの取得。どこに格納されている?
Perlからの乗り換え者です。 データベースとの連携が非常に楽なので詳しく勉強したいのですが、参考書が少ないので悪戦苦闘してます。 Perlではフォームの送信データは環境変数QUERY_STRINGやSTDINで取得することができますが、PHPの場合はどうやって取得するのでしょうか? PHPでも特定の環境変数に格納されているのですか? また、Perlのcgi-lib、ReadParseのような技もあるのでしょうか? 参考書のサンプルを見ても当たり前のようにさっと書いてあるだけで、どこがデータ取得の記述か分かりません。 たぶん質問No.146も同じようなことを質問されているような気がするのですが、私の場合、それ以前のもっと基本的な問題のようです。 GETの場合とPOSTの場合、両方教えていただけると助かります。 よろしくお願いします。
- ベストアンサー
- PHP
- テーブル参照について
お世話になります。 AテーブルとBテーブルを比較し、Aテーブルにしかないデータ一覧を表示するSQL文を作成しました。 SELECT * FROM Aテーブル WHERE NOT EXISTS(SELECT * FROM Bテーブル WHERE CODE=Aテーブル.CODE AND NAME=Bテーブル.NAME) 下記の場合はどのように記述すればいいのでしょうか? 検索結果はAテーブルに存在しているが、BテーブルまたはCテーブルには存在していないデータ。 以上よろしくお願いいたします。
- ベストアンサー
- Oracle
- 1つのテーブルからのデータ取得
お世話になります。 Table1にはA,Bのフィールドがあり 例えば A=01のレコードを取得(取得するフィールドはA,B) このレコードを(1)とする。 Table1のうち、Aが(1)のBと一致する レコードを(2)とする。 Table1のうち、Aが(2)のBと一致する レコードを(3)とする。 N番目のBと一致するTable1のAがなくなるまで 上記を繰り返す。 (1),(2),(3)・・・の A,Bの値を取得するためには どういうSQL文を書けばいいでしょうか? 例:ここでA=01を設定する テーブル例と結果 Table1 A: B 01:02 取得 02:04 取得 02:05 取得 03:04 X 04:06 取得 05:10 取得 07:11 X 10:15 取得 以上お教えください。よろしくお願いします。
- ベストアンサー
- SQL Server
- Access:テーブルの情報を参照して、フォームに反映させる方法
Access : テーブルの情報を参照して、フォームに反映させる方法 はじめまして。Access初心者です。 データベースの参照の仕方について質問いたします。 現在、商品情報のデータベーステーブルがあり その中には「商品ID」「メーカー名」「商品名」、3つのフィールドがあります。 ここから、入庫テーブルを作るために 入庫フォームに「商品ID」を入力すると 自動で「メーカー名」「商品名」が表示され 最後に「入庫数」を入力すれば、入庫テーブルが完成するようにしたいです。 例) データベーステーブル 商品ID メーカー名 商品名 1 A社 AAA 2 B社 BBB 3 C社 CCC 4 D社 DDD 上記のデータベースがあり 商品名「CCC」が100個入庫した際 入庫フォームに「3」を入力すると 「3」 「C社」 「CCC」が表示され 最後に、入庫数「100」を入力して、入庫テーブルの完了としたいです。 そこで、入庫フォームにデータベースの内容を反映させる仕方が分かりません。 どなたかご教授願えないでしょうか?
- 締切済み
- オフィス系ソフト
- DLookup関数を使ってサブフォームにデータを参照させたい
DLookup関数を使ってサブフォームにデータを参照させたい いつも大変お世話になっております。 ACCESS2003使用中の初心者です。 現在アンケートフォームを作成中なのですが、 コンボボックス(?でしょうか?)に社員IDを入力すると、 サブフォームに社員情報(所属、性別など)を表示できるようにしたいと思っております。 現在、質問表テーブル 社員情報テーブル(各テーブルはリレーションされてます) 質問入力フォーム 社員情報サブフォーム があります。 質問入力フォームの社員IDの欄にIDを入力するとサブフォームに表示されるようにしたいのですが、 DLookup関数を使うことはわかったのですが、どのように式を組み立てて良いのかがわかりません。 順番や""の使い方に悩みます。 補足情報として、社員IDは数値型、他はテキスト型の設定になっています。 申し訳ありませんが、ご教授ください。
- ベストアンサー
- オフィス系ソフト
- Access97で自動入力と反映が違うテーブルの場合
こんにちは、前の質問などでフォームへの自動入力は何とかできるようになったのですが、今度はその入力したデータを他のテーブルBに反映させたいのですが、どうしたら良いのでしょうか? テーブルA 店舗コード 店舗名 ※テーブルAの管理者は私ではなく、ネットワークで私のPCと「テーブルのリンク」でつながっています。 テーブルB 店舗コード 店舗名 商品番号 他に店の情報フィールドをいくつか作成 フォームC 店舗コード 店舗名 商品番号 他に店の情報テキストボックスをいくつか作成 フォームCで、店舗コードを入力したら店舗名が自動的に入力される方法は、フォームCのレコードソースをテーブルAにして、店舗コードの更新後処理をイベントプロシージャにして、下記イベントコードを設定しました。 Private Sub 店舗コード_AfterUpdate() Me![店舗名]=DLookup("店舗名","テーブルA","店舗コード=" & Me![店舗コード] & " ") End Sub そして、フォームの残りのテキストボックスに、店と商品に関するデータを入力し、入力した全てのデータをテーブルBに反映させたいのですが、どうしたら良いのでしょうか? 自動入力の方法でDLookupを使用したのがいけなかったのでしょうか? また、できればテーブルBは商品番号順に並びかえられているのですが、入力したら商品番号のリストの一番下に挿入されるという形にしたいのです。 どうかよろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- データーベースのテーブルのコードと言う列から、十個のあるコードのデータ
データーベースのテーブルのコードと言う列から、十個のあるコードのデータで、該当するレコードを検索する場合に、普通にSELECT文で、取得する以外に、その十個のコードの中で、テーブルに登録されてないものを取得する方法はありますか?
- 締切済み
- その他(データベース)
お礼
お礼が遅くなって申し訳ございません。 頑張って色々試してたんですが、やっぱり難しいです(^_^;) でも諦めずにボチボチ頑張ります。 有り難うございました<(_ _)>