如题
是从视图中读取的数据,谢谢各位了
代码如下
rocedure Tydsk.DBGrid1CellClick(Column: TColumn);
begin
   listbox1.Items.Clear;
   with Adoquery2 do
   begin
   close;
   sql.Clear;
   sql.Add('select kfcode from yd_query where lxname='''+dbgrid1.SelectedField.DisplayText+'''');   open;
   end;
   while not Adoquery2.Eof do
   begin
   listbox1.Items.Add(Adoquery2.FieldByName('kfcode').AsString);
   Adoquery2.Next;
   end;
end;

解决方案 »

  1.   

    应该不是listbox慢,你测试一下视图的查询速度再说。应该是视图的问题。
      

  2.   

    用onData写写看。
    还有就是BeginUpdate和EndUpdate(TStrings类的)
      

  3.   

    在while not Adoquery2.Eof do之前加
    Adoquery2.First
      

  4.   

    begin
       listbox1.Items.Clear;
       with Adoquery2 do
       begin
       close;
       sql.Clear;
       sql.Add('select kfcode from yd_query where lxname='''+dbgrid1.SelectedField.DisplayText+'''');   open;
       first;
       while not Eof do
       begin
       listbox1.Items.Add(FieldByName('kfcode').AsString);
       Next;
       end;   end;
       end;
      

  5.   

    具我观察好象是在
     sql.Add('select kfcode from yd_query where lxname='''+dbgrid1.SelectedField.DisplayText+'''');   open;
    这两个步骤很慢,不知道怎么解决
      

  6.   

    open执行SQL
    当然了,毕竟是从硬盘中读取数据阿
    你可以想一下别的办法补救,比方说加一个进度条
    让客户知道进度就不会觉得慢了,5秒钟,无所谓的
      

  7.   

    如果你的query控件只是用来顺序取kfcode到listbox的话,你可以考虑修改query的cursortype和locktype这两个属性
      

  8.   

    listbox1.Items.BeginUpdate;
       while not Adoquery2.Eof do
       begin
         listbox1.Items.Add(Adoquery2.FieldByName('kfcode').AsString);
         Adoquery2.Next;
       end;
       listbox1.Items.EndUpdate;