有人可以告诉我为什么这只能在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;
答案 0 :(得分:3)
问题很可能是您的索引处于活动状态,使用Account
或Folder
作为索引字段之一。这些是您正在更改其值的字段,如果它们中的任何一个位于当前索引表达式中,它会将记录指针移动到该行的新位置(实际上可能是EOF
)。 / p>