about "adotable.delete"的问题 (30分)

  • 主题发起人 主题发起人 locka
  • 开始时间 开始时间
L

locka

Unregistered / Unconfirmed
GUEST, unregistred user!
1:////table4 have 7 records
table4.open
table4.First;
while not Table4.Eof do
begin
Table4.Delete;
Table4.Next;
end;
ShowMessage(inttostr(table4.RecordCount));/////// it's '7'
×××××××××××××××××××××××××××××
2: table4.open;
for i:=0 to Table4.RecordCount-1 do
begin
Table4.Delete;
end;
ShowMessage(inttostr(table4.RecordCount));///it's '0'

为什么会出现;这种情况,方法1为什么不能清空adotable,另外有什么好的方法可以清空adotable
 
我觉得方法一更可取。
如果是这种结果那就有些奇怪!
 
用query好了,一句话
delete from xxx
 

table4.open
table4.First;
while not Table4.Eof do
begin
Table4.Delete;
Table4.Next;
end;
ShowMessage(inttostr(table4.RecordCount));/////// it's '7'
×××××××××××××××××××××××××××××
2: table4.open;
for i:=0 to Table4.RecordCount-1 do
begin
Table4.Delete;
// Table4.Next; // 这句话是脱裤子放屁不 ,应是 画蛇添足
end;
ShowMessage(inttostr(table4.RecordCount));///it's '0'

为什么会出现;这种情况,方法1为什么不能清空adotable,另外有什么好的方法可以清空adotable
 
用SQL语句清空数据

delete from tablename
 
是不是 eof 呢?
 
你上面的代码有问题,
1:////table4 have 7 records
table4.open
table4.First;
while not Table4.Eof do
begin
Table4.Delete;
?? Table4.Next; //请注意指针指向第几条记录了好像不用Next就可以了
end;
ShowMessage(inttostr(table4.RecordCount));/////// it's '7'

你可以变通的解决一下吗?
如:
with ADOQuery do
begin
Close();
SQL.clear();
SQL.add('delete From T_Table4');
execSQL();
end;
 
delete后,当前记录自动指向下一条,这时候再next,嘿嘿,这条可就漏了.
 
其实我碰倒过,现在谈一谈,语句应该为
table4.open
table4.First;
while not Table4.Eof do
begin
Table4.Delete;
// Table4.Next;(去掉这局就行)
end;
TABLE在执行删除操作后,BOOKMARK所在位置自动指向下一条,因为原先所在位置被删除,
如果按你所做,那只能隔行删除,所以有这结果
 
呵呵,很简单的一个小问题
 
谢谢大家,pengjinlongex解除了我的疑惑
 
后退
顶部