请教高手:数据库更新问题

delphinus 2004-08-24 03:23:14
我用TADOQuery控件连接数据库。并在TDBGrid控件中显示。I have inserted a new record, saved it to the database and then try to edit it. .saving it but happend "Row cannot be located for updating. Some values may have been changed since it was last read.".
谢谢。如果能告诉我为什么 我将感激不尽。
...全文
104 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
delphinus 2004-08-27
Jeff20040819(最爱Delphi,C#——苦练内功中) : 用sql怎么写,能举个例子吗?谢谢!
  • 打赏
  • 举报
回复
Jeff20040819 2004-08-25
我以前也遇到过这个问题,很久都没有解决,我最后用的是SQL去写,才解决它

你也可以用SQL试试,应该能解决问题
  • 打赏
  • 举报
回复
大聪 2004-08-24
ado就有这个问题,
我一直没搞定,关注
  • 打赏
  • 举报
回复
xyz800316 2004-08-24
这个问题搜一下有很多的。搂主是不怎么懂中文吗?不过已经说得很清楚了。
是你的数据集关联了多个表或者你的表的键值设定有问题。
  • 打赏
  • 举报
回复
Jeff20040819 2004-08-24
TO YANGYUGW(小杨)

什么是主键更新方式???
  • 打赏
  • 举报
回复
delphinus 2004-08-24
To:ltmb118() 是几个关联的表,但是只是针对一个表的操作。其他的表只是为了显示。比如我操作的是员工表,员工表里有一个单位ID ,而单位名是从 单位表里取的。而且我更新时用的是 adoquery.insert ; editquery.fieldbyname('name'):='xiaowu';.....;adoquery.post . 然后我删除刚刚添加的这条记录用 adoquery.delete 就出错了。
  • 打赏
  • 举报
回复
ltmb118 2004-08-24
与主键有关,TAdoquery 是否为几个表关联形成的SQL语句 ?
  • 打赏
  • 举报
回复
yangyugw 2004-08-24

在阅读李维的书后我自己写了个通用函数以用来解决类似问题
procedure Tmdata.condtable(adoc_tmp:TADOConnection;adoq_tmp: TADOQuery;sort:byte);
var pty:property_;
pties:properties;
icount:integer;
begin

if sort=1 then
begin
adoq_tmp.active:=false;
end;
adoq_tmp.Connection:=adoc_tmp;
adoq_tmp.Active:=true;
pties:=adoq_tmp.Recordset.Properties;
for icount:=0 to pties.Count-1 do
begin
pty:=pties.item[icount];
if pty.name ='Update Criteria' then
pty.Value:=0;
end;

end;
  • 打赏
  • 举报
回复
yangyugw 2004-08-24
这个问题是更新的时候不能定位到你要更新的那条记录。
一些值在你最后一次读取的时候已经被更改了

产生这个错误的原因是 ,你在更新数据库的时候
是以所有值来定位更新的,你最好选择主键更新方式,否则再你更新以前,你的数据的任何字段被其他客户更改后,你都无法更新数据。
  • 打赏
  • 举报
回复
rockswj 2004-08-24
怎么是英语呀。不是很懂。
设置主键了吗。或者有默认值?
  • 打赏
  • 举报
回复
相关推荐
发帖
数据库相关

2474

社区成员

Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
帖子事件
创建了帖子
2004-08-24 03:23
社区公告
暂无公告