D6开发的C/S三层结构的系统中客户端程序执行远程插入语句有时会死掉,也就是一直处于插入状态,造成插入超时,然后死掉了,要关掉重新运行客户端程序才行,请问这如何解决!

解决方案 »

  1.   

    procedure TMainForm.QueryExec(mTempQuery:TADOQuery);
    var
            mError: boolean;
    begin
            while 0=0 do
            begin
                    mError := False;
                    try
                            mTempQuery.ExecSQL;
                    except
                            mError := True;
                    end;
                    if mError then
                    begin
                            try
                                    mTempQuery.Connection.Connected := False;
                                    mTempQuery.Connection.Connected := True;
                            except
                            end;
                    end
                    else
                            break;
            end;
    end;添加该过程,将原来的类似语句
    AdoQuery1.SQL.Text := 'INSERT INTO ....';
    AdoQuery1.ExecSQL;
    改为
    AdoQuery1.SQL.Text := 'INSERT INTO ....';
    QueryExec(AdoQuery1);插入失败后,会不断重试,直到插入成功。如果不想出现“程序无响应”,请在该过程的相应位置加入Application.ProcessMessages;
      

  2.   

    关键要找出出错的原因,真的是通讯断了吗?正常情况下,应该是不会出现这种情况的,你跟踪一下代码。
    我认为,是不是死锁的原因,在insert的时候,你在查询分析器用sp_who看看