我要把DBF的数据差异更新到SQL 数据库中的表中,也可以先删除再插入
不要分布式查询插入(opendatasource和openrowset),一条一条数据就插入太慢了。
各位大虾,有木有办法

解决方案 »

  1.   

    你是在Delphi里读取DBF文件, 然后写入MSSQL?
    ------------------------------------------------------------
    数据连接控件支持事务, 提交速度很快.如果是使用MSSQL脚本导DBF, 在导入前关闭数据库日志, 可以提高速度.
      

  2.   


    我用delphi的控件去读取DBF,然后再插入到SQL server里,但速度很慢。
    你的意思是添加个事务,速度可以加快吗
      

  3.   

    第一步,别管那么多,先用SQL语句将DBF表内容全部导入SQL中的临时表,第二步再数据差异更新,将临时表的数据有选择地插入新表中,这样效率高。
      

  4.   


    你的意思是添加个事务,速度可以加快吗
    --------------------------------

    var
      I: Integer;
    begin
    //方法1 使用事务
      con1.BeginTrans;
      try
        for I := 0 to 100 do
        begin
          qry1.SQL.Text := 'insert into Ta ...';
          qry1.ExecSQL;
        end;    con1.CommitTrans;
      except
        on E: Exception do
        begin
          con1.RollbackTrans;
          raise Exception.Create(e.Message);
        end;
      end;
    //方法2 MSSQL支持';'分隔, 可以拼接后提交, 如果数据量大, 可以考虑分段执行
      try
        qry1.SQL.Text := '';
        for I := 0 to 100 do
        begin
          qry1.SQL.Text := qry1.SQL.Text + 'insert into Ta ...;';    end;
        qry1.ExecSQL;  except on E: Exception do
        raise Exception.Create(e.Message);
      end;
    end;
      

  5.   

    嗯,谢谢两位。我想到方法了,每次更新后复制原来的DBF文件,在下次更新时就用要更新的数据DBF文件去跟上次复制的DBF的数据进行对比,然后差异的数据再插入到mssql的数据表中