我做的是网络程序
当对同一条记录被别的机器修改后,
再在我机器中进行UPDATEBATCH时出现了
<无法为更新行集定位,一些值可能已在最后读取后更改>
这种应该怎样处理
大家帮一下忙
急,急!
当对同一条记录被别的机器修改后,
再在我机器中进行UPDATEBATCH时出现了
<无法为更新行集定位,一些值可能已在最后读取后更改>
这种应该怎样处理
大家帮一下忙
急,急!
解决方案 »
- 从外界控制Panel透明(不通过继承)
- 请问是否可以把chrome嵌入到自己的应用程序中?
- 用DeDe反编译工具反编译DELPHI的OCX控件可以得到PAS单元文件吗?
- CSDN活过来了,散200分,马上结帖,接分要快(前五名),继续....
- 运行线程时出现Thread Error:句柄无效 错误,请教
- 问:大家在写数据库程序时: 是用那些控件来显示数据集的!???我常用TDBGrid控件,但发现(如果dataset 是来自两个表时 ), 操作delete 会将两
- Drawcell()在什么情况下被调用处理?
- 在Delphi中怎么用代码实现数据库的备份和恢复功能!
- 请问如何在ListView中显示当前系统的驱动器盘符,是要分行显示的.
- 求助:DBGrid 不能即时更新
- 怎样用Delphi写OPC客户端??急在线等
- 检查ODBC数据源问题?
AdoConnection.begintrans;
try
AdoQuery1.sql.clear
AdoQuery1.sql.add('insert into...');
AdoQuery1.ExecSQL;
AdoConnection.committrans;
except
AdoConnection.rollbacktrans;
end;
'无法为更新行集定位一些值可能已在最后读取后改变'
这个问题应该是被讨论很多次了,其实它不关构件事,不关数据库的事,只是你的程序有
问题而已,不管是BDE还是ADO,在数据更新时,它都会转换成SQL语句与后台的数据库打
交道,例如一个更新操作,当你在客户端修改了一些数据,而后Post的时候,BDE或者ADO
这些数据引擎会生成类似的语句:'Update tablename set field1=*** where ....',问题
的关键在于where子句,在BDE中是根据ttable的Updatemode属性控制怎样生成where子句的
而在Ado中是利用TField的ProvideFlag属性来控制,如果你的客户端程序没有注意到这些
问题的话,就很可能导致上面的错误。例如你在数据库定义时设置了字段A的默认值,而你
在客户端新增一条纪录时没有对字段A赋值,这样你在客户端缓冲中的数据就与数据库中的
不同了,当你下次再对该条纪录更新时,问题就来了,where子句中A的值就会根据客户端
赋为空,这样就会导致根据where子句定位不到数据库中的纪录,而Delphi就会认为这可能
是由于你在从数据库取下数据到你发出Post命令之间可能有另外的人更改了该条纪录