问题是这样的:
我一个局域网有几台机器访问另外一台机器的数据库,
有时一台机器打开程序时出现超时已过期的错误,然后我去看数据库
发现有堵塞现象。这时我关闭那个造成堵塞进程的程序后,那个程序关闭之前一段时间
输入进数据库的一些数据都会丢失(程序关闭之前,在程序里查询数据显示的是已经
输入至数据库里了)
------------------------------------------------------------------------
着急啊,恳求达人们帮忙啊?

解决方案 »

  1.   

    TO 上面两位:
    你们所说的事务控制是在sql里面是还是使用 ADOCONNECTION的事务??
      

  2.   

    通过下面的事务控制不行么???
    非得在存储过程中使用事务???
    =================================================
      jiemian.ADOConnection1.BeginTrans;
      try
        adoquery1.Post;
        adoquery3.Post;
        with adoquery2 do
        begin
          close;
          sql.Clear;
          sql.Add('select max(version) from gongshixishu');
          open;
          iGugongVersion:=fields[0].AsInteger;
        end;
        showmessage('操作成功!!!');
        jiemian.ADOConnection1.CommitTrans;
      except
        jiemian.error('操作失败!!!');
        jiemian.ADOConnection1.RollbackTrans;
    =========================================================
      

  3.   

    在程序例如这样:
      adoconnection1.BeginTrans;
      try
        //处理过程
        adoconnection1.CommitTrans;
      except
        adoconnection1.RollbackTrans;
      end;
      

  4.   

    你的控制没有什么问题,下面的这个不用放在事务里
        with adoquery2 do
        begin
          close;
          sql.Clear;
          sql.Add('select max(version) from gongshixishu');
          open;
          iGugongVersion:=fields[0].AsInteger;
        end; 
      

  5.   

    很明显,你看到的是脏数据,由于堵塞或死锁,DBMS自动回滚了
    你现在要找究竟是哪条语句造成的堵塞。
    可以试一下:
    1.
    sp_who2 active 
    然后看下blkby列 
    2.
    然后dbcc inputbuffer(blkby列值). 
    这样就可以找到堵塞之前执行的SQL语句了,在获取该语句后,分析一下其与其它事务的并行性关系,是不是在事务中执行了费时或等待的操作,导致事务一直HOLD一把排它锁,导致其它事务一直在等待锁资源。
    具体问题具体分析,你先找一下原因吧
     
      

  6.   

    谢谢各位,
    特别是liangpei2008,现结贴了。