while not TBLOrder.Eof do
begin
TBLOrder.Locate('OrderID', Total, []);
TBLOrder.Delete;
end;
这只会删除我的Access数据库中的每一行,这真的很烦人。
我正在尝试让程序删除所选行(即Total)。
据我所知,它应该找到所选行,它等于Total。例如如果Total = 3,它应该找到OrderID = 3的行,然后删除该行。
感谢任何帮助。
答案 0 :(得分:3)
尝试这样做(Max'例程要求你循环遍历整个数据集,除非它有很多行,否则很好):
while (TblOrder.Locate('OrderID', Total, [])) do
TblOrder.Delete;
TDataSet.Locate返回一个布尔值;如果它为真,则找到的记录成为活动记录,然后您可以将其删除。如果它返回False(意味着未找到记录),则永远不会调用Delete。
顺便说一下,原始代码的问题在于您测试Eof
,但从不检查Locate
是否找到记录;你只需删除你所记录的任何记录,然后再次测试Eof
。如果您不在Eof
,则拨打Locate
,忽略它是否找到了记录,并删除了您所依赖的任何行。然后一遍又一遍地重复,直到没有更多记录为止,此时Eof
返回true并打破循环。
答案 1 :(得分:2)
如果只有一行包含ORDERID等于3,则不需要WHILE循环。
如果您期望ORDERID等于3的多行,请执行以下操作:
TBLOrder.first; // you could also do the locate here if it's a big table
while not TBLOrder.Eof do
begin
if TBLOrder.FieldByName('OrderID').AsInteger = 3 then
TBLOrder.delete
else
TBLOrder.next;
end;
否则,您也可以使用SQL。