Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi-multipleadoquery_Delphi - Fatal编程技术网

Delphi-multipleadoquery

Delphi-multipleadoquery,delphi,Delphi,我想请你帮助我的Delphi项目(RAD Studio),我是Delphi的新手 即时通讯使用: TADOConnection(带连接字符串) 2x ADOQUERY(设置“连接=TADOConnection”) 我需要3个单独的DBGrids和第一个ADOQuery中的DataSource,我找不到过滤条目的方法 数据到网格(我不想使用3“WHERE”不同的查询)有什么方法可以做到吗?(我试图在DataSource属性中找到一些东西,但它没有“Filter”属性,也不可能在RAD Studio

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

即时通讯使用: TADOConnection(带连接字符串) 2x ADOQUERY(设置“连接=TADOConnection”)

我需要3个单独的DBGrids和第一个ADOQuery中的DataSource,我找不到过滤条目的方法 数据到网格(我不想使用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;
使用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中添加了如何进行筛选。很好!但最后还是有三个数据集。