1、delphi+adoquery+sqlserver2000(70分)
如何实现数据库记录的锁定和解除?
还有,数据库记录锁定时,是否可以进行查询操作,如何控制查询操作?在多用户系统中,如何控制一条记录只有一个终端或用户使用?
请给详细的资料和例子,谢谢!!
特别是可能遇到的问题,遇到后要如何处理?2、数据库的锁定和解除要如何处理了?(30分)

解决方案 »

  1.   

    需要用到两个TQuery控件,一个用于锁定记录,另一个用于使锁定的记录可修改.如:第一个query的Sql为:Select   *   from   表   where   条件   for   update   nowait,   第二个query的Sql为:Select   *   from   表   where   条件.   这样,即锁定了记录,又   
      允许设RequestLive   属性为true,用第二个Query控件进行修改. 
      

  2.   

    1.加一个标识字段来加锁!另一个用户修改数据时应先判断该字段是处于编辑状态还是浏览状态!
    2.用数据库自带的锁来处理。在更新时用事务!
    FOR EXAMPLE:
    BEGIN TRANSELECT * 
    FROM tb WITH(UPDLOCK, READPAST)
    - UPDLOCK 让锁保留到事务结束, READPAST 跳过已经锁定的数据END TRAN
    ---------------------------------------------------------------------------------
    不过最好是在一用户更新数据后,用消息来通知其它在线用户!避免用户同时打开某界面,而先后保存造成的种种问题~
      

  3.   

    http://topic.csdn.net/t/20031107/10/2436437.html看SQL帮助
      

  4.   

    长事务:
    使用ADOConnection做连接,设置成保持连接,让ADOQuery等(可以是多个)共享该连接,在必要的时候使用ADOConnection的BeginTran*开启事务,然后进行操作,在必要的地方进行事务回滚Rollback或者提交事务Commit.
      

  5.   

    to brightyang:
      还是不太明白,能说的详细些吗?网上找了好久,没有发现相应的资料,麻烦你了!也希望其他高手给予解答,谢谢!
      

  6.   

    你查询的时候,单独用另一个query空间和数据感知控件来做,这样你单纯浏览数据和对数据的操作都可以分开进行
      

  7.   

    还有,对于问题1,数据锁定的时候,如果做报表,可以查询到锁定的这笔记录吗?
    =================
    with (nolock)