用过dbgrideh的朋友请进,有问题请教!

时间:2023-02-10 09:30:19
做东西遇到问题了

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是追加的还是覆盖的。。。。。。。。

也请大家帮帮忙吧。
搞定了请大家吃饭呢!


15 个解决方案

#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


嗯,我看看。3楼你不觉得太笼统了么。。。寒

#6


谢谢楼上的朋友们,也欢迎其他朋友帮忙了。

#7


引用 6 楼 shuaialang 的回复:
谢谢楼上的朋友们,也欢迎其他朋友帮忙了。
我只是告诉了你一个方向,具体的需要自己去查看具体控件的用法!

#8


2,数据导入
  我是这样做的:
  //检查SQLSERVER数据库中有没有[EXCEL人员表#]没有则建立 
  //ACCESS数据库连接

  //Sessions.Sessions[0].Databases[0].Params.Values[]  
    //BDE会话,获取当前连接数据库控件的信息

  //导入到SQLSERVER中临时表

  //列出不能导入的人员信息

 //去重复检查

 //把信息增加到要导入的表(EXCEL人员表# --> 要导入的表)


  

#9


引用楼主 shuaialang 的回复:
做东西遇到问题了

1.dbgrideh的checkbox问题。。。。我百度使用了数据库新增bit列,但是在全选,反选的时候,发现操作很慢
Delphi(Pascal) codeprocedure Tmain.RzToolButton5Click(Sender: TObject);var
ICount,I:Integer;begin
ADOQuery1.First;
Icount:=DbGrideh1.DataSource.DataSet.RecordCount;
    For I:=0to Icount-1dobegin
      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是追加的还是覆盖的。。。。。。。。

也请大家帮帮忙吧。
搞定了请大家吃饭呢!


其实,不使用原生的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

#10


关注

#11


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

#12


接分~~~

#13


用过,不过没做过全选反选
学习一下

#14


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

#15


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


此方法就不错啊。

#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


嗯,我看看。3楼你不觉得太笼统了么。。。寒

#6


谢谢楼上的朋友们,也欢迎其他朋友帮忙了。

#7


引用 6 楼 shuaialang 的回复:
谢谢楼上的朋友们,也欢迎其他朋友帮忙了。
我只是告诉了你一个方向,具体的需要自己去查看具体控件的用法!

#8


2,数据导入
  我是这样做的:
  //检查SQLSERVER数据库中有没有[EXCEL人员表#]没有则建立 
  //ACCESS数据库连接

  //Sessions.Sessions[0].Databases[0].Params.Values[]  
    //BDE会话,获取当前连接数据库控件的信息

  //导入到SQLSERVER中临时表

  //列出不能导入的人员信息

 //去重复检查

 //把信息增加到要导入的表(EXCEL人员表# --> 要导入的表)


  

#9


引用楼主 shuaialang 的回复:
做东西遇到问题了

1.dbgrideh的checkbox问题。。。。我百度使用了数据库新增bit列,但是在全选,反选的时候,发现操作很慢
Delphi(Pascal) codeprocedure Tmain.RzToolButton5Click(Sender: TObject);var
ICount,I:Integer;begin
ADOQuery1.First;
Icount:=DbGrideh1.DataSource.DataSet.RecordCount;
    For I:=0to Icount-1dobegin
      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是追加的还是覆盖的。。。。。。。。

也请大家帮帮忙吧。
搞定了请大家吃饭呢!


其实,不使用原生的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

#10


关注

#11


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

#12


接分~~~

#13


用过,不过没做过全选反选
学习一下

#14


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

#15


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


此方法就不错啊。