gpt4 book ai didi

Delphi - 多个 ADOQuery

转载 作者:行者123 更新时间:2023-12-04 15:22:06 35 4
gpt4 key购买 nike

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

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com