如何解决并发输入?(100分)

  • 主题发起人 主题发起人 lvjun99
  • 开始时间 开始时间
L

lvjun99

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用的后台数据库是sql server,在一个表中设置一个有意义的主关
键字,在程序中要求自动生成,且每天按顺序产生,如已有一条主关键
字为S199901020023,那么下一条记录主关键字应当为S199901020024,
如果是一个人输入,自动产生没有问题,如果多人输入,则有可能至少
一个人产生的主关键字为S199901020024,那么只能有一个人能保存进
数据库,另外的人则不能保存,如何能很好地解决这个问题?分值很可观
哟!
 
难道unique不行吗?
 
用个发生器和触发器:

Create GENERATOR MY_GEN
SET GENERATOR MY_GEN TO 199901020001; //这里应该可以根据日期换算这个值
CREATE TRIGGER SETMYGEN FOR MYTABLE
BEFORE INSERT AS
BEGIN
NEW.KEYWORD=GEN_ID(MY_GEN,1);
END;
 
1、生成主关键字的代码写在你的Dataset的BeforePost事件中
2、在事件中根据数据库中已有的关键字生成不同的关键字
3、如果保存失败,再次生成不同的关键字,再保存

这样只要多试几次应该就可以解决问题了,
注意保存失败后应该判断是关键字重复还是输入错误。
 
多人接受答案了。
 
李颖回答的差远了, 在C/S编程里, 多人环境中根本不能用你那样的方法
我刚做的项目就是多人并发录入的,15个人同时POST数据到SERVER, 如果用你的方法,SERVER要累死

lvjun99把序号ID放到另外一个表而没有使用SQL SERVER的 IDENTITY字段
是合理的。lvjun99 只需要用 启动事务 把更新序号库和要更新实际内容库
的两个部分放到一个事务里就可以避免,由于受到事务保护,不会出现
重复的ID号,也可以使关联正确
try
database1.starttranaction;
storedproc1.execproc;
database1.commit;
except
database1.rollback;
showmessage('其他用户干扰,当前事务无法进行,请再按按钮');
end;
 
后退
顶部