delphi+ado+ms sql server
怎样进行错误处理,捕捉到SQLSERVER的错误信息?
有代码更好!
祝大家羊年好运!

解决方案 »

  1.   

    以下代码可以显示各种Provider的错误(包括和数据库服务器互动时发生的错误):
    procedure TForm1.ShowADOErrors;
    var
      adoErrors : Errors;
      adoError : Error;
      iCount : Integer;
    begin
      adoErrors := ADOConnection1.Errors;  for iCount := 0 to adoErrors.Count - 1 do    // Iterate
      begin
        adoError := adoErrors.Item[iCount];    lbADOErrors.Items.Add('Error Number : ' + IntToStr(adoError.Number));
        lbADOErrors.Items.Add('Error Source : ' + adoError.Source);
        lbADOErrors.Items.Add('Error Description : ' + adoError.Description);
        lbADOErrors.Items.Add('Error HelpFile : ' + adoError.HelpFile);
        lbADOErrors.Items.Add('Error SQLState : ' + adoError.SQLState);
        lbADOErrors.Items.Add('Error NativeError : ' + IntToStr(adoError.NativeError));
      end;    // for
    end;
      

  2.   

    还有:)Database1.StartTransaction;
        try
          ApplyUpdates;
          Database1.Commit;
        except
    //      Database1.Rollback;
    //      raise;
      On E: EDBEngineError do
        begin
          Database1.Rollback;
          for i := 0 to E.ErrorCount - 1 do
          begin
            case E.Errors[i].ErrorCode of
              $2601:
                    begin
                    ShowMessage('呵呵!不允许?值重复!');
                    end;
              $0021:
                    begin
                    Showmessage('太糟糕了,系统发生故障!TMD');
                    end;
              $270b:
                    begin
                    Showmessage('对不起,你的受到主外键约束!怎么样,很失望吧!');
                    end;
              $2b05:
                    begin
                    Showmessage('太糟糕了,网络连接超时判负!TMD');
                    end;
              $0028:
                    begin
                    Showmessage('锁定违例!');
                    end;
              $1200:
                    begin
                    Showmessage('不能识别的SQL错误!呵呵,有事干了!');
                    end;
              $2501:
                    begin
                    Showmessage('太糟糕了,你的内存不足!请使用N(N>=10000)兆内存');
                    end;
              $2605:
                    begin
                    Showmessage('对不起,你所添加的数据违反外键约束!');
                    end;
              $2728:
                    begin
                    Showmessage('你所操作的表不存在!');
                    end;
              $2801:
                    begin
                    Showmessage('记录已经被其它用户琐定!');
                    end;
              $2a06:
                    begin
                    Showmessage('数据引擎初始化错误!');
                    end;
              $2c01:
                    begin
                    Showmessage('网络初始化失败!');
                    end;
              $2c07:
                    begin
                    Showmessage('呜呜..呜呜!一个我不知道的网络错误,这不可能!');
                    end;
              $2c0d:
                    begin
                    Showmessage('是谁干的!!服务器竟然没打开!');
                    end;
              $3e07:
                    begin
                    Showmessage('初始化失败!');
                    end;
              $3303:
                    begin
    //                ShowMessage('服务器端错误:一般的SQL错误!');
                    end;
            else
              //raise EDatabaseError.Create(E.Message);
            end;//case
          end;//for
         end;//on EDBError    end;
        CommitUpdates;
      end;