掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DBGridにSELECT結果を表示させるには (ID:43734)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
質問の趣旨と変わっているような...まぁいいか。 以下のようなテーブルがあって CODE で連動する場合を考えてみます。 /* 親データ */ CREATE TABLE TBL_MASTER ( CODE INTEGER NOT NULL, NAME VARCHAR(100), PRIMARY KEY (CODE) ); INSERT INTO TBL_MASTER (CODE, NAME) VALUES (1, 'AAAAA'); INSERT INTO TBL_MASTER (CODE, NAME) VALUES (2, 'BBBBB'); INSERT INTO TBL_MASTER (CODE, NAME) VALUES (3, 'CCCCC'); INSERT INTO TBL_MASTER (CODE, NAME) VALUES (4, 'DDDDD'); INSERT INTO TBL_MASTER (CODE, NAME) VALUES (5, 'EEEEE'); commit; /* 子データ */ CREATE TABLE TBL_DETAIL ( CODE INTEGER NOT NULL, SEQ INTEGER NOT NULL, POINT DOUBLE PRECISION, PRIMARY KEY (CODE, SEQ) ); INSERT INTO TBL_DETAIL (CODE, SEQ, POINT) VALUES (1, 1, 10); INSERT INTO TBL_DETAIL (CODE, SEQ, POINT) VALUES (1, 2, 20); INSERT INTO TBL_DETAIL (CODE, SEQ, POINT) VALUES (2, 1, 30); INSERT INTO TBL_DETAIL (CODE, SEQ, POINT) VALUES (2, 2, 40); INSERT INTO TBL_DETAIL (CODE, SEQ, POINT) VALUES (3, 1, 50); INSERT INTO TBL_DETAIL (CODE, SEQ, POINT) VALUES (3, 2, 60); INSERT INTO TBL_DETAIL (CODE, SEQ, POINT) VALUES (4, 1, 70); INSERT INTO TBL_DETAIL (CODE, SEQ, POINT) VALUES (4, 2, 80); INSERT INTO TBL_DETAIL (CODE, SEQ, POINT) VALUES (5, 1, 90); INSERT INTO TBL_DETAIL (CODE, SEQ, POINT) VALUES (5, 2, 100); commit; 言わんとする事は、恐らく DBGrid1 に親データ (TBL_MASTER) を表示し、 DBGrid1 で選択されたレコードに関連する子データ (TBL_DETAIL) を DBGrid2 に表示したいという事なのでしょう。 1.空のプロジェクトを開いて以下をコピーし、フォームデザイナに〔Ctrl〕+〔V〕で貼り付けて下さい。 -------------------- ここから -------------------- object IBDatabase1: TIBDatabase Left = 24 Top = 216 end object IBTransaction1: TIBTransaction DefaultDatabase = IBDatabase1 Left = 84 Top = 216 end object IBQuery1: TIBQuery Database = IBDatabase1 Transaction = IBTransaction1 Left = 160 Top = 216 end object DataSource1: TDataSource DataSet = IBQuery1 Left = 240 Top = 216 end object DBGrid1: TDBGrid Left = 8 Top = 8 Width = 300 Height = 200 DataSource = DataSource1 TabOrder = 0 end object IBQuery2: TIBQuery Database = IBDatabase1 Transaction = IBTransaction1 Left = 160 Top = 276 end object DataSource2: TDataSource DataSet = IBQuery2 Left = 240 Top = 276 end object DBGrid2: TDBGrid Left = 316 Top = 8 Width = 300 Height = 200 DataSource = DataSource2 TabOrder = 1 end object Button1: TButton Left = 447 Top = 215 Width = 75 Height = 25 Caption = 'Connect' TabOrder = 2 end object Button2: TButton Left = 538 Top = 215 Width = 75 Height = 25 Caption = 'DisConnect' TabOrder = 3 end -------------------- ここまで -------------------- 2.Form1 の OnCreate イベントハンドラに以下を記述します。 procedure TForm1.FormCreate(Sender: TObject); begin with IBDatabase1 do begin LoginPrompt := False; Params.Values['user_name'] := 'SYSDBA'; // User Name Params.Values['password' ] := 'masterke'; // Password(IBならmasterkey) Params.Values['lc_ctype' ] := 'UNICODE_FSS'; // CharSet DatabaseName := 'localhost:C:\TEST\DATA.FDB'; end; with IBQuery1 do begin SQL.Clear; SQL.Add('Select * From TBL_MASTER'); end; with IBQuery2 do begin SQL.Clear; SQL.Add('Select * From TBL_DETAIL'); SQL.Add('Where '); SQL.Add(' CODE = :_CODE '); SQL.Add('ORDER BY '); SQL.Add(' SEQ '); end; end; 3.Button1 (Connect) の OnClick イベントハンドラに以下を記述します。 procedure TForm1.Button1Click(Sender: TObject); begin IBQuery1.Open; end; 4.Button2 (DIsconnect) の OnClick イベントハンドラに以下を記述します。 procedure TForm1.Button2Click(Sender: TObject); begin IBQuery2.Close; IBQuery1.Close; end; 5.DataSource1 の OnDataChange イベントハンドラに以下を記述します。 procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); begin IBQuery2.Close; IBQuery2.ParamByName('_CODE').AsInteger := IBQuery1.FieldByName('CODE').AsInteger; IBQuery2.Open; end; 6.実行してテストしてみてください。 # もっと効率的なやり方があったような気がしましたが、 # DBGrid は殆ど使った事がないので忘れているのかもしれません。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.