关于删除纪录的问题?(50分)

  • 主题发起人 主题发起人 han_wei
  • 开始时间 开始时间
H

han_wei

Unregistered / Unconfirmed
GUEST, unregistred user!
我用table和datasource部件做一个数据删除程序,数据库为怕paradox表,索引字段为No,代码如下:

procedure tform1.delete_recorder(table: Ttable);
var
i:integer;
begin
table.disablecontrols;
try
if messagedlg('该纪录被删除后将无法恢复!是否继续?',mtconfirmation,[mbyes,mbno],0)=mryes then
begin
table.Delete;
while not table.Eof do
begin
table.edit;
i:=table.fieldbyname('No').value;
table.FieldByName('No').asinteger:=i-1;
table.Next;
end;
end;
finally
table.enablecontrols;
end;
end;
编译后,当删除最后一条纪录时,提示错误如下:
key violant!
再次运行时,提示如下错误信息:
recorder locked by another user
table:........................
user:.........................
请问各位高手,这个问题什么原因造成的?
 
在Table.Delete;后加上Table.Next
 
当删除最后一条纪录后,数据库指针值的是数据库末尾!!
所以你的while not table.eof ......就有问题!!
该为:
table.disablecontrols;
try
if messagedlg('该纪录被删除后将无法恢复!是否继续?',mtconfirmation,[mbyes,mbno],0)=mryes then
begin

if not table.Eof then
begin
table.Delete;
table.edit;
i:=table.fieldbyname('No').value;
table.FieldByName('No').asinteger:=i-1;
table.Next;
end
else table.Next;
end;
finally
table.enablecontrols;
 
其实比较好的方法是(我个人认为):
建两个表,第二个表只放NO.,这样无论删增都好办!
 
在加一个not bof的判断。
由于你的表没有关闭,即没有执行close,
所以下次打开会提示recorder locked by another user
 
可能是你的数据库被另一个应用程序在使用
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
551
import
I
后退
顶部