クライアントデータセットのコピー

解決


alt  2008-10-21 19:16:08  No: 32289

WinXP Pro, Delphi 6 Enterpriseを使用しています。

DataSourceを用いて、ClientDataSet1はGrid1にリンクし、ClientDataSet2はGrid2にリンクしています。
(GridはExpressQuantumGrid4のcxGridです)

つまづいているのは、ClientDataSet1をClientDataSet2にコピーし、Grid2にもGrid1と同様のデータを表示させようというところです。
ClientDataSet2についてOnFilterRecordイベントを使い、Grid2上で表示するレコードを絞りたいのです。
そのため、まずはクライアントデータセットを複製を実装しようと考えました。

Grid2に、Grid1と同様のデータが表示されることを期待しているのですが、
今のところ、Grid2は空白のままです…。

ヘルプを見ると、下記のように書いてありました。

「クライアントデータセットがプロバイダを使わないときは,別のクライアントデータセットからデータを次のようにコピーできます。

ClientDataSet1.Data := ClientDataSet2.Data;」

以下は、書いたコードの一部です。

恐れ入りますが、問題箇所を指摘していただけないでしょうか。
宜しくお願いします。

// ボタン押下で、別フォームを起動
// Form2.Associatedでデータセットを複製したい。
procedure TForm1.S1Click(Sender: TObject);
var
  frmSetup: TForm2;
begin
  if(NumLines = 0) then
    ShowMessage('CSVファイルを読み込んでください。')
  else
  begin
    frmSetup := TForm2.Create(Self);
    Form2.Associated;
    frmSetup.ShowModal;
    frmSetup.Release;
  end;
end;

// データセット複製のための関数
procedure TForm2.Associated;
begin
  try
    ClientDataSet2.Open;
    ClientDataSet2.Data := Form1.ClientDataSet1.Data;
    ClientDataSet2.Close;
  except
    ClientDataSet2.Free;
  end;
end;


alt  2008-10-22 19:15:00  No: 32290

procedure TForm1.S1Click(Sender: TObject);の中の
Form2.Associated;をfrmSetup.Associated;に修正しました。
まだ改善されませんでした…。


めじな  2008-10-24 04:00:41  No: 32291

何の検証も行っていませんが「Close」したらダメですよね・・・


alt  2008-10-24 20:26:35  No: 32292

自己解決しました。

// ボタン押下で、別フォームを起動
// Form2.Associatedでデータセットを複製したい。
procedure TForm1.S1Click(Sender: TObject);
begin
  if(NumLines = 0) then
    ShowMessage('CSVファイルを読み込んでください。')
  else
  begin
    Form2.Associated;
    Form2.ShowModal;
  end;
end;

// データセット複製のための関数
procedure TForm2.Associated;
begin
  try
    ClientDataSet2.Open;
    ClientDataSet2.Data := Form1.ClientDataSet1.Data;
  except
    ClientDataSet2.Free;
  end;
end;


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

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






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