做东西遇到问题了1.dbgrideh的checkbox问题。我百度使用了数据库新增bit列,但是在全选,反选的时候,发现操作很慢procedure Tmain.RzToolButton5Click(Sender: TObject);
var
ICount,I:Integer;
begin
ADOQuery1.First;
Icount:=DbGrideh1.DataSource.DataSet.RecordCount;
    For I:=0 to Icount-1 do begin
      ADOQuery1.Edit;
      ADOQuery1.FieldByName('CheckBox').Text:='True';
      ADOQuery1.Post;
      ADOQuery1.Next;
    end;
end;
显然 大数据量的时候,做全选会很麻烦。不知道到哥哥姐姐们有什么方法,求指点。最好是能让DBGRIDEH有个checkbox,不读取数据库。类似原生checkbox那样                if XXX:=true没有的话,是否能给个高效率的思路或者代码更好!2.dbgrideh如何导入一个excel呢。就是把dbgrideh导出的excel再导入回去。同时问题也来了。不知道他的导入到dbgrideh是追加的还是覆盖的。。也请大家帮帮忙吧。
搞定了请大家吃饭呢!

解决方案 »

  1.   


    uese
    DBGridEhImpExp;
    这个单元中有一个函数SaveDBGridEhToExportFile,自己研究一下吧
      

  2.   


    这几个函数估计够你用了,导入导出都有了
    procedure SaveDBGridEhToExportFile(ExportClass: TDBGridEhExportClass;
      DBGridEh: TCustomDBGridEh; const FileName: String; IsSaveAll: Boolean);
    procedure WriteDBGridEhToExportStream(ExportClass: TDBGridEhExportClass;
      DBGridEh: TCustomDBGridEh; Stream: TStream; IsSaveAll: Boolean);procedure LoadDBGridEhFromImportFile(ImportClass: TDBGridEhImportClass;
      DBGridEh: TCustomDBGridEh; const FileName: String; IsLoadToAll: Boolean);
    procedure ReadDBGridEhFromImportStream(ImportClass: TDBGridEhImportClass;
      DBGridEh: TCustomDBGridEh; Stream: TStream; IsLoadToAll: Boolean);
      

  3.   

    1.使用内存表: ClientDataSet
      

  4.   

        DisableControls;
        try
          修改操作
        finally
          EnableControls;
        end;全选的时候不要让DBGridEh实时感知会快不少。
      

  5.   

    2,数据导入
      我是这样做的:
      //检查SQLSERVER数据库中有没有[EXCEL人员表#]没有则建立 
      //ACCESS数据库连接  //Sessions.Sessions[0].Databases[0].Params.Values[]  
        //BDE会话,获取当前连接数据库控件的信息  //导入到SQLSERVER中临时表  //列出不能导入的人员信息 //去重复检查 //把信息增加到要导入的表(EXCEL人员表# --> 要导入的表)
      
      

  6.   


    其实,不使用原生的checkbox也是可以的,速度也不会慢,可能是处理的不好,所以会造成速度很慢,我感觉
    只要数据没有几万行,速度应该不会感觉怎么慢;楼上有位朋友已经说了不部分了,我下面再补充一下吧:1、让感知控件和数据集脱离,完成后在恢复,这个很重要;    ADOQuery.DisableControls; 
        try 
          //你原来的代码 
        finally 
          ADOQuery.EnableControls; 
        end;2、暂时关闭影响ADOQuery速度的几个事件,完成后恢复,思路同第一个,比如:AfterScroll事件等,比较影响速度;
        ADOQuery.DisableControls; 
       ADOQuery.AfterScroll := nil;
        try 
          //你原来的代码 
        finally 
          ADOQuery.EnableControls; 
          ADOQuery.AfterScroll := ADOQueryAfterScroll;
        end;  如果还有其他事件处理是一样的。
    如果不明白可以加入QQ高级群:9642802
      

  7.   

    楼主请看
    http://blog.csdn.net/suiyunonghen/archive/2009/05/21/4207564.aspx
    有详细代码
      

  8.   

    全选的时候可不可以用update语句更新呢,然后再refresh一下,显示实时的状态。