Delphi初心者ですが、interbaseとDelphi6-Proを使ってDBシステムを作ろうとしています。
IBQueryとQuickRepの関係がよくわからないので教えてください。
DataModuleにTIBDatabase、TIBDataset2個、TDatasource2個およびTIBQueryを配置して
Form1のボタン1をクリックしたとき、Form2上のQuickreportを表示させることを考えています。
Form1のボタン1のイベントに以下のようなコードを書きました
//----------- 印刷ページの処理 --------------
//
// 一覧印刷処理
procedure TFrm_Main.Bbtn_Prt1Click(Sender: TObject);
//****<< 一覧のデータソース創生 >>****
Var
SQLstr: string;
begin
#### このSQLは二つのテーブルをJOINしています ####
SQLstr := '';
SQLstr := 'select t1."CODE_NO",t1."CATEGORY_NO",t4."CATEGORY_MEI"';
省略
SQLstr := SQLstr + ' inner join "TBL_CATEGORY" t4 ON t1."CATEGORY_NO" = t4."CATEGORY_NO"
SQLstr := SQLstr + ' order by t1."CATEGORY_NO";';
try
with DataModule1.IBQuery1 do
begin
close;
SQL.Clear;
SQL.Add(SQLstr);
open;
end;
rep_PrintForm.QuickRep1.Preview;
DataModule1.IBQuery1.Close;
except
rep_PrintForm.Free;
end;
end;
SQLは結果を確認済みです(エラーはありません)。
このときrep_PrintForm.QuickRep1のDataSetプロパティに
DataModule1.IBQuery1をセットしてもDataFieldに項目が見えないのですが
動的にセットしてフィールド項目を使用出来ないのでしょうか。
MsAccessではコントロールのレコードソースにSQLをセットすればそのまま
使えますが私はそのイメージだったのですが間違っているのでしょうか。
QuickReportだけではなくフォームのコントロール表示も同じなのかもしれませんがよろしくお願いします。
QuickReport のbeforePrintに上記のSQLをいれたらどうですか?
編集 削除rep_PrintForm.QuickRep1.Dataset := DataModule1.IBQuery1;
> rep_PrintForm.QuickRep1.Preview;
これがだめだったってことですか?
Previewした後にクエリをCloseしてるのがだめってこと。
Preview時にrep_PrintFormがモーダルで表示されるのなら話は別。
このへんはAccessだろうがDelphiだろうが理屈は一緒。
サンプーさん、ものぐさ倶楽部さん、ちがうさんありがとうございます。
皆さんのご指摘を見て修正し、思うようにうごきました。
ありがとうございました。