我想请您帮助我的 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/