我可以使用单个命令从一个speciefic字段获取所有记录吗?

时间:2018-04-06 17:37:49

标签: delphi tadoquery

我有一个数据库* .mdb。任务是从此数据库的某个字段获取所有值并将其写入文件。 现在代码看起来像这样

while not ADOQuery1.Eof do begin
   resultstringlist.add(ADOQuery1.FieldByName('_fieldname_').asString);
   ADOQuery1.next;
end;

它有效,但我认为有更优化和更快的选择。数据库大小约为40,000条记录,此过程需要相当长的时间。我需要使用的数据库包含数十倍的记录和数十个表。 我认为这是一个非常愚蠢的问题,但我自己几天都找不到解决方案。我的数据库是一个未开发的领域。不久,我希望。

1 个答案:

答案 0 :(得分:5)

不要在紧密循环中使用FieldByName,它会在每次调用时对数据集的Fields进行线性搜索。相反,在循环之前查找字段并将结果分配给TField局部变量,并使用该变量访问循环中的字段值。所以,使用像

这样的东西
var AField : TField;
...
AField := ADOQuery1.FieldByName('_fieldname_');

ADOQuery1.DisableControls;
try
  while not ADOQuery1.Eof do begin
    resultstringlist.add(AField.asString);
   ADOQuery1.next;
  end;
finally
  ADOQuery1.EnableControls;
end;

DisableControlsEnableControls的调用通过更新连接到AdoQuery的任何db-aware gui控件来避免循环速度变慢。

您可能还习惯在任何TStrings下降的对象上调用BeginUpdateEndUpdate,同时在紧密循环中更新它们。