Delphi-multipleadoquery
我想请你帮助我的Delphi项目(RAD Studio),我是Delphi的新手 即时通讯使用: TADOConnection(带连接字符串) 2x ADOQUERY(设置“连接=TADOConnection”) 我需要3个单独的DBGrids和第一个ADOQuery中的DataSource,我找不到过滤条目的方法 数据到网格(我不想使用3“WHERE”不同的查询)有什么方法可以做到吗?(我试图在DataSource属性中找到一些东西,但它没有“Filter”属性,也不可能在RAD Studio中过滤“LiveBinding”) 谢谢你的帮助,我期待着怎么做 祝你有一个完美的一天Delphi-multipleadoquery,delphi,Delphi,我想请你帮助我的Delphi项目(RAD Studio),我是Delphi的新手 即时通讯使用: TADOConnection(带连接字符串) 2x ADOQUERY(设置“连接=TADOConnection”) 我需要3个单独的DBGrids和第一个ADOQuery中的DataSource,我找不到过滤条目的方法 数据到网格(我不想使用3“WHERE”不同的查询)有什么方法可以做到吗?(我试图在DataSource属性中找到一些东西,但它没有“Filter”属性,也不可能在RAD Studio
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;
使用TADOConnect和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,因此这些设置都已完成
在上面的表单中创建。ApplyUpdate是必要的,以避免出现任何倒角
程序结束时丢弃
顺便说一句,你说
但它没有“Filter”属性,也不可能在RAD Studio中过滤“LiveBinding”
我不知道你为什么这么说。因为过滤器是数据集的一个属性,它是否
对于FDQuery或FDMemTable,原则上您应该能够使用筛选,不会有任何问题。但是,考虑到实时绑定有点变化无常,我会在更改任何筛选后关闭并重新打开数据集。筛选只能在表级别进行,而不能在数据源级别进行。如果您需要三种不同的数据视图,您可以“我们将需要使用3个独立的查询。恐怕没有办法解决这个问题。:/也许使用memtable然后将其用作数据源?您必须打开3个查询,这有点奇怪:(无论它们来自实际的表、内存还是查询,您仍然需要三个表。除了数据集本身,您不能在任何级别进行筛选。请参阅更新:我已经在Ado和FireDAC中添加了如何进行筛选。很好!但最后还是有三个数据集。