1、第一种 
     ADOQuery_ClientSet.Close;
      ADOQuery_ClientSet.SQL.Text := 'update *****';
      ADOQuery_ClientSet.ExecSQL;
-------------------------------------------------------------
2、第二种 
      ADOQuery_ClientSet.Active = false;
      ADOQuery_ClientSet.SQL.Text := 'update *****';
      ADOQuery_ClientSet.ExecSQL;
      ADOQuery_ClientSet.Active = true;
-------------------------------------------------------------等等,还是有其它标准的写法呢?

解决方案 »

  1.   


    两种是一样的。
    ADOQuery_ClientSet.Close; //与 ADOQuery_ClientSet.Active := false; 等同 
    ADOQuery_ClientSet.SQL.Text := 'update *****'; 
    ADOQuery_ClientSet.ExecSQL; 
    ------------------------------------------------------------- 
    ADOQuery_ClientSet.Active = false; //与 ADOQuery_ClientSet.Close; 等同
    ADOQuery_ClientSet.SQL.Text := 'update *****'; 
    ADOQuery_ClientSet.ExecSQL; 
    //ADOQuery_ClientSet.Active := true //此句删除,没有必要
      

  2.   

    Close和Active := False是一个意思,但是如果要返回数据集的用Open,如果执行SQL语句不返回结果集的用SQLExec,一般写法:procedure TDBConnection.SQLOpen(var AQry: TADOQuery; const ASql: string);
    begin
      AQry.Close;
      AQry.SQL.Text := ASql;
      AQry.Open;
    end;procedure TDBConnection.SQLExce(var AQry: TADOQuery; const ASql: string);
    begin
      AQry.Close;
      AQry.SQL.Text := ASql;
      AQry.ExecSQL;
    end;
      

  3.   

    另外   
       ADOQuery_ClientSet.Active = false;
          ADOQuery_ClientSet.SQL.Text := 'update *****';
          ADOQuery_ClientSet.ExecSQL;
          ADOQuery_ClientSet.Active = true; 应该会报错。 SQL.Text中的内容变成update....了。再active := true会有问题。
      

  4.   

    我一般这样写:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      sSQL : string;
    begin
      sSQL := 'update ******';
      ADOQuery_ClientSet.Close;
      ADOQuery_ClientSet.SQL.Text := sSQL;
      try
        ADOQuery_ClientSet.ExecSQL;
        showmessage('成功');
      except
        showmessage('失败');
      end;
    end;
      

  5.   

    ExecSQL主要用于那种不返回数据集的操作,比如update,insert,delete等等语句。而active = true和open() 两种个接口本质上都是一样的,就是打开一个数据集,也就是说主要用于Select语句.上例中:
    第二种方式显然是不对的。
    应为是update直接execSQl就好了。
      

  6.   

    我链接的是 MySql 数据库,常常会出现“无法定位更新行,记录可能被多次更新”类似的错误,以前在MSSql上面就没有出现过,请问一下,这样的错误,大家遇到过吗。我用的是 ExecSQL(update ***)
      

  7.   

    2、第二种
          ADOQuery_ClientSet.Active = false;
          ADOQuery_ClientSet.SQL.Text := 'update *****';
          ADOQuery_ClientSet.ExecSQL;
          ADOQuery_ClientSet.Active = true; 
    第二种写错了,屏蔽掉ExecSQL
    说下ExecSQL用在在三种操作 insert delete update 
    Open用在   select
      

  8.   

    难道大家都不用clientdataset,而是直接操作ADOQUERY的吗?很想知道大系统都是用些什么方法开发的!