Delphi - 多个 ADOQuery

标签 delphi

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

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

我需要 3 个单独的 DBGrids 和来自第一个 ADOQuery 的数据源,但我找不到过滤条目的方法 数据到网格(我不想使用 3 个“WHERE”不同的查询)有什么办法吗? (我试图在 DataSource 属性中找到一些东西,但它没有“Filter”属性,也无法在 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,然后传播回服务器表。

在 Delphi Seattle 或更高版本中,您可以使用 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 有点不稳定,我会在更改任何过滤后关闭并重新打开数据集。

关于Delphi - 多个 ADOQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63074372/

相关文章:

delphi - 使用 msbuild 构建时从 dproj 中排除搜索路径

unit-testing - 我可以将一组传递给 DUnitX 中的测试用例吗?

delphi - Delphi 2007 中的 Crystal 报表

delphi - DataSnap 使用 AutoInc 键并仅在插入后刷新当前记录

delphi - Rave Reports Delphi 7 中的横向打印

delphi - IIS 和 Delphi - 获取 ISAPI 中的应用程序文件夹

delphi - 判断一个点是否在多边形内?

sql - SQL追加的Delphi 7中的表达式类型不匹配

delphi - 使用 Delphi 6 的 Format() 语句以十六进制格式打印 HRESULT 的格式说明符是否正确?

delphi - 如何在 VB6/Delphi 程序中嵌入可执行文件