程序中一个ADOQuery,用ExecSQL执行一段SQL语句,怎样知道执行结果是成功还是失败?
怎样看执行结果的返回值?
有人说成功返回1,失败返回0,怎样看返回值?

解决方案 »

  1.   

    adoquery1.recordcount这个就是返回值
      

  2.   

      try
        ADOQuery1.ExecSQL ;
      except
        showmessage('ERROR');
      end;
      

  3.   

    判断sql语句是否错误可以按照这个
      

  4.   


    可以把sql语句放在一个函数里,通过异常处理返回值来判断是否执行成功。function ExceSQLTxt:boolean;
    begin
      result:=false;
      try
      {执行sql语句}
        result:=true;   {执行语句成功}
       except
        result:=false;  {执行语句失败}
      end;
    end;{OR}function ExceSQLTxt:string;
    begin
      result:='';
      try
      {执行sql语句}
        result:='';           {执行语句成功}
       except
        on e:exception
          result:=e.message;  {执行语句失败,返回失败信息}
      end;
    end;
      

  5.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB;type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        Button1: TButton;
        ListBox1: TListBox;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure getADOConnectionError(vSql:string;vError: TStrings;vQuery:TADOQuery);
      procedure execSQL(vSql:string;vQuery:TADOQuery);
      begin
        with vQuery do
        begin
          Close;
          SQL.Clear;
          SQL.Text:=vSql;
          Open;
        end;
      end;
    var
      i:Integer;
    begin
      with vQuery.Connection do
      try
        execSQL(vSql,vQuery);
      except
        //取得产生的错误总数
       //vError.Add(IntToStr(ConnectionObject.Errors.Count));
       vError.Clear;
       for I:=0 to ConnectionObject.Errors.Count-1 do
        begin
           vError.Add('错误码 ='+IntToStr(ConnectionObject.Errors[i].Number));
           vError.Add('错误源 ='+ConnectionObject.Errors[i].Source);
           vError.Add('错误源生码='+IntToStr(ConnectionObject.Errors[i].NativeError));
           vError.Add('错误信息='+ConnectionObject.Errors[i].Description);
        end;
        Exit;
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      getADOConnectionError('select * AA  BB  ',ListBox1.Items,ADOQuery1);
    end;end.
      

  6.   

    ...... 
    with qry2 do begin
              close;
              SQL.Clear;
              SQL.Add('DECLARE @db_id int, @tbl_id int');
              SQL.Add('USE drn');
              SQL.Add('SET @db_id = DB_ID('+quotedstr('drn')+')');
              SQL.Add('SET @tbl_id = OBJECT_ID('+quotedstr('[drn].[dbo].[lldata_'+tabledate+']')+')');
              SQL.Add('DBCC PINTABLE (@db_id, @tbl_id)');
              Execsql;
           end;
    .....Execsql执行成功,但返回-1是啥意思?
      

  7.   

    ExecSQL执行返回的是受影响的行数,“影响”包括增删改等,比如说ExecSQL执行一个删除3条记录的语句,成功删除了3条件就返回3(只成功删了2条也就返回2),表示受影响的行数是3行,即有3行被删除了。插入、修改也是同理。返回0,则是没有任何一行受影响,那就是没有增删改到任何行,但是不表示ExecSQL失败,ExecSQL只是提交一个sql语句,sql本身没错,操作失败可能是其他原因,比如删除3跳记录,其中有一条记录有约束没能操作成功。
      

  8.   

    那如果把ExecSQL换为Open并令qry2.ExecuteOptions:=[eoExecuteNoRecords];//查询以不返回记录方式执行,报EOleException类异常消息‘参数类型不正确,或不在可以接受的范围之内,或与其它参数冲突’。返回-1那到底指的是‘参数类型不正确’、‘不在可以接受的范围之内’或‘与其它参数冲突?
      

  9.   

    ExeSQL,此函数是有返回值的,返回值 就是此次执行SQL 所影响的行数。
      

  10.   

    ExecSQL 返回影响的记录数