如何控制多用户并发

zhangjiecsdn 2004-11-03 09:30:06
如表A(bh, *****)
B(bh, xh, *****) bh + xh为主键
AB通过bh关联,B中为1...的序号,如果多个用户在中间插入一行,需要将序号移动,没法。
...全文
246 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangjiecsdn 2004-11-07
  • 打赏
  • 举报
回复
孔兄,感谢,结贴!
sdkong 2004-11-05
  • 打赏
  • 举报
回复
你看在我的用户对象上扩展一下,以前是判断库中有没有大于等于新增id的数据,如果有的话就重新设置id.你现在可以改为如果有的话就推移大于等于新增id的库中数据,新增id并不修改.
你也可以通话其他更方便的方法,因为你对你管理的业务最熟悉,我只是看到你这一点要求,并不能很了解你整体系统的功能.
zhangjiecsdn 2004-11-04
  • 打赏
  • 举报
回复
孔兄,感谢您的热心帮助;您可以解决排序唯一的问题,但看如下情形t1:
bh xh name
22 1 A
22 2 B
22 3 C
22 4 D
22 5 E
t2 首先,用户一作如下修改:插入记录 K
bh xh name
22 1 A
22 2 K
22 3 B
22 4 C
22 5 D
22 6 E
期间,用户二作如下修改:插入两条记录 M N
bh xh name
22 1 A
22 2 B
22 3 C
22 4 M
22 5 N
22 6 D
22 7 E
并提交t3!
t4 然后,用户一提交!
怎样保证我的序号为:
1 2 3 4 5 6 7 8
A K B C M N D E
lypch 2004-11-04
  • 打赏
  • 举报
回复
用时间措
yeymsf 2004-11-04
  • 打赏
  • 举报
回复
大家不要忘记了rows->retrieve option->rows to disk 选上
sdkong 2004-11-04
  • 打赏
  • 举报
回复
但我的问题是:用户一在对b表操作时,用户二在 *b* 表中插入一行数据(b表中所有插入行后的数据的主键xh加 1)并提交;用户一在用户二操作之后保存。
也可以这样说:用户一在提交时发现____他修改的数据的主键都变化了
===========================================
这样不更好做了,我先说一下我理解的意思:用户1和用户2相当于都对表b进行操作,只是用户2先对数据进行了操作.比如原来两用户没操作之前的xh=5,两用户读系统中的最大xh都是5,然后用户1和用户2分别都增加了一条数据,最大xh也就为6了,但是用户1先保存了,库的最大xh也就是6了,而用户2再保存时,如果不加处理,就会使主键重复.
应这样处理:
of_register_other(false)
of_setting_id("xh",dw_b,6)
这样就可以了
如果a表要某种情况下,也会出现这种情况的话,就这样:
of_register_other("bh",dw_b)
of_setting_id("bh",dw_a,6)
zhangjiecsdn 2004-11-03
  • 打赏
  • 举报
回复
顺序很有用,是关键信息;如果中间插入一行,后面序号增长。
我也看过了张健姿讲座
http://search.csdn.net/Expert/topic/396/396012.xml?temp=.9515802
但是没有对这种 “同一个表中数据关联” 的情况 给出答案!
请大家给出解决方案;一定是解决问题的!
li_d_s 2004-11-03
  • 打赏
  • 举报
回复
要移动序号?为啥?放在最后不行?
zhangjiecsdn 2004-11-03
  • 打赏
  • 举报
回复
看是看完了;不太懂其中的策略:(a与b 为 一对多关系)
好像是如下情形:用户一在对b表操作时,用户二在a表中插入一行数据并提交;用户一在用户二操作之后保存。 即需要同步修改b中的关联主键时的方法。

但我的问题是:用户一在对b表操作时,用户二在 *b* 表中插入一行数据(b表中所有插入行后的数据的主键xh加 1)并提交;用户一在用户二操作之后保存。
也可以这样说:用户一在提交时发现____他修改的数据的主键都变化了。

表结构再细化一点:
A(bh, ...)
B(bh, xh, name...)
B表中, bh + xh为主键,bh + name绝大部分情况下可以唯一确定一条记录,但不能做主键。
纸飞机2017 2004-11-03
  • 打赏
  • 举报
回复
下载的而已
zhangjiecsdn 2004-11-03
  • 打赏
  • 举报
回复
谢谢孔兄!代码研究中。
从代码书写中看出孔兄非一般水平啊!
sdkong 2004-11-03
  • 打赏
  • 举报
回复
邮件已发出
便用方法:
of_setting_id(string as_col,any ao_set_obj,string as_sys_maxid)
用于重新设置数据窗口或数据存储的id列的值
of_register_other(string as_col[],any aa_obj[])
用于设置其他数据窗口或数据存储的相关联列
例如:
a表id列是主键,并且是通过函数自动增加的,并不是序列
b表a_id列是工表的主键
保存前,这样处理:
iuo_setid=create uo_anew_settingid
iuo_setid.of_register_other("a_id",dw_b)
iuo_setid.of_setting_id("id",dw_a,2)
这样就可以了
如果不用更新其他数据窗口或数据存储,将of_register_otehr(false)
sdkong 2004-11-03
  • 打赏
  • 举报
回复
我专门有一个用户对象来处理这个东东,想要的发邮件给我sd-kong@163.com

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧