我现在用下面的方法来修改表中的AA字段,但速度很慢,处理1万条数据要2小时.
(BDE+Sybase11.5)  for i := 0 to Table1.RecordCount - 1 do
   begin
    Table1.Edit;
    Table1.FieldByName('AA').AsString:=aid[i];
    Table1.Post;
    Table1.Next;
   end; 有什么好的方法吗?
还有,存储过程在这里有用吗?(因为朋友跟我说用存储过程)

解决方案 »

  1.   

    WITH Table1 DO
      BEGIN
        IF NOT EOF THEN
        BEGIN
          EDIT;
          FIELDBYNAME('AA').ASSTRING:=AID[RECNO-1];
          POST;
          NEXT;
        END;
      END;
      

  2.   

    在调用循环之前
    table1.DsableControls;
    在循环之后
    table1.EnableControls;应该可以快些
      

  3.   

    table1.DsableControls;
     for i := 0 to Table1.RecordCount - 1 do
     begin
       Table1.Edit;
       Table1.FieldByName('AA').AsString:=aid[i];
       Table1.Next;
     end; 
     Table1.Post; 
     table1.EnableControls;
      

  4.   

    WITH Table1 DO
      BEGIN
       WHILE NOT EOF DO
        BEGIN
          EDIT;
          FIELDBYNAME('AA').ASSTRING:=AID[RECNO-1];
          POST;
          NEXT;
        END;
      END;
      

  5.   


    应该自己构造SQL语句,直接ExecSql是最快的.
    甚至可以构造一个更新多条记录的SQL,更快一些.
      

  6.   

    同意楼上的,用sql 语句快
      

  7.   

    你的更新动作用传 SQL 语句的方式应该会快些,事实上你那种方式也是通过SQL更新,只是这个SQL语句是由DELPHI控件产生,如果自己手动生成的话会更快。
      

  8.   

    你的更新动作用传 SQL 语句的方式应该会快些,事实上你那种方式也是通过SQL更新,只是这个SQL语句是由DELPHI控件产生,如果自己手动生成的话会更快。
      

  9.   

    table1.DisableControls;   //   ???
    如果DisableControls了,其他用户还可以操作这个数据表吗?
    HELP里是这样说的:
    Usually DisableControls is called within the context of a try...finally block that reenables the controls even if an exception occurs. 
    水平有限,请高手帮忙一下
      

  10.   

    所以与这个 Table 联的数据感知控件如 DBEdit 等,不会自动刷新数据。但后台表可以给其它用户使用。
      

  11.   

    还是用adoquery好一点了
    用sql 比较快一点了
      

  12.   

    用SQL语句‘update table set field = newvalue where ...’最好
      

  13.   


      请问ado怎样连接Sybase,不要告诉我是用ODBC连.如果能用ADO就好啦
      

  14.   

    不知你用的是DELPHI的哪个版本,我用DBEXPRESS连数据库,数据更新很快。