在开发一个库存管理里程序里,碰上了并发扣库存的问题!因考虑到程序本身的一些处理问题,没有使用触发器和存储过程。
正常在触发器和存储过程里。都很容易使用这个功能。
===================================================================
事务开始
1.先定设置锁定超时时间为3000毫秒。
2.用select * from 库存表 WITH(XLOCK) where .....进行锁定某个记录。
....事务提交
如果错误则回滚事务。
===================================================================请问,如何在delphi 的adoQuery控件中使用 MSSQL2000 查询锁定 的功能 。
正常在触发器和存储过程里。都很容易使用这个功能。
===================================================================
事务开始
1.先定设置锁定超时时间为3000毫秒。
2.用select * from 库存表 WITH(XLOCK) where .....进行锁定某个记录。
....事务提交
如果错误则回滚事务。
===================================================================请问,如何在delphi 的adoQuery控件中使用 MSSQL2000 查询锁定 的功能 。
解决方案 »
- 结构里各个成员的赋值问题
- 子进程怎么通过WaitForSingleObject判断主进程存在?
- delphi中的动态不定长参数的函数如何编写?
- 如何将一个xml文件的内容读如dbgrid;
- 关于ini文件的读写
- 我 想自己写一个到数据库取码的组件(高手帮忙)
- 100分求教,高手请进 关于CREATE()的参数
- 关于用Delphi制作报表的问题。小弟大专毕业,进入一软件公司,用Delphi开发软件!
- 在form的OnResize事件中,grid1.width:=form1.width;语句为什么运行报错?
- 第一次到贵地,请教一个问题
- 请教性能优化方案:Delphi通过ADO访问Access的程序,主要用于算法的大规模计算方面
- 想在dbgrid中实现按下一个字母键,就跳到以这个字母开头的第一条记录处,怎么做?
如果只有表的话可以建一个表
表结构如下:
TableName varchar(250)
Locked char(1) 默认值 0
以读取一个表的记录时首先查看这个表相对应的Locked是否为1,为1表示该表已被锁定
对该表数据处理完之后要记得将该表相对应的Locked赋为0
........
AdoConnection1.BeginTrans;在AfterPost事件中
AdoConnection1.CommitTrans;在数据集的PostError事件中
AdoConnection1.RollbackTrans;
Action:=daAbort;
并发扣库存?我一般喜欢使用临时查询上传,或者建立单独的上传线程。
可否谈一下你的作法?我听得不是很懂……另,建一个临时表来设置信号的方式不是很好,弊端很多……
使用语句强行锁定的方法也有执行限制……
不过我觉得还是不要使用这种比较好一点。