我想使用原生ADO,使数据批量入库(比如新增一千条后在一次性插入数据库)。
最好能给出具体的例子!

解决方案 »

  1.   

    事務!
    開始一個事務,把要做的事情做完後.
    最後回來Commit
      

  2.   

    Var
      mConn, mRecordSet: Variant;
    begin
      mConn := ComObj.CreateOleObject('ADODB.Connection');
      mConn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=demo;Data Source=.';
      mRecordSet := CreateOleObject('ADODB.RecordSet');
      mConn.Open();
      mRecordSet.Open('select * from [Order] where 0=1', mConn, 1, 3);  mRecordSet.AddNew();
      mRecordSet.Fields('date') := '2005-1-1';
      mRecordSet.Fields('customer') := 'hydon lee';  mRecordSet.Update();
      mConn.Close();
    end;
      

  3.   

    hydonlee(青山情) 的做法可以 但是效率不高,用事务 如果其中一条插入失败,那它后面的也将无法执行
      

  4.   

    我现在有一个高效做法,但是问题是 如果其中一条错误,后面正确的SQL语句将不能执行
      

  5.   

    for i := 0 to 800 do
        begin
          if i=0 then
          s := #13#10' insert into PlanetData(VehicleSN,SystemTime,IsNavigation,PlanetTime,'
              +'Longitude,Latitude,Speed,Direction,EnterArea,LeaveArea,AreaName,SmallLongitude,BigLongitude,'
              +'SmallLatitude,BigLatitude,AreaOverSpeed,OverSpeed,Alert,CutElectricity,LowerVoltage,'
              +'ConnectedElectricity,LoadedOn,PowerOn)'
          else
           s := #13#10' insert into PlanetData(VehicleSN,SystemTime,IsNavigation,PlanetTime,'
              +'Longitude,Latitude,Speed,Direction,EnterArea,LeaveArea,AreaName,SmallLongitude,BigLongitude,'
              +'SmallLatitude,BigLatitude,AreaOverSpeed,OverSpeed,Alert,CutElectricity,LowerVoltage,'
              +'ConnectedElectricity,LoadedOn,PowerOn)';
          ms.Write(s[1], length(s));      s := ' values(';
          ms.Write(s[1], length(s));      s := '1';
          ms.Write(s[1], length(s));
          s := ',';
          ms.Write(s[1], length(s));      s := QuotedStr(FormatDateTime('YYYY-MM-DD HH:NN:ss.zzz', now - i));
          ms.Write(s[1], length(s));
          s := ',';
          ms.Write(s[1], length(s));      s := '1';
          ms.Write(s[1], length(s));
          s := ',';
          ms.Write(s[1], length(s));      s := QuotedStr(FormatDateTime('YYYY-MM-DD HH:NN:ss.zzz', now));
          ms.Write(s[1], length(s));
          s := ',';
          ms.Write(s[1], length(s));
          s:='123.11,145.12,10,40,1,1,''jkjkj'',11.45,178.12,178.12,178.12,' ;
          ms.Write(s[1], length(s));      for j := 1 to 7 do
          begin
            s := '1';
            ms.Write(s[1], length(s));
            s := ',';
            ms.Write(s[1], length(s));
          end;      s := '1';
          ms.Write(s[1], length(s));      s := ')';
          ms.Write(s[1], length(s));
          end;   setlength(s, ms.size);
        ms.Position := 0;    ms.Read(s[1], ms.Size);
        try
          ADOCMain.Execute(s);
        except
          //
        end;这样一次可以插801条数据效率很高 ,但如果中间有一条数据失败后面的就插不了,大家看看有什么办法
      

  6.   

    將ADO的LockType屬性設置成ltBatchOptimistic
    該屬性可控制你插入完數據後最后UpdateBatch更新到后臺數據庫
    不知這樣可否!
      

  7.   

    这么多数据,建议事务处理.
    UpdateBatch
    CommitTrans
      

  8.   

    jrcn(梦里寻软) ( )  不行如果那样做效率低 因为用到 ADO.Append 所以很慢ztj007(田囝)  用 CommitTrans 根本不行 如果这么做的话中间有一条插入失败 那将很多数据丢失。
      

  9.   

    一条一条的执行sql语句,不知道速度是否会快些
      

  10.   

    yuehaiyang() ( ) 一条条来 慢了几个数量级 效率不行
      

  11.   

    jrcn(梦里寻软)  我现在入库效率不行 每分钟要向数据库写四万条数据,如果写不了,就有数据丢失,入库以后怎么做 下一部讨论。
      

  12.   

    GPS服务器  如果把保存到文件中,那效率就会降低