在查询/"TDataset"的"打开"之后是否应该首先调用`First`?

Alo*_*mer 2 delphi dataset

我习惯First()在迭代查询结果时总是调用:

Qry.Open;
Qry.First;
while not Qry.Eof do
begin
    //do something
    Qry.Next;
end;
Run Code Online (Sandbox Code Playgroud)

有没有理由,这First()不是自动调用的Open()

或者问另一种方式:我们使用某种DB访问抽象类.将呼叫First()纳入我们的Open()日常工作是否是一个好主意?

Uwe*_*abe 6

您正在展示为什么First肯定需要的完美示例:由于您在迭代后未关闭数据集,因此对此代码序列的新调用将不会真正打开数据集.它仍然是开放的,并且Open默默无闻地呼唤.因此First需要a来使迭代工作.

严格来说,它归结为Hilario所说的:First在迭代之前是必需的.

  • 实际上我只发布了代码的相关部分;-)但是到目前为止我读到的所有内容似乎都暗示,建议调用"First"(因为你给出的原因),但**不是**技术上要求的,如果问题的代码运行一次(或者在再次运行之前调用`Close`). (2认同)