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实时感知会快不少。
try
修改操作
finally
EnableControls;
end;
全选的时候不要让DBGridEh实时感知会快不少。
#5
嗯,我看看。3楼你不觉得太笼统了么。。。寒
#6
谢谢楼上的朋友们,也欢迎其他朋友帮忙了。
#7
我只是告诉了你一个方向,具体的需要自己去查看具体控件的用法!
#8
2,数据导入
我是这样做的:
//检查SQLSERVER数据库中有没有[EXCEL人员表#]没有则建立
//ACCESS数据库连接
//Sessions.Sessions[0].Databases[0].Params.Values[]
//BDE会话,获取当前连接数据库控件的信息
//导入到SQLSERVER中临时表
//列出不能导入的人员信息
//去重复检查
//把信息增加到要导入的表(EXCEL人员表# --> 要导入的表)
我是这样做的:
//检查SQLSERVER数据库中有没有[EXCEL人员表#]没有则建立
//ACCESS数据库连接
//Sessions.Sessions[0].Databases[0].Params.Values[]
//BDE会话,获取当前连接数据库控件的信息
//导入到SQLSERVER中临时表
//列出不能导入的人员信息
//去重复检查
//把信息增加到要导入的表(EXCEL人员表# --> 要导入的表)
#9
其实,不使用原生的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
有详细代码
http://blog.csdn.net/suiyunonghen/archive/2009/05/21/4207564.aspx
有详细代码
#12
接分~~~
#13
用过,不过没做过全选反选
学习一下
学习一下
#14
全选的时候可不可以用update语句更新呢,然后再refresh一下,显示实时的状态。
#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实时感知会快不少。
try
修改操作
finally
EnableControls;
end;
全选的时候不要让DBGridEh实时感知会快不少。
#5
嗯,我看看。3楼你不觉得太笼统了么。。。寒
#6
谢谢楼上的朋友们,也欢迎其他朋友帮忙了。
#7
我只是告诉了你一个方向,具体的需要自己去查看具体控件的用法!
#8
2,数据导入
我是这样做的:
//检查SQLSERVER数据库中有没有[EXCEL人员表#]没有则建立
//ACCESS数据库连接
//Sessions.Sessions[0].Databases[0].Params.Values[]
//BDE会话,获取当前连接数据库控件的信息
//导入到SQLSERVER中临时表
//列出不能导入的人员信息
//去重复检查
//把信息增加到要导入的表(EXCEL人员表# --> 要导入的表)
我是这样做的:
//检查SQLSERVER数据库中有没有[EXCEL人员表#]没有则建立
//ACCESS数据库连接
//Sessions.Sessions[0].Databases[0].Params.Values[]
//BDE会话,获取当前连接数据库控件的信息
//导入到SQLSERVER中临时表
//列出不能导入的人员信息
//去重复检查
//把信息增加到要导入的表(EXCEL人员表# --> 要导入的表)
#9
其实,不使用原生的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
有详细代码
http://blog.csdn.net/suiyunonghen/archive/2009/05/21/4207564.aspx
有详细代码
#12
接分~~~
#13
用过,不过没做过全选反选
学习一下
学习一下
#14
全选的时候可不可以用update语句更新呢,然后再refresh一下,显示实时的状态。
#15
此方法就不错啊。