社区
DataWindow
帖子详情
数据库部分记录保存的问题
iwangh
2008-12-15 04:40:29
比如一个表中有100条记录。我用datawindow检索出来。我更改了其中两条记录。同时在其它电脑上别人更改了另外两条记录。我想做到我们保存时只保存各自更改的记录。其它记录不比较,不保存。这样在此检索时就都能看到我们两个更改过的记录。请问这个如何做。请各位高手给个思路吧。谢谢。
...全文
109
5
打赏
收藏
数据库部分记录保存的问题
比如一个表中有100条记录。我用datawindow检索出来。我更改了其中两条记录。同时在其它电脑上别人更改了另外两条记录。我想做到我们保存时只保存各自更改的记录。其它记录不比较,不保存。这样在此检索时就都能看到我们两个更改过的记录。请问这个如何做。请各位高手给个思路吧。谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
www8523
2008-12-29
打赏
举报
回复
保存时判断一下是否有修改内容然后保存代码如下
if( dw_1.modifiedcount() > 0 or dw_1.deletedcount() > 0) then
if dw_list .update() =1 then
commit;
messagebox("提示:","数据保存成功!")
else
messagebox("警告:","数据保存出错!")
rollback;
end if
end if
iwangh
2008-12-15
打赏
举报
回复
我的意思是我和另一个人外不同的电脑上同时打开同一个datawindow,我修改其中几条记录,保存后,另一个人修改另外的几条记录,不是我修改过的。当他保存时不要提示错误,也能够把他修改的保存到数据库中。当重新检索数据时,能够看到我们两个人修改后的数据。
谢谢liubocy ,你的回复我在研究中。
dawugui
2008-12-15
打赏
举报
回复
[Quote=引用楼主 iwangh 的帖子:]
比如一个表中有100条记录。我用datawindow检索出来。我更改了其中两条记录。同时在其它电脑上别人更改了另外两条记录。我想做到我们保存时只保存各自更改的记录。其它记录不比较,不保存。这样在此检索时就都能看到我们两个更改过的记录。请问这个如何做。请各位高手给个思路吧。谢谢。
[/Quote]
不太明白你的意思,你保存后需要看到别人保存的数据吗?
如果需要,保存后立即刷新(retrieve()).
如果不需要,把数据放到一个临时DW中,从临时DW中获取数据.或这原来的DW不用retrieve()
liubocy
2008-12-15
打赏
举报
回复
主要看update property是如何设置的:
update property中各个选项的意思
Update属性详解:
大多数情况下,您的应用程序将在网络环境下运行。有可能会有多个人同时使用一个程序。在这种情况下使用数据窗口应注意并发控制问题。
数据窗口的并发性控制可以用"rows"菜单的"Update Properties"项进行设定。
1. Allow Updates:如果选中,则整个数据窗口允许修改,否则不允许;
2. Table to Update:在多表查询时,用该项选择要设置的表名;
3. Where Clause for Update/Delete:这项设置是对数据库并发控制最重要的一项,要仔细设置。
当调用数据窗口的Update方法时,数据窗口使用SQL语句将数据结果传递到数据库系统,这项设置决定在SQL语句的where子句中使用哪些列作为整条记录的标志。
(a)Key Columns:仅仅使用关键字作为整条记录的标志。在网络环境下不推荐使用此选项。如果两个用户同时修改了同一条记录,后进行保存操作的人会把先保存的人所做的修改"抹掉"而毫无察觉。如果选择Key Columns,那么Update对应的SQL语句是:
Update A.xh, A.xm, A.csrq, A.py
Set ... //用户修改后的新值
Where A.xh = ... //用户修改前的旧值
如果被修改的不是xh列,那么后一个用户将察觉不到前一个用户所做的修改。
(b)Key and Updatable Columns:使用关键字和所有可更新列作为记录的标志。
采用(a)中的例子,Update对应的SQL语句将是:
Update A.xh, A.xm, A.csrq, A.py
Set ... //用户修改后的新值
Where A.xh = ...
And A.xm = ...
And A.csrq ...
And A.py = ... //用户修改前的旧值
在这种情况下,后一个用户的Update将不能成功执行。
(c)Key and Modified Columns:使用关键字和所有已更新列作为记录的标志。
功能和(b)很相似,不同点在于(b)的前端执行速度快,数据库端慢;而(c)则刚好相反。
4. Key Modification:该项设置决定了更新数据库的方法。
(a)Use Delete then Insert:先删除,再插入。
(b)Use Update:直接修改。
建议使用(b)选项。
5. Updatable Columns:用来选择"可更新列",这里所做的选择与3.(b)对应,没有选中的列将不会出现在Update语句中。
6. Unique Key Columns:用来选择关键字,这里所做的选择与3.(a)对应,没有选中的列将不会出现在Update语句中。
---------------------------------------------------------------
原因:执行dw_1.update()之前,表中的数据被其它人修改过的话就可能会出现这种情况
什么情况下发生这种错误是由dw的update properties 的设置决定的,
关键因素就在这里
表1: a,b,c,d 列(在updatable columns中选中全部列)
a为key列(在unigue key columns 中设置)
关键是where clause ...中的设置
(a)Key Columns:仅仅使用关键字作为整条记录的标志。 当选择这种方式时,只有a字段的值在你update()之前发生改变,才会引起这个错误
b)Key and Updatable Columns:使用关键字和所有可更新列作为记录的标志。 使用这种方式更新,最容易引起这种错误,因为只要a,b,c,d任何一个可更新的列由其它人改变了,就会引起错误.
c)Key and Modified Columns:使用关键字和所有已更新列作为记录的标志。假如: 你修改了b列,那么,在你执行update()之前,如果a,b中任何一个列由其它人改变了,就会引起这个错误. 这种情况下,如果a,b列没被其它人修改,而c,d列被修改了,则不会引起错误.
---------------------------------------------------------------
但是,有些时候,是单击版开发,数据改动全部由开发者控制,基本上不存在多用户同时使用的问题,也会发生Row changed between retrieve and update 这样的错误,原先由高人指点过一二,但是也不是很清楚,请高人再指点一下
---------------------------------------------------------------
哪怕是单机版的程序,同样有可能出现这个错误!
1.检查本程序中是否有多个事务对象,假如两表同时读取表的数据,事务a对表更新了,这时dw用事务b再去更新就会发生这个错误.
2.有时候有些朋友,在开发的时候,打开了两个PB,(特别是对database操作), 另一个程序运行
时也有可能出现这个错误
3.对于dw如果用setitemstatus() 或 update(false,false) 之类的语句,很容易会引起这种错误
4.如果程序中有语句修改了数据窗口的original缓冲区的值,同样会引起这个错误
以上是我的经验总结,其中1,3条是最容易出现的
dawugui
2008-12-15
打赏
举报
回复
[Quote=引用楼主 iwangh 的帖子:]
比如一个表中有100条记录。我用datawindow检索出来。我更改了其中两条记录。同时在其它电脑上别人更改了另外两条记录。我想做到我们保存时只保存各自更改的记录。其它记录不比较,不保存。这样在此检索时就都能看到我们两个更改过的记录。请问这个如何做。请各位高手给个思路吧。谢谢。
[/Quote]
保存后立即刷新(retrieve())
Access2013
数据库
入门教程3查询
部分
本课程为Access2013
数据库
知识系列课程-查询
部分
,access
数据库
全系列第7部,课程目标:结合《产品订单示例
数据库
》简单的实例讲解,零基础入门学习Access2013<查询
部分
>知识。
mysql查询
数据库
修改
记录
_11. 查询
数据库
各种历史
记录
在SQL Server
数据库
中,从登陆开始,然后做了什么操作,以及
数据库
里发生了什么,大多都是有
记录
可循的,但是也有一些确实无从查起。一.
数据库
启动
记录
1.最近一次启动SQL Server的时间select sqlserver_start_time ...
内存
数据库
将数据
保存
在计算机内存,内存
数据库
相对于磁盘,内存的数据读写速度要高出几个数量级,将数据
保存
在内存中相比从磁盘上访问能够极大地提高应用的性能。中文名内存
数据库
外文名main memory database定义将数据放在内存直接操作的
数据库
下设最大特点“主...
如何
保存
数据库
级别修改的
记录
前几天在论坛上发了一个帖子"SQL Server 2008如何查看表结构修改
记录
",很感谢马上有人热心回复并给出建议,现在我把
问题
的原因和到最后的解决办法与大家分享,希望对大家有帮助.
问题
:上午一上班就有用户打电话说系统出...
查询
数据库
各种历史
记录
查询
数据库
各种历史
记录
在SQL Server
数据库
中,从登陆开始,然后做了什么操作,以及
数据库
里发生了什么,大多都是有
记录
可循的,但是也有一些确实无从查起。 一.
数据库
启动
记录
1.最近一次启动SQL Server...
DataWindow
609
社区成员
20,469
社区内容
发帖
与我相关
我的任务
DataWindow
PowerBuilder DataWindow
复制链接
扫一扫
分享
社区描述
PowerBuilder DataWindow
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章