IBQueryのQuickrepへのセットについて

解決


アラミス  2007-04-12 11:13:23  No: 25741  IP: 192.*.*.*

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だけではなくフォームのコントロール表示も同じなのかもしれませんがよろしくお願いします。

編集 削除
サンプー  2007-04-12 18:31:08  No: 25742  IP: 192.*.*.*

QuickReport のbeforePrintに上記のSQLをいれたらどうですか?

編集 削除
ものぐさ倶楽部  2007-04-13 11:10:21  No: 25743  IP: 192.*.*.*

rep_PrintForm.QuickRep1.Dataset := DataModule1.IBQuery1;
> rep_PrintForm.QuickRep1.Preview;

これがだめだったってことですか?

編集 削除
ちがう  2007-04-13 12:49:48  No: 25744  IP: 192.*.*.*

Previewした後にクエリをCloseしてるのがだめってこと。
Preview時にrep_PrintFormがモーダルで表示されるのなら話は別。
このへんはAccessだろうがDelphiだろうが理屈は一緒。

編集 削除
アラミス  2007-04-16 09:20:22  No: 25745  IP: 192.*.*.*

サンプーさん、ものぐさ倶楽部さん、ちがうさんありがとうございます。
皆さんのご指摘を見て修正し、思うようにうごきました。
ありがとうございました。

編集 削除