2つのテーブルを照合して、データを抽出・更新するには?


りな  2010-01-10 00:11:02  No: 36844

こんにちわ。delphi4  oracle8iを使っています。

2つのテーブルがデータベース上にあり、Aテーブルにはプライマリーキーがかかっている顧客IDと個人情報・Bテーブルには、プライマリーキーがかかっている商品IDとその商品を購入したか人の情報(この情報の中には、TableAの顧客IDが含まれていて、TableBではプライマリーキーがかかってなく、重複可能です。)が載っています。tableAの顧客IDを検索した際、その内容がフォームに表示され(ここまではできてます。)、同時にその顧客IDをつかって、tableBでもその顧客IDをもとにデータが抽出する方法(
DBGridに表示)を教えていただけないでしょうか?さらに、TableBに同じ顧客IDをもつ、テーブルAのデータがある際には、TableAの1つの項目(purchased)に、フラグが立つ方法を教えていただけないでしょうか?
ちなみに、tableBのdataset,query2はtableAとは別のフォームにあります。

現在、試しているのは、
まず、sql.add('select * from tableA where ID = :value....
dbgridに表示
同じボタンクリック処理の中で、
 
  with query 2 do(←抽出のみの場合)
    begin 
      close;
       with sql do
          begin
             add('select * from tableB where tableA.ID = tableB.ID');
          end;
       open;
     end;
    

   with query 2 do(フラグを立てる場合)
    begin 
      close;
       with sql do
          begin
             add('update tableA set purchased = '1'  where tableA.ID = tableB.ID');
          end;
       open;
     end;

よろしくお願いいたします。


HOta  2010-01-10 01:07:58  No: 36845

Query1のSQLに
Select ID,Name
 From TableA
を設定します。
Datasorce1のDatasetをQuery1にします。

Query2のSQLに
Select *
 From tableB 
 Where ID = :ID
として、
Query2のParamsを選択して、右端の[...]をクリックして、ParamsにIDを追加します。
Query2のDatasorceをDatasorce1にします。
これで、Query1をマスターにして
Datasorce2のDatasetをQuery2にします。

DBGrid1のDatasorceをDatasorce1にします。
DBGrid2のDatasorceをDatasorce2にします。

これで、Query1,Query2をOpenします。
以上で2つのテーブルの連携が出来ます。
DBGrid1のレコードを動かすと、DBGrid2の内容は、選択したIDのレコードを表示します。


りな  2010-01-10 08:33:05  No: 36846

HOtaさん、ちなみにこれは、私が書いた命令文のあるボタンのonclickのところに書けば、ボタンをクリックしたときだけ、上記のような処理ができますか?また、updateでフラグを1つの項目に立てることは可能でしょうか?


HOta  2010-01-10 17:46:13  No: 36847

何も試されずに質問されているようですが、試してみましたか?
可能です。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加