请教一下,我用一个 clientdataset 连接中间层的 datasetprovider 。想把 clientdataset 里面 result 字段全部初始化值为 'N'。现在使用 
clientdataset.first;
while not clientdataset.eof do
begin
    clientdataset.edit;
    clientdataset.fieldvalues['result'] := 'N';
    clientdataset.post;
    clientdataset.next;
end;
clientdataset.applyupdates(0);
由于有8千多条数据,最后感觉 applyupdate 的时候,要等将近半分钟。(之前想使用 update ...set ... 的 sql,但是中间层的 SQLQuery 老是报错,好像说什么不能返回 cursor 什么的,我想是不是 SQLQuery 不支持直接 update 的 sql 啊 。所以只有做一个 while 了。)
请教高手怎么更新能提高效率啊?最好有那种不需要 loop 一次全部更新的方法,谢谢。

解决方案 »

  1.   

    你要在服务器上写一个通用的执行SQL 语句的方法,然后调用这个方法!!!不要用CLIENTDATASET连接的数据集来完成!!!
    用clientdataset来完成大数据量的会很慢!!是因为它的机制造成的!!
      

  2.   

    服务器:
    function TCoTestAccount.MExecSql(const Psql: WideString): Integer;
    begin
      Result:=0;
      Try
        AQExecSql.Close;
        AQExecSql.SQL.Clear;
        AQExecSql.SQL.Text:=Psql;
        AQExecSql.ExecSQL;
        Result:=1;
      Except
      End;
    end;客户端:
    VAR
     SQL :STRING;
      SQL:=‘’。。;
      If ClientDm.ATest.MExecSql(Sql)=0 then
            Begin
              Application.MessageBox('服务器发生故障!',pchar(Application.Title),mb_iconwarning);
              Exit;
            end;
      

  3.   

    to  Erice(白雪公猪) ,中间层是 pooler + RDM + SQLConnection + SQLQuery + DataSetProvider 。你的意思是在 type libary 里面定义 IPooler 接口的一个方法?能不能详细讲一下?我对中间层不熟!是照搬 delphi7 pooler demo 的架构的!
      

  4.   

    clientdataset。COMMATEXT=‘UPDATE SET ’
    clientdataset。EXECUTE;