首先要有一个结构相同的数据库
adodataset1.locktype:=ltbatchoptimistic
///////////
adoconnection1.open
adodataset1.connection:=adoconnection;
adodataset1.open;
//////////////
adodataset1.updatebatch;

解决方案 »

  1.   

    我试了,可还是不行啊
        DesConnection.Close;
        DesDataSet.LockType:=ltBatchOptimistic;
        DesDataSet.LoadFromFile('example.xml');
        DesConnection.Open;
        DesDataSet.Open;
        DesDataSet.UpdateBatch;
      

  2.   

    mr_wn (法师)  :对你的问题补充回答如下
    1:使用 batchoptimistic模式只能删除和修改记录,但不能添加记录。这是因为
    ado在更新时需要首先查询数据库中的索引字段以定位记录。
       如果你只对记录进行删除和修改操作,上述方法没有问题,若仍有问题,请提出
    2:如果要添加记录,可以进行下面的变通处理
    a:设计阶段
        adoconneciton1
        adodataset1         
          connection:=adoconnection1 
          commandtext='select yourfields from you table'(一定要包含主索引字段和要求非空的字段)
          active:=true
        adodataset2
          connection:=adoconnection1
          LockType:=ltBatchOptimistic;
     
    b:使用adodataset2.loadfromfile方法加载xml文件c:////查找新添加的记录,实际添加之
    procedure TForm1.Button2Click(Sender: TObject);
    var i:integer;
    begin
    try
      adoconnection1.BeginTrans;
      while not adodataset2.Eof do
      begin
      if not (adodataset1.Locate(索引字段名,adodataset2.fieldbyname(索引字段名).value,[loCaseInsensitive]  ) ) then
        begin
          adodataset1.Append;
          for i:=0 to   adodataset1.FieldCount-1 do
            adodataset1.Fields[i].value:=adodataset2.Fields[i].value;
          adodataset1.Post ;
        end;
      adodataset2.next;
      end;
    /////////////
      adodataset2.UpdateBatch ;
      adoconnection1.CommitTrans;
      showmessage('更新完成');
    except
      adoconnection1.RollbackTrans ;
    end;
    end;
    ///////////
    这样处理以后应该没有问题,我已作过测试了