如何通过Delphi从Access中删除某些行?

时间:2012-03-22 17:07:54

标签: delphi ms-access delete-row

while not TBLOrder.Eof do
begin
  TBLOrder.Locate('OrderID', Total, []);
  TBLOrder.Delete;
end;

这只会删除我的Access数据库中的每一行,这真的很烦人。

我正在尝试让程序删除所选行(即Total)。

据我所知,它应该找到所选行,它等于Total。例如如果Total = 3,它应该找到OrderID = 3的行,然后删除该行。

感谢任何帮助。

2 个答案:

答案 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。