我正在努力在其他人编写的Delphi 4时代程序的代码库中进行现代化和修复错误.很多代码在现代标准下都有点可怕,我不禁想知道我看到的一些东西是否存在,因为原作者不知道某些标准库的功能,或者它们是不是可用.
我在应用程序中看到的一个更令人讨厌的"模式"看起来像这样:
table := TClientDataset.Create;
with table do
begin
CloneCursor(dmDatabase.OriginalTable, false, true);
filtered := true;
active := true;
first;
while not EOF do
begin
if fieldByName('whatever').AsString = 'some criteria' then break;
next;
end;
if EOF then exit;
//do something based on the current row of the dataset
table.free;
end;
Run Code Online (Sandbox Code Playgroud)
几乎所有这些组都可以被原始数据集中的一个Lookup或一个单行调用替换Locate,而根本不需要中间CDS.这让我想知道,这些方法是否在D4时代可用?什么时候Lookup和Locate第一次添加?
在Delphi 2中引入了Lookup和Locate.看起来原作者根本没有利用它们.
似乎原始程序员想要确保行指针根本没有改变.执行Locate(或Lookup)将更改行指针,激发各种数据事件(Datasource.OnDataChange,Dataset.AfterScroll等).
进行搜索时TClientDataset.CloneCursor,没有触发这些事件dmDatabase.OriginalTable ,也无需从数据库重新加载数据.
在我看来这是意图.TClientDataset在D3上展示.而克隆光标是一种先进的功能-并且需要dmDatabase.OriginalTable是一个CDS也.