在多客户端使用的情况下,如何保证insert到表的值是按顺序增加? 主要是用于订单表的订单号,客户规定一定要顺序增大,中间不能缺少。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一种方法: 如楼上所说,建立键值表,如张三操作员订单编号从A00001到A00199,李四从B00001到B000199等。第二种方法: 用全局锁。即建立一个全局表,将最新的编号存在表里,每次需要新增时将编号从中取出并将记录锁定,保存完成后再释放锁。但要考虑维护这个锁很麻烦,万一不正常退出或是突然断电就会造成永远锁定了那个值。可以考虑锁超时和定时解锁! yczyk能详细介绍一下第二种方法吗?或者能给个例子?谢谢大家了。 可以先向服务器端申请id(首先把ID设置为主键),这是如果多个客户端申请到一个id,则只有一个写入成功,其它客户端会返回错误记录的数据(这里假设写一条记录,更新一条记录,所以写入主键冲突返回的错误记录为1),如果返回的错误记录>0,则再次提出申请,一直到写入成功。 我的一个系统就是这么搞定的,希望对你有点用处。 自增字段当然也可以,但是如果客户要求ID形式为0001,0002,或者A0001...等就不好弄了,还要在显示地方进行换算, 在CreateTable中间设置自增字段,主键以及约束条件 编号表 no(id varchar(10),value int)no.filter:='id='''+添加记录的类型+'''';no.filted:=true;no.open;no.edit;i:=no['value'];dingdan.filter:='id='''+定单的类型+'''';dingdan.filtered:=true;dingdan.open;dingdan.edit;dingdan['定单编号']:=i //最新的记录编号;dingdan.post; i:=i+1; no['value']:=i; //编号表更新; no.post; 这个~~Delphi程序员的一天是怎么度过的咯?(散99分) 有哪位CSDN兄弟知道如何实现DELPHI中分声道播放声音,感激感激~~~~~~~ 如何改变组件pagecontrol的姿色? 面试疑惑 WebBrowser1的问题 有关Excel问题? intpower函数做什么用的?? ListView倥件的使用,急!! 求教!关于事件的一个调用问题。 请教下如何将Delphi和Office的关联问题 菜鸟请教,时间如何转换成字符?简单问题。 决定再也不来CSDN了。
如楼上所说,建立键值表,如张三操作员订单编号从A00001到A00199,李四从B00001到B000199等。
第二种方法:
用全局锁。即建立一个全局表,将最新的编号存在表里,每次需要新增时将编号从中取出并将记录锁定,保存完成后再释放锁。但要考虑维护这个锁很麻烦,万一不正常退出或是突然断电就会造成永远锁定了那个值。可以考虑锁超时和定时解锁!
我的一个系统就是这么搞定的,希望对你有点用处。
no.filter:='id='''+添加记录的类型+'''';
no.filted:=true;
no.open;
no.edit;
i:=no['value'];
dingdan.filter:='id='''+定单的类型+'''';
dingdan.filtered:=true;
dingdan.open;
dingdan.edit;
dingdan['定单编号']:=i //最新的记录编号;
dingdan.post;
i:=i+1;
no['value']:=i; //编号表更新;
no.post;