在批处理模式下.
我向库中增加N条记录(使用insert,然后adoquery.execute),最后调用adoquery.UpdateBatch()方法提交数据.提示说不能在关闭的数据集(adoquery)上执行该操作.
是不是执行了adoquery.execute方法后数据集就立即关闭了呢?怎么上面的问题(即用execute增加数据,不是append方法?

解决方案 »

  1.   

    噢,如果,insert语句也是使用adoquery,那么insert之后,要重新写adoquery的sql语句为select ....,然后打开,再执行upodateBatch,
    如果使用的临时query,adoquery的sql语句没有改变,则直接打开adoquery就可以了
      

  2.   

    大家先看看我的想法对不对程序段的目的是把access(用adoqAcs连接)中的数据导进mssql(adoqSql连接),为了避免和服务器的频繁通信.我想使用批处理方式,即先在客户端把adoqAcs中的数据导入adoqSql中,然后再调用adoqSql.updatebatch()方法提交数据到服务器.
    我现在怀疑这个做法能增加效率吗?因为调用updaebatch方法后,数据不还是要一条条写进sql数据库吗,并不能减少网络数据流量.与不使用处理方式导入数据效果一样的.(我的理解对吗?)不管能不能增加效率,假如非要使用批处理方法.但下面程序段在没有调用updatebatch之前就已经导入了sql数据库了,高手帮我看看哪儿设置(写)错了设置:adoqSql的cursortype为keyset,locktype为batchoptimistic 其它没特殊设置
    adoqAcs没有特殊设置.
    简写程序:sql:='select * from accessTable';
    adoqAcs.Close;
    adoqAcs.CommandText :=sql;
    adoqAcs.Open;
    while not adoqAcs.Eof do
      begin
            adoqSql.Close;
            adoqSql.SQL.Clear;
            strInsert:='insert into sqlTable(Field1,Field2) values(:Val1,:val2)';
            adoqSql.SQL.Add(strInsert);
            adoqSql.Parameters.ParamByName('val1').Value :=adoqAcs.fieldbyname('f1').Value);
            adoqSql.Parameters.ParamByName('val2').Value :=adoqAcs.fieldbyname('f2').Value);      
            adoqSql.ExecSQL ;
            adoqSql.Next;
      end;还有一按钮调用提交方法:adoqSql.updatebatch() //还有调用我发现数据已经写进mssql数据库了罗嗦比较多.大家耐心点.
    我已经调了一下午了.再加点分吧