Delphi ADO查询

Pie*_*Wyk 8 delphi ado dataset

有没有更快的方法来迭代ADO数据集而不是

while (not ADOQuery1.Eof) do
    begin
      /* Do something */
      ADOQuery1.Next;
    end;
Run Code Online (Sandbox Code Playgroud)

我需要扫描大约9000个项目的数据集,并且只提取与预定义的分支编号集匹配的记录.

Ger*_*lí- 10

如果没有花时间更新DataSet上关联的可见控件,请确保使用DisableControls/EnableControls.

try
  ADOQuery1.DisableControls;
  while (not ADOQuery1.Eof) do
    begin
      /* Do something */
      ADOQuery1.Next;
    end;
finally
  ADOQuery1.EnableControls;
end;
Run Code Online (Sandbox Code Playgroud)

问候.


RRU*_*RUZ 8

@Pieter,两个选项

1)您可以在执行之前修改您的sql语句,添加与预定义的分支号码集匹配的where条件.

2)使用TAdoQuery 的Filter属性.

AdoQuery1.close;
AdoQuery1.filter := 'your condition goes here';
AdoQuery1.filtered := true;
AdoQuery1.Open;
Run Code Online (Sandbox Code Playgroud)

  • 他是对的.实现此目的的最快方法是在SQL中使用WHERE子句,以便它只返回您需要的记录.SQL专门针对这样做进行了优化,它可能比你在客户端做的任何事都做得更好. (4认同)

Lin*_*nas 7

将ADORecordset用于此类任务要快得多:

 while not ADOQuery1.Recordset.EOF do
  begin
    ADOQuery1.Recordset.MoveNext;
    // get value
    SomeVar := ADOQuery1.Recordset.Fields['FieldName'].Value;  
  end;
Run Code Online (Sandbox Code Playgroud)

  • 这也取决于Neftali所指出的DisableControls.如果没有调用,ADO数据集会非常慢.只有拥有数据绑定控件时才需要它. (4认同)