表数据的添加删除确定取消为什么老出错!!!(50分)

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

lowhands

Unregistered / Unconfirmed
GUEST, unregistred user!
极菜的问题!!!
我用access库+Tadotable+Tdatasourse
为什么会出现:the specifiled row could not be located for updating.some values may
heve been changed since it was last read! 的错误!!!
我的表里有一个子段id设为自动增量的啊~~~~~~~~~
救命啊:(


//增加
procedure TForm_yhgl.addClick(Sender: TObject);
begin
at1.Append ;
at1['username']:=' ';
at1['level']:='1';
at1.edit;
at1.post;
end;
//删除
procedure TForm_yhgl.delClick(Sender: TObject);
begin
if Application.MessageBox(
'真的想删除当前用户信息吗?',
'警告!',
MB_OKCANCEL + MB_DEFBUTTON1) = IDOK then
if not(at1.eof) then
begin
at1.delete;
end;
end;
//确定
procedure TForm_yhgl.okClick(Sender: TObject);
begin
if not(at1.eof) then begin
at1.edit;
at1.post;
end;
end;
//取消
procedure TForm_yhgl.canClick(Sender: TObject);
begin
at1.cancel;
end;
 
你他妈Add后edit,post干吗?
Post, Delete 已经写入了table, table state 为dsBrowse了.
 
不行啊~~~``去掉了edit和post也不行,添加是可以的,但是添加完后的删除就是老出错!!!
 
活活被你气死。 :)
procedure TForm_yhgl.addClick(Sender: TObject);
begin
at1.Append ;
at1['username']:=' ';
at1['level']:='1';
end;


procedure TForm_yhgl.delClick(Sender: TObject);
begin
if Application.MessageBox(
'真的想删除当前用户信息吗?',
'警告!',
MB_OKCANCEL + MB_DEFBUTTON1) = IDOK then
if at1.state =dsInsert then
begin
at1.Cancel;
end;
end
else if (at1.state = dsEdit) and (not at1.eof) then
begin
at1.Delete;
end;

end;

 
//增加
procedure TForm_yhgl.addClick(Sender: TObject);
begin
if at1.state in [dsedit,dsinsert] then at1.CheckBrowseMode;
at1.Append ;
at1['username']:=' ';
at1['level']:='1';
end;
//删除
procedure TForm_yhgl.delClick(Sender: TObject);
begin
if at1.isempty then exit;
if Application.MessageBox(
'真的想删除当前用户信息吗?',
'警告!',
MB_OKCANCEL + MB_DEFBUTTON1) = IDOK then
at1.delete;
end;
//确定
procedure TForm_yhgl.okClick(Sender: TObject);
begin
if at1.state in [dsedit,dsinsert] then at1.post;
end;
//取消
procedure TForm_yhgl.canClick(Sender: TObject);
begin
if at1.state in [dsedit,dsinsert] then at1.cancel;
end;
 
删除部分
if at1.isempty then exit;
应为:if at1.isempty and not (at1.state in [dsedit,dsinsert]) then exit;

 
参照上述还有些小问题!!!
会不会是adotable和dateset的属性设置有要求???????????
 
没有解决!!!
 
做点修改:

//增加
procedure TForm_yhgl.addClick(Sender: TObject);
begin
at1.insert ; //------------------
at1['username']:=' ';
at1['level']:='1';
at1.post;//---------------
end;
//删除
procedure TForm_yhgl.delClick(Sender: TObject);
begin
if Application.MessageBox(
'真的想删除当前用户信息吗?',
'警告!',
MB_OKCANCEL + MB_DEFBUTTON1) = IDOK then
if at1.RecordCount >0 then //-------------------
begin
at1.delete;
end;
end;
//确定??????????????????????????????????????
procedure TForm_yhgl.okClick(Sender: TObject);
begin
if not(at1.eof) then begin
at1.edit;
at1.post;
end;
end;
//取消
procedure TForm_yhgl.canClick(Sender: TObject);
begin
at1.cancel;
end;

建议你使用AdoQuery或AdoDataSet配合Sql做
似乎有点麻烦,但比较可靠,而且比较易读


 
把access数据库,增加索引(主键),可以解决这个问题,这个问题是由于ado的处理方式
引起的。
 
多人接受答案了。
 
后退
顶部