B(bh, xh, *****) bh + xh为主键
AB通过bh关联,B中为1...的序号,如果多个用户在中间插入一行,需要将序号移动,没法。
13 个解决方案
#1
要移动序号?为啥?放在最后不行?
#2
顺序很有用,是关键信息;如果中间插入一行,后面序号增长。
我也看过了张健姿讲座
http://search.****.net/Expert/topic/396/396012.xml?temp=.9515802
但是没有对这种 “同一个表中数据关联” 的情况 给出答案!
请大家给出解决方案;一定是解决问题的!
我也看过了张健姿讲座
http://search.****.net/Expert/topic/396/396012.xml?temp=.9515802
但是没有对这种 “同一个表中数据关联” 的情况 给出答案!
请大家给出解决方案;一定是解决问题的!
#3
我专门有一个用户对象来处理这个东东,想要的发邮件给我sd-kong@163.com
#4
邮件已发出
便用方法:
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)
便用方法:
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)
#5
谢谢孔兄!代码研究中。
从代码书写中看出孔兄非一般水平啊!
从代码书写中看出孔兄非一般水平啊!
#6
下载的而已
#7
看是看完了;不太懂其中的策略:(a与b 为 一对多关系)
好像是如下情形:用户一在对b表操作时,用户二在a表中插入一行数据并提交;用户一在用户二操作之后保存。 即需要同步修改b中的关联主键时的方法。
但我的问题是:用户一在对b表操作时,用户二在 *b* 表中插入一行数据(b表中所有插入行后的数据的主键xh加 1)并提交;用户一在用户二操作之后保存。
也可以这样说:用户一在提交时发现____他修改的数据的主键都变化了。
表结构再细化一点:
A(bh, ...)
B(bh, xh, name...)
B表中, bh + xh为主键,bh + name绝大部分情况下可以唯一确定一条记录,但不能做主键。
好像是如下情形:用户一在对b表操作时,用户二在a表中插入一行数据并提交;用户一在用户二操作之后保存。 即需要同步修改b中的关联主键时的方法。
但我的问题是:用户一在对b表操作时,用户二在 *b* 表中插入一行数据(b表中所有插入行后的数据的主键xh加 1)并提交;用户一在用户二操作之后保存。
也可以这样说:用户一在提交时发现____他修改的数据的主键都变化了。
表结构再细化一点:
A(bh, ...)
B(bh, xh, name...)
B表中, bh + xh为主键,bh + name绝大部分情况下可以唯一确定一条记录,但不能做主键。
#8
但我的问题是:用户一在对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)
也可以这样说:用户一在提交时发现____他修改的数据的主键都变化了
===========================================
这样不更好做了,我先说一下我理解的意思:用户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)
#9
大家不要忘记了rows->retrieve option->rows to disk 选上
#10
用时间措
#11
孔兄,感谢您的热心帮助;您可以解决排序唯一的问题,但看如下情形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
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
#12
你看在我的用户对象上扩展一下,以前是判断库中有没有大于等于新增id的数据,如果有的话就重新设置id.你现在可以改为如果有的话就推移大于等于新增id的库中数据,新增id并不修改.
你也可以通话其他更方便的方法,因为你对你管理的业务最熟悉,我只是看到你这一点要求,并不能很了解你整体系统的功能.
你也可以通话其他更方便的方法,因为你对你管理的业务最熟悉,我只是看到你这一点要求,并不能很了解你整体系统的功能.
#13
孔兄,感谢,结贴!
#1
要移动序号?为啥?放在最后不行?
#2
顺序很有用,是关键信息;如果中间插入一行,后面序号增长。
我也看过了张健姿讲座
http://search.****.net/Expert/topic/396/396012.xml?temp=.9515802
但是没有对这种 “同一个表中数据关联” 的情况 给出答案!
请大家给出解决方案;一定是解决问题的!
我也看过了张健姿讲座
http://search.****.net/Expert/topic/396/396012.xml?temp=.9515802
但是没有对这种 “同一个表中数据关联” 的情况 给出答案!
请大家给出解决方案;一定是解决问题的!
#3
我专门有一个用户对象来处理这个东东,想要的发邮件给我sd-kong@163.com
#4
邮件已发出
便用方法:
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)
便用方法:
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)
#5
谢谢孔兄!代码研究中。
从代码书写中看出孔兄非一般水平啊!
从代码书写中看出孔兄非一般水平啊!
#6
下载的而已
#7
看是看完了;不太懂其中的策略:(a与b 为 一对多关系)
好像是如下情形:用户一在对b表操作时,用户二在a表中插入一行数据并提交;用户一在用户二操作之后保存。 即需要同步修改b中的关联主键时的方法。
但我的问题是:用户一在对b表操作时,用户二在 *b* 表中插入一行数据(b表中所有插入行后的数据的主键xh加 1)并提交;用户一在用户二操作之后保存。
也可以这样说:用户一在提交时发现____他修改的数据的主键都变化了。
表结构再细化一点:
A(bh, ...)
B(bh, xh, name...)
B表中, bh + xh为主键,bh + name绝大部分情况下可以唯一确定一条记录,但不能做主键。
好像是如下情形:用户一在对b表操作时,用户二在a表中插入一行数据并提交;用户一在用户二操作之后保存。 即需要同步修改b中的关联主键时的方法。
但我的问题是:用户一在对b表操作时,用户二在 *b* 表中插入一行数据(b表中所有插入行后的数据的主键xh加 1)并提交;用户一在用户二操作之后保存。
也可以这样说:用户一在提交时发现____他修改的数据的主键都变化了。
表结构再细化一点:
A(bh, ...)
B(bh, xh, name...)
B表中, bh + xh为主键,bh + name绝大部分情况下可以唯一确定一条记录,但不能做主键。
#8
但我的问题是:用户一在对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)
也可以这样说:用户一在提交时发现____他修改的数据的主键都变化了
===========================================
这样不更好做了,我先说一下我理解的意思:用户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)
#9
大家不要忘记了rows->retrieve option->rows to disk 选上
#10
用时间措
#11
孔兄,感谢您的热心帮助;您可以解决排序唯一的问题,但看如下情形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
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
#12
你看在我的用户对象上扩展一下,以前是判断库中有没有大于等于新增id的数据,如果有的话就重新设置id.你现在可以改为如果有的话就推移大于等于新增id的库中数据,新增id并不修改.
你也可以通话其他更方便的方法,因为你对你管理的业务最熟悉,我只是看到你这一点要求,并不能很了解你整体系统的功能.
你也可以通话其他更方便的方法,因为你对你管理的业务最熟悉,我只是看到你这一点要求,并不能很了解你整体系统的功能.
#13
孔兄,感谢,结贴!