三层结构数据更新问题,出现"Record not found or changed by anoher user"的问题(50分)

  • 主题发起人 主题发起人 devecom
  • 开始时间 开始时间
D

devecom

Unregistered / Unconfirmed
GUEST, unregistred user!
请问这样的问题应该怎么办啊?
我查了DFW的离线浏览器,上面出现过类似的问题,但好像也没有很好的解决办法.
请问那些曾经碰到过这样的问题的富翁们是怎么解决的啊?
并且我看到他们提出的问题都是"changed by another user",而我确是 “record not found
or changed by another user”.很奇怪,但我可以保证这条记录一定存在。
很急阿!大家帮我看看吧
 
会不会是主键被其它用户修改了而你这边还不知道,如果你作了日志文件就清楚了
 
不可能的,我用的是Access库,只有这一个程序在用!

我在 DataProvider的 BeforeUpdateRecord事件中查看Delta的值发现了好奇怪的现象:
Delta.Fields[0].OldValue 没错,是原来的值
但是
Delta.Fields[0].NewValue 却为空
并且Delta.Fields[0].curValue也为空!
这是什么原因?
 

应该是你选择 一些记录,在进行修改的过程中,改变了关键字值,
可能是你直接在数据库进行了修改。所以记录就找不到而不能提交。
建议你开启一下事务。应用事务处理。
另外,运行程序时,不要操作对应的Access数据表。这包括表的打开,修改删除等。
 
开启事务?
我在程序运行的过程中没有打开表,,我确定
 
对此问题,我也碰到过。
其原因主要是:数据在提交时默认总是比较整条记录,这条记录一但被更改就会找不到原记录,
这样也就无法提交了。解决这个问题的最好方法是使用SQL语句提交,虽然比较麻烦但很实用。
 
是不是表字段宽度和超长?不要超过4500(好象可以比这个数大点)!
 
DataSetProvider缺省的更新模式是upWhereAll,也就是比较整条记录,这样字段超长
或被更改时容易找不到记录。
因此你可以试着将UpdateMode改为upWhereKeyOnly,并且DataSetProvider.Dataset必
须至少有一个字段的ProviderFlags是包含了pfInKey的。这样的话只会比较pfInKey
字段。
还有一个方法是在BeforeUpdate时(upWhereAll),将DataSetProvider.Dataset的一些
不需要参与比较的字段设置其ProviderFlags为[pfInUpdate](只更新,不参与比较)。
 
:我在 DataProvider的 BeforeUpdateRecord事件中查看Delta的值发现了好奇怪的现象:
:Delta.Fields[0].OldValue 没错,是原来的值
:但是
:Delta.Fields[0].NewValue 却为空
:并且Delta.Fields[0].curValue也为空!
:
:这是什么原因?
这很简单,是因为你的客户程序把OldValue改为空了。如果你真的没改,那我只能猜想
它是被MIDAS去掉了。
 
可能是某字段有默认值,而又可为空,所以当此字段为空时保存将会出现这种情况[8D]
 
這個問題我遇到過.
後台數據表某欄位有默認值. 提交動作執行前你的值一般為空, 在AP端同後台存檔時,
數據據(SQL)產生一個默認值. 問題就來了. AP就認為這個值已經被其它用戶改過.
建議可把默設值寫在前台 ONNEWRECORD 里.
 
to hreofy, lzm:
也许吧,不过默认值一般是对插入记录有效(插入记录是不用查找的),对更新记录
应该不用吧。
 
全部改成用sql语句了
没办法,忍受效率的低下
 

Similar threads

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