通过线程读取数据到DBGrid时不正常显示!!!!!!!!!
由于数据比较多,
如果不用线程来读取则会出现界面长时间假死的状态,非常不爽,
用线程后会出现一些奇怪的现象:
调用线程后,DBGrid会闪一下,然后要拖动滚动条才可以看到显示不正常的数据;
具体表现为: 列宽不对/很多区域为空白,好像没有数据一样,
如果不用线程来读取则会出现界面长时间假死的状态,非常不爽,
用线程后会出现一些奇怪的现象:
调用线程后,DBGrid会闪一下,然后要拖动滚动条才可以看到显示不正常的数据;
具体表现为: 列宽不对/很多区域为空白,好像没有数据一样,
// 线程类的定义与实现:
type
TLoadDataThrd = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
procedure SetGridWidth;
public
adoConn : TADOConnection;
SQLString:WideString;
DBGridTemp:TDBGrid;
adsData:TADODataSet;
dsData:TDataSource;
end;
{ TLoadDataThrd }
procedure TLoadDataThrd.SetGridWidth;
var
i : integer;
begin
for i := 0 to DBGridTemp.Columns.Count-1 do
begin
DBGridTemp.Columns[i].Width := 70;
end;
end;
procedure TLoadDataThrd.Execute;
begin
adsData.Close;
adsData.Connection := adoConn;
adsData.CommandText := SQLString;
try
adsData.Open;
if adsData.Active then
begin
SetGridWidth;// 虽然此处调用了此函数来设置Grid列宽度,但是最后显示出的宽度根本不正确!
end;
finally
end;
end;
// 在窗口类中实现调用线程
{TfrmData}
//function TfrmData.getSQLCmd:WideString; // 获取 sql语句的函数,返回如:select * from .....
// adoConn1:TAdoConnection;
// DBGridTest:TDBGrid;
// adsTest:TADODataSet;
// dsTest:TDatasource;
function TfrmData.RunThread(adoConnTemp:TADOConnection; SQLString : widestring;
DBGridTemp:TDBGrid; adsTemp: TADODataSet; dsTemp : TDataSource): TLoadDataThrd;
var
loadThread:TLoadDataThrd;
begin
loadThread := TLoadDataThrd.Create(True);
loadThread.adoConn := adoConnTemp;
loadThread.DBGPM := DBGridTemp;
loadThread.adsData := adsTemp;
loadThread.dsData := dsTemp;
loadThread.SQLString := SQLString;
loadThread.Resume;
Result := loadThread;
end;
// 此处调用线程取数据库数据
procedure TfrmData.btnSearchClick(Sender: TObject);
begin
RunThread(adoConn1,getSQLCmd,DBGridTest,adsTest,dsTest);
end;
...全文
相关推荐
delphi动态配置DBgrid列显示类
delphi dbgrid+clientdataSet实现的动态配置dbgrid显示列类,输入一个xml文件,单保存即可把dbgrid中所有列保存到xml中,还可以拖动,修改是否显示,显示宽度。
Delphi中DBGrid数据分行/拆行/多行显示
Delphi中DBGrid数据分行/拆行/多行显示
Delphi 改变DBgrid控件选中时的单元格颜色.rar
Delphi 改变DBgrid控件选中时的单元格颜色,一般在默认状态下,DBgrid在行被选中时是深蓝色的,本程序将改变这个深蓝色为用户自定义颜色。操作方法很简单:当选中DBgrid任意行时,点击上部的任意颜色值,此时就已经将DBGrid控件的选中行颜色改变为用户选中的颜色。
Delphi 在 DBGrid 里面显示分组统计的源代码
Delphi程序在 DBGrid 里面显示分类统计,也就是小计。用 ClientDataSet 的 TAggregateField 的方法,也可以用 DBGridEh。本程序演示了这两种方法。
DBGrid+Access分页显示
access数据库有三万多条记录,全部显示太费时间,也不便于查看 分页显示就是一页显示一定数目的记录,不要一次全部显示出来 做一次显示20条记录,点击一个按钮后显示下一个20条记录 即可以实现"第一页" "下一页" "上一页" "最后一页"的翻滚数据记录功能


数据库相关
