Table.Edit强制光标到EOF

时间:2013-03-24 22:48:03

标签: delphi

有人可以告诉我为什么这只能在aTbl.Edit之后运行一次。 如果我删除了用于编辑表的四行,它将遍历所有49条记录。似乎Edit和Post会将文件光标定位在文件的末尾,因为我只更改了一条记录并退出了EOF。

我正在使用D5,Zeos-6和SQLite3。我甚至尝试在编辑之前抓取Auto-inc,然后在它之后找到一个Locate,但它在编辑后仍然会退出。

感谢您提出的任何建议,但这一直困扰着我。我一直认为这是我做过的蠢事,但我找不到它。 :)

aTbl.First;                            // Test DB has 49 records
while not aTbl.EOF do
begin
  for i := 0 to lbCt.Items.Count-1 do  // Currently only two items in the list
  begin                                // and only the second makes a match
    aMatch := False;                   // which then forces the edit
    CtStr := lbCt.Items[i]);
    case InOut.ItemIndex of
      0: aMatch := aTbl.FieldByName(fld_A).AsString = CtStr;
      1: aMatch := aTbl.FieldByName(fld_B).AsString = CtStr;
      2: aMatch := (aTbl.FieldByName(fld_A).AsString = CtStr) or
                   (aTbl.FieldByName(fld_B).AsString = CtStr);
      3: aMatch := (aTbl.FieldByName(fld_A).AsString = CtStr) and
                   (aTbl.FieldByName(fld_B).AsString = CtStr);
    end;
    if aMatch then
    begin
      aTbl.Edit; 
      aTbl.FieldByName('Account').AsString := lbCt.Items[i];
      aTbl.FieldByName('Folder').AsString := lbCt.Items[i];
      aTbl.Post;
    end;
  end;
  aTbl.Next;
end;

1 个答案:

答案 0 :(得分:3)

问题很可能是您的索引处于活动状态,使用AccountFolder作为索引字段之一。这些是您正在更改其值的字段,如果它们中的任何一个位于当前索引表达式中,它会将记录指针移动到该行的新位置(实际上可能是EOF)。 / p>