Delphi - 多个 ADOQuery

Delphi - Multiple ADOQuery

我想请您帮助我的 Delphi 项目 (RAD Studio),我是 Delphi 的新手。

我正在使用: TADOConnection(带连接字符串) 2x ADOQUERY(设置“连接= TADOConnection)

我需要 3 个带有来自第一个 ADOQuery 的 DataSource 的独立 DBGrid,但我找不到过滤条目的方法 数据到网格(我不想使用 3 个“WHERE”不同的查询)有什么办法吗? (我试图在 DataSource 属性 中找到一些东西,但它没有“过滤器”属性,也无法在 RAD Studio 中过滤“LiveBinding”。

感谢您的帮助,我很期待如何去做

祝你有完美的一天 日本

Ken White 说的很对。然而,使用 ADO 组件为多个网格提供不同过滤版本的 AdoQuery 数据所需的代码实际上非常简单:您只需添加与过滤网格一样多的 TAdoDataSet,此代码

procedure TForm2.Button1Click(Sender: TObject);
begin
  AdoDataSet1.Clone(AdoQuery1);
  AdoDataSet1.Filter := 'Name like ''B%''';
  AdoDataSet1.Filtered := True;

  AdoDataSet2.Clone(AdoQuery1);
  AdoDataSet2.Filter := 'Name like ''C%''';
  AdoDataSet2.Filtered := True;

  //    Etc
end;

使用 TAdoConnection 和 TAdoQuery 的默认设置,对过滤网格中的记录所做的更改会自动传播回 AdoQuery,然后传播回服务器 table。

在 Delphi 西雅图或以后,您可以使用 FireDAC 代替 ADO 并使用这样的代码,它有点复杂但不会太多:

procedure TForm2.FormCreate(Sender: TObject);
begin
  FDConnection1.UpdateOptions.AutoCommitUpdates := True;
  FDQuery1.CachedUpdates := True;
  FDQuery1.Open;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FDQuery1.ApplyUpdates(-1);
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  FDMemTable1.CloneCursor(FDQuery1);
  FDMemTable1.Filter := 'Name like ''B%''';
  FDMemTable1.Filtered := True;

  FDMemTable2.CloneCursor(FDQuery1);
  FDMemTable2.Filter := 'Name like ''C%''';
  FDMemTable2.Filtered := True;
  //    Etc
end;

请注意,这应该可以正常工作提供 FDQuery 的 CachedUpdates 设置为 True, 以及FDConnection的UpdateOptions.AutoCommitUpdates,这样这些设置就完成了 在上面的 FormCreate 中。 ApplyUpdates 是必要的,以避免任何 changes 被 程序结束时丢弃。

顺便说一句,你说

but it does not have "Filter" property, also its not possible to filter "LiveBinding" in RAD Studio).

我不确定你为什么这么说。因为 Filter 是数据集的 属性 ,无论是 一个 FDQuery 或一个 FDMemTable,你应该能够使用过滤 原则上 没有问题。但是,鉴于 Live Bindings 有点喜怒无常,我会在更改任何过滤后关闭并重新打开数据集。