我有一个500条记录的数据库,序号从1到500,且用dbgrid显示出来,现要在中间插入一条记录。我用下面方法时速度很慢。
    close;
    sql.Clear;
    sql.Add('select * from '+tabname+'');
    sql.Add('order by 序号');
    open;
然后插入一条时,还要将后面的序号加1再排序速度好慢,而且当在最前面插入一条再修改
memo字段(.dfb表)时报错:Invalid BLOB handle in record buffer
希望那位兄弟帮帮我,还有没好的方法。

解决方案 »

  1.   

    Var
      Tstr:string;
    begin
       with ADOquery1 do 
          begin
            active:=False;
            sql.clear;
            sql.add('select * from table ');
            sql.add('order by 序号');
            active:=open;
            if RecordCount>0 Then     //取出最后一条记录加上1
                begin
                  Last;
                  Tstr:=inttostr(strtoint(FieldValues['序号'])+1);
                end;
      else
          begin
            Tstr:='10001'; 
            Append;
            FieldValues['bh']:=Tstr;
          end;
      end;
    end;
      

  2.   

    Var
      Tstr:string;
    begin
       with ADOquery1 do 
          begin
            active:=False;
            sql.clear;
            sql.add('select * from table ');
            sql.add('order by 序号');
            active:=open;
            if RecordCount>0 Then     //取出最后一条记录加上1
                begin
                  Last;
                  Tstr:=inttostr(strtoint(FieldValues['序号'])+1);
                end
            else  
                Tstr:='10001'; 
                Append;
                FieldValues['序号']:=Tstr;
         end;
    end;
      

  3.   

    一定要select * from table 可以加where 条件?
    还有你没用adoquery.locktype:=ltBatchOptimistic;
    用adoquery.insertrecord
    在用updatebatch 试试
    另:ych121 是春华吗?偶是yang.
      

  4.   

    我用的是foxpro数据库,用Query组件,我不是春华