组件是ADOTABLE,其属性设置是
       ConnectionString := 'DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;DATABASE=bom;USER=root;PASSWORD=111111;OPTION=3';
       CursorLocation := clUseClient;
      CursorType := ctKeyset;
      MarshalOptions := moMarshalModifiedOnly;
      CacheSize := 1000;
部分代码如下
with TParam4007(FBaseParam),tbl_prm4007 do
        begin
          BeforeCount:= RecordCount;
          for i := 0 to ParamMultiRec.Count - 1 do
          begin
            GetOneMultiRec(i);
            Append;
            FieldByName('VERSION_NO').AsInteger := VersionNo;
            FieldByName('TICKET_TYPE').AsWideString := IntToHex(TicketType, 2);
            FieldByName('TICKET_ID').AsWideString := IntToHex(TicketId, 8);
            FieldByName('REJ_MODE').AsInteger := RejMode;
            FieldByName('LAST_TIME').AsWideString := FormatDateTime('yyyymmddhhnnss',Now);
          end;
          Result := RecordCount + 1 - BeforeCount = ParamMultiRec.Count;
          if Result then
            UpdateBatch(arAll);
          else
            CancelBatch(arAll);
        end;
就是不知道速度这么慢,插入2000条需要60秒,请高手指点!

解决方案 »

  1.   

    mysql没有用过,但是60秒是有点慢,你将append这种方式改成sql语句(insert into)然后用绑定变量来实现,看看速度是多少。
      

  2.   

    肯定慢啦.我添加一万条记录都不用这么慢. 你老老实实使用SQL语句添加吧.速度快很多的.
      

  3.   

    CursorType := ctKeyset;换成CursorType := ctStatic;另外加上 LockType := ltBatchOptimistic;试试
      

  4.   

    CursorType := ctKeyset; 加上 LockType的属性默认值是ltOptimistic 这样其实就是一条一条记录往数据库里面提交
    (在你append的时候,上一条记录就会向数据库进行提交)
      

  5.   

    GetOneMultiRec(i); 
    这个函数效率估计不高
      

  6.   

    用 Insert 语句写吧,这样会快不少 . 
      

  7.   

    关键还是调试下 看慢在哪里。
    一般前台操作数据 都要 ADOTABLE.DisableControls 完了再 ADOTABLE.EnableControls;
      

  8.   

    难道楼主都不看手册的吗?仔细看看7.2.19. Speed of INSERT Statements部份吧,2000条用不了1秒的
      

  9.   

    你的表创建了索引没?如果有应该没这么慢的。
    另外在更新时将可视的数据控件DisableControls;更新完后再EnableControls,这样也能提高速度。
      

  10.   

    这样不慢才怪呢,你在For语句中去做数据库的操作!