100分求助,怎么取出数据库中最大序号啊?
GRID数据窗口形式输入,单机自动添加序号这一项,代码如下>
int li_currow
li_currow = dw_1.insertrow(0)
dw_1.setitem(li_currow,"xh",string(li_currow))
dw_1.setfocus()
dw_1.setcolumn(1)
dw_1.scrolltorow(li_currow)
现在出现的问题是.我想多个机器同时输入时候,序号能取出最大的然后+1,怎么判断啊?
问题点数:100、回复次数:8Top
1 楼allen_lc(都市现代狼-名字虽土。但代表一种回忆)回复于 2006-02-14 10:49:34 得分 10
帮楼主顶下。。。呵呵
我想可以用select max(xh) from table ; 吧
可是多个机器同时输入。是不是还要考虑使用信号量机制。。
高手指教。。。
Top
2 楼zxjnew(重新启动)回复于 2006-02-14 11:29:33 得分 10
多机输入的是显示最大的可能不太好弄 主要是数据窗口没有进行提交 所以一般来所序号这个东东在提交的时候取出来并马上更新到数据库中!Top
3 楼lzheng2001(1加1)回复于 2006-02-14 11:50:58 得分 10
多用户不能这样做. 除非你每录入一行数据马上保存!Top
4 楼zottff()回复于 2006-02-14 12:14:13 得分 0
我曾经碰到这个问题,主要是解决主从表的问题,我是这样做的:
1、建一个最大编号表,
2、建立两个sqlca,sqlca_a和sqlca_b,sqlca_b的autocommit设置成true
3、循环处理:从编号表取最大编号,加1后用sqlca_b再插入编号表,没有错误则取得最大编号,否则重新循环直到插入成功,Top
5 楼netspies(从头再来)回复于 2006-02-14 12:37:39 得分 10
long ll_max
select max(ID) into :ll_max from mytable;Top
6 楼xyqiqi(琪琪)回复于 2006-02-14 15:35:50 得分 10
可以在保存的时候再取号
也可以在打开的时候就取最大号,立即保存到库里面,退出的时候,如果没有保存,则把库中最大号与当前单据的号进行比较,如果不相同,则把当前号废除!Top
7 楼lzp_lrp(lzp)回复于 2006-02-14 17:19:08 得分 50
int li_currow, li_max
li_currow = dw_1.insertrow(0)
//可以这么写
select max(xh) into :li_max from 表名 where 操作员 = 当前操作员;
li_max += 1
dw_1.setitem(li_currow,"xh",li_max)
dw_1.setfocus()
dw_1.setcolumn(1)
dw_1.scrolltorow(li_currow)Top
8 楼lzp_lrp(lzp)回复于 2006-02-14 17:19:32 得分 0
如果是oracle的话,你可以通过序列来实现Top




