在导入很多数据的时候, 窗口一般会处于假死状态, 此过程中, 如何在某一个地方显示 已导入 xxx条 信息...没多少分了, 谢谢每一位路过和回帖的前辈!!

解决方案 »

  1.   

    我是搜到用 Form1.refresh 强制刷新, 似乎暂时可以
    线程导入, 可有什么例子吗. 谢谢
      

  2.   

    用线程导入或者用最简单的进度条ProgressBar
      

  3.   

    用线程不会卡,导入的时候记录下已导入的条数,然后设置进度条进度,或者通过设置一个label的caption来显示处理条数
      

  4.   

    如果你觉得线程麻烦,可以这样做:
    label1.caption := '正在处理……';
    for i := 1 to 2000 do
    begin
      label1.caption := '处理中,' + x + '/2000';
      qry.sql.claer;
      qry.sql.add('insert ...');
      qry.execsql;
      application.processmessages;
    end;
      

  5.   

    在代码中用加上Application.ProcessMessages应该可以
    但最好是用线程
      

  6.   

    进度条的话, 是不是必须事先知道总数?
    问题是我的导入数据量是必须一条一条读取判断后才知道这条记录合不合格, 在整个导入的文件都遍历一次后, 才能得到需要导入的总数, 所以用进度条应该不合适了那看来高级点的只能用线程导入, 哪位前辈可有例子学习学习呀. 谢谢
    对于简单的界面, 导入过程中, 不需要进行拖动或者其他操作的, 用 .refresh 就可以了
    简单点的, 只好用 label1.refresh 了
      

  7.   

    循环内加一个application.processmessages;可以借助windows自己去释放资源,这样就不会卡死了,还能看到进度条,如:
          while not Eof do
          begin
            vTempChildNodeL := cxTL_Main.AddChild(_TempParentNodes);
            vTempChildNodeL.Values[cxTL_Col_SubCode.ItemIndex] := FieldByName('SubjectCode').AsString;
            vTempChildNodeL.Values[cxTL_Col_SubName.ItemIndex] := FieldByName('SubjectName').AsString;
            vTempChildNodeL.Values[cxTL_Col_SubPlan.ItemIndex] := FieldByName('vM_SubIn').AsFloat;
            vTempChildNodeL.Values[cxTL_Col_SubOut.ItemIndex]  := FieldByName('vM_SubOut').AsFloat;
            vTempChildNodeL.ImageIndex := 2 ;
            vTempChildNodeL.SelectedIndex := 3 ;   
            v_TempPlan := v_TempPlan + FieldByName('vM_SubIn').AsFloat;
            v_TempOut  := v_TempOut  + FieldByName('vM_SubOut').AsFloat;
            Application.ProcessMessages;//这里可以释放资源
            Next;
          end;