林
林旭斌
Unregistered / Unconfirmed
GUEST, unregistred user!
一个非常奇怪的问题,找了一些书也没找到答案,请各位帮忙看看:
环境:delphi 4+Access97
DAtamoduel中添加了一个Tquery控件:Query_Cpmx
为防止用户任意修改,将RequestLive设为False
用户界面中有两个按钮:Add 添加记录
Del 删除记录
代码如下:
procedure TFormCpmc.AddClick(Sender: TObject);
begin
datamodule1.Query_Cpmx.Close;
datamodule1.Query_Cpmx.RequestLive:=true;
datamodule1.Query_Cpmx.Open;
datamodule1.Query_Cpmx.Edit;
datamodule1.Query_Cpmx.Append;
end;
procedure TFormCpmc.DELClick(Sender: TObject);
var
BookMk:Tbookmark;
begin
if Datamodule1.Query_Cpmx.FieldbyName('P_bz').AsString<>'1' then
begin
BookMk:=Datamodule1.Query_Cpmx.GetBookmark;
datamodule1.Query_Cpmx.Close;
datamodule1.Query_Cpmx.RequestLive:=true;
datamodule1.Query_Cpmx.Open;
Datamodule1.Query_Cpmx.GotoBookmark(BookMk);
Datamodule1.Query_Cpmx.delete;
datamodule1.Query_Cpmx.Close;
datamodule1.Query_Cpmx.RequestLive:=false;
datamodule1.Query_Cpmx.Open;
end
else
Messagedlg('该 名 称 已 被 使 用 ,'+#13+#13+'不 将 其 能 删 除!',mtWarning,[mbOk],0);
end;
Query_Cpmx的Afterpost
procedure TDataModule1.Query_CpmxAfterPost(DataSet: TDataSet);
begin
datamodule1.Query_Cpmx.Close;
datamodule1.Query_Cpmx.RequestLive:=false;
datamodule1.Query_Cpmx.Open;
datamodule1.Query_Cpmx.First;
end;
问题是这样的:
当记录数不多时删除无问题,当记录数达到数百(不超过300具体临界值没能找到)时,第一
次删除最后一条记录时无问题,再次删除最后一条记录时,系统提示:'General SQL error,
无效的书签,Table'.此时在DBGrid中的数据可以任意修改,再按删除时无问题;如果从第一条
记录逐条删除不会有问题;
当添加记录后,再删除最后一条记录时也会出现上述问题.
请问,问题出在哪里,别告诉我用别的方法,现在我已经通过其他方法解决该功能的实现,只是想
知道为什么会有这个现象,谢谢!
环境:delphi 4+Access97
DAtamoduel中添加了一个Tquery控件:Query_Cpmx
为防止用户任意修改,将RequestLive设为False
用户界面中有两个按钮:Add 添加记录
Del 删除记录
代码如下:
procedure TFormCpmc.AddClick(Sender: TObject);
begin
datamodule1.Query_Cpmx.Close;
datamodule1.Query_Cpmx.RequestLive:=true;
datamodule1.Query_Cpmx.Open;
datamodule1.Query_Cpmx.Edit;
datamodule1.Query_Cpmx.Append;
end;
procedure TFormCpmc.DELClick(Sender: TObject);
var
BookMk:Tbookmark;
begin
if Datamodule1.Query_Cpmx.FieldbyName('P_bz').AsString<>'1' then
begin
BookMk:=Datamodule1.Query_Cpmx.GetBookmark;
datamodule1.Query_Cpmx.Close;
datamodule1.Query_Cpmx.RequestLive:=true;
datamodule1.Query_Cpmx.Open;
Datamodule1.Query_Cpmx.GotoBookmark(BookMk);
Datamodule1.Query_Cpmx.delete;
datamodule1.Query_Cpmx.Close;
datamodule1.Query_Cpmx.RequestLive:=false;
datamodule1.Query_Cpmx.Open;
end
else
Messagedlg('该 名 称 已 被 使 用 ,'+#13+#13+'不 将 其 能 删 除!',mtWarning,[mbOk],0);
end;
Query_Cpmx的Afterpost
procedure TDataModule1.Query_CpmxAfterPost(DataSet: TDataSet);
begin
datamodule1.Query_Cpmx.Close;
datamodule1.Query_Cpmx.RequestLive:=false;
datamodule1.Query_Cpmx.Open;
datamodule1.Query_Cpmx.First;
end;
问题是这样的:
当记录数不多时删除无问题,当记录数达到数百(不超过300具体临界值没能找到)时,第一
次删除最后一条记录时无问题,再次删除最后一条记录时,系统提示:'General SQL error,
无效的书签,Table'.此时在DBGrid中的数据可以任意修改,再按删除时无问题;如果从第一条
记录逐条删除不会有问题;
当添加记录后,再删除最后一条记录时也会出现上述问题.
请问,问题出在哪里,别告诉我用别的方法,现在我已经通过其他方法解决该功能的实现,只是想
知道为什么会有这个现象,谢谢!