在开发一个库存管理里程序里,碰上了并发扣库存的问题!因考虑到程序本身的一些处理问题,没有使用触发器和存储过程。
正常在触发器和存储过程里。都很容易使用这个功能。
===================================================================
事务开始
1.先定设置锁定超时时间为3000毫秒。
2.用select * from 库存表 WITH(XLOCK) where .....进行锁定某个记录。
....事务提交
如果错误则回滚事务。
===================================================================请问,如何在delphi 的adoQuery控件中使用 MSSQL2000 查询锁定 的功能 。

解决方案 »

  1.   

    你是锁定某个表还是锁定某个记录?
    如果只有表的话可以建一个表
    表结构如下:
    TableName   varchar(250)
    Locked      char(1) 默认值 0
    以读取一个表的记录时首先查看这个表相对应的Locked是否为1,为1表示该表已被锁定
    对该表数据处理完之后要记得将该表相对应的Locked赋为0
    ........
      

  2.   

    在数据集的BeforePost事件中
    AdoConnection1.BeginTrans;在AfterPost事件中
    AdoConnection1.CommitTrans;在数据集的PostError事件中
    AdoConnection1.RollbackTrans;
    Action:=daAbort;
      

  3.   

    回复人: Firec(Firec) ( ) 信誉:90  2004-12-01 12:41:00  得分: 0  
     
     
       并发扣库存?我一般喜欢使用临时查询上传,或者建立单独的上传线程。
      
     可否谈一下你的作法?我听得不是很懂……另,建一个临时表来设置信号的方式不是很好,弊端很多……
    使用语句强行锁定的方法也有执行限制……
    不过我觉得还是不要使用这种比较好一点。
      

  4.   

    新建DELPHI群7322920欢迎大家加入,一起提高!