dw_1.update() 出错 数据被其它用户修改:在您修改的过程中,其它用户修改并更新了原数据
如何解决?
------解决方案--------------------
修改数据窗口的类型:dw_1.Modify("DataWindow.Table.UpdateWhere='0' ")
------解决方案--------------------
并发操作了!update属性设置了原数据了!
可重检索修改!
------解决方案--------------------
如果是多用户,还是建议直接用SQL语句去更新。
------解决方案--------------------
这就是数据并发错误了,这就要看你决定如何去决定数据了。
PB提供了三种模式(在dw的rows-update properties:
1、key columns
根据主键更新数据,这是如果另外一个用户修改了数据,只要没有修改主键数据,本地数据就可以更新成功。并覆盖另外一个用户的修改。
2、key and updateable columns
根据主键及允许更新字段更新数据,这是只要主键和允许更新字段没有被修改数据就可以更新成功。
3、key and modified columns
根据主键及修改过的字段进行更新数据。只是如果你修改了A字段,但是另外一个用户修改了B字段,那么就可以跟新成功。
------解决方案--------------------
理解一下数据窗口的内部处理机制就清楚了,
楼上对并发控制做了说明,这里再加一个例子,
比如你采用的是pb默认的机制,key and updateable columns,
如果一个表中有个自增列n_id,定义为numeric(3,0) primary key identity(1,1)
如果你insertrow(0)保存后,数据库里面的n_id=1,其余的值就是对应的值
而当前你的数据窗口里面,primary缓冲区里面还是null,如果这时候你再改变数据窗口里面的值,它构成的语句就是
update xx set .. where n_id is null and ...
就是类似这样的处理,因为没有n_id为null的,所以系统理解为你当前检索的数据已经被其他人修改,所以定位不到了
------解决方案--------------------
如果上面的办法还解决不了,查一下是不是有其他触发器影响了
------解决方案--------------------
只有主键被更新了才会报错,是否有自增长的列
------解决方案--------------------
同一条记录同时只能一个人出去修改状态,其他人不让进入该记录的修改功能。我是这么处理的,
在数据库中加一个标记字段,当记录第一次调入修改后,标记为1,保存后标记为0,
其他人在调入修改的时候,先判断一下,IF 标记=1 then 不可修改 else 可修改。
如果进入修改后,不点击保存,直接退出,则在 退出 中加入将记录标记修改为 0,
这样,记录进入修改状态后,不管你保不保存,都不影响下一次的修改。
------解决方案--------------------
有个错字,晕不能修改。
同一条记录同时只能一个人 处于 修改状态,其他人不让进入该记录的修改功能。
------解决方案--------------------
其實有兩種情況了 ,一種是你對 一條記錄做更新,別人也做更新了 ,你的就不能保存,這個把只要把updateable columns只選中主鍵就可以了,還有一種就是那種類似單號的新增,假如你有你新增了一條記錄,生成了一個單號沒有保存,但是別人也在做同樣的操作,並且先保存了,由於單號都是一樣的你的就不能再保存了 ,這種情況就要新建一個表來記錄新增的單號,一般是流水中最大的。在產生單號的時候去看這個表,當然也可以用嵌入式sql直接新增。