要在数据库里面插入一批的数据,现在是每一条数据一条insert然后若干条insert一起发送到Adoquery去执行。感觉这样做的效率不高,不知道还有没有更好的方案?

解决方案 »

  1.   

    看看下面的贴子,里面是用C++描述的,不过跟Delphi没啥区别。
    http://community.csdn.net/Expert/topic/4098/4098581.xml?temp=.6427118
      

  2.   

    有啊,用批处理,
    try
    ADOConnection1.BeginTrans;
    //写Adoquery.Insert或者Append;
    ADOConnection1.CommitTrans;
    except
    ADOConnection1.RollbackTrans;//更新失败时。
    end;
      

  3.   

    xbx21th(xbx21th):现在我用的方式就是这种
     unsigned:不知道BCP这种要怎么调用呢?查了一下联机从书,看到里面的一个例子的地址,可是我发现我能找得到的机子上都没有这个。不知道你可否提供一个呢?
    谢谢各位
      

  4.   

    有啊,用批处理,
    try
    ADOConnection1.BeginTrans;
    //写Adoquery.Insert或者Append;
    ADOConnection1.CommitTrans;
    except
    ADOConnection1.RollbackTrans;//更新失败时。
    end;
      

  5.   

    想快,自己写SQL语句然后插入最快>>回复人: kiboisme(蓝色光芒) ( ) 信誉:103  2005-07-05 13:04:00  得分: 0  
    >>支持楼上,>>如果还是不行,就使点劲
    要使劲也要对得准才行^_^
      

  6.   

    现在我用的方法就是
    try
    ADOConnection1.BeginTrans;
    //写Adoquery.Insert或者Append;
    ADOConnection1.CommitTrans;
    except
    ADOConnection1.RollbackTrans;//更新失败时。
    end;但是感觉速度上还是不够,所以才问的。
    SQL也分块了,若干条记录执行一次。
      

  7.   

    能不能给个例子说明一下怎么把SQL分块啊! 小弟急需!
      

  8.   

    现在我用的方法就是
    try
    ADOConnection1.BeginTrans;
    //写Adoquery.Insert或者Append;
    ADOConnection1.CommitTrans;
    except
    ADOConnection1.RollbackTrans;//更新失败时。
    end;但是感觉速度上还是不够,所以才问的。
    SQL也分块了,若干条记录执行一次。
    ;============================================
    这样子其实在ADOQuery.Insert/Append当中是很费时的,另外甚至是ADOQuery.SQL.Add这个都显得很费时。
    最好在这一过程当中还是直接对ADOQuery.SQL.Text赋值,然后调用ExecSQL方法,不过这个样子还是不及ADOCommand。当然如果是MSSQL的话可以试着使用偶在一楼提到的多个Insert语句批次提交滴方法,那样子会快很多,不过通常建议不要超过1000条/次,若是数据量比较大可以相应减少一点。比如500,而对于其它数据库还是最好能找到其多条语句传输的方法比较合理。