0

Delphi 16 と Fast Reports 4.1 を使用しています。エンバカデロ・エディオン。

大まかに言えば、私の質問は次のとおりです。レポートの生成中に、(データベースに接続された) frxReport にテーブル エントリの一部を強制的にスキップさせる方法はありますか?

私が言いたいことは、次のように説明できます。

データベースから 1000 エントリの大きなテーブルがあり、このテーブルのデータで満たされたレポートを、エントリごとに 1 ページで生成するとします。当然、1000 ページのレポートは処理するには多すぎるため、レポートの準備中にテーブルのどのエントリを使用するかを Fast Report に伝える方法が必要です。

テーブルのすべてのエントリのサブセットのみを選択するには、DBGrid を使用して DBGrid.Options.dgMultiselect := True を設定し、マウス クリックで目的の行を選択します。次に、選択した行を別の TClientDataSet (TempDataSet という名前) コンポーネントにコピーします。その後、現在のレポートのデータ セットを新しく作成した TempDataSet ( 'frxDataSet1.DataSet := TempDataSet' ) に設定し、準備レポートを起動します。

これは問題ないように思えますが、私がプログラミングしているアプリケーションのコンテキストでは受け入れられません。元の質問に戻ります:「frxReport1.PrepareReport();」のときに「frxDBDataset1.DataSet」のどのエントリにアクセスする必要があるかを制御する方法はありますか? と呼ばれる?

ありがとうございました

4

2 に答える 2

1

私の答えは少し話題から外れています。最後のコメントを参照すると、Adodatasets を Memorytables として使用することが可能です。

var
 I:Integer;
begin
  for I := 0 to AdoDataset1.FieldCount - 1 do
    begin
      Adodataset2.FieldDefs.Add(AdoDataset1.Fields[i].FieldName
                               ,AdoDataset1.Fields[i].Datatype
                               ,AdoDataset1.Fields[i].Size);
    end;
      Adodataset2.CreateDataSet;
                                // just as example     
  While not AdoDataset1.Eof do  // here would be you code for inserting selected Rows
    begin
     AdoDataset2.Append;
    for I := 0 to AdoDataset1.FieldCount - 1 do
      begin
        Adodataset2.Fields[i].Assign(Adodataset1.Fields[i]);
      end;
    AdoDataset2.Post;
    AdoDataset1.Next;
    end;

end;
于 2013-04-09T17:35:56.720 に答える