L
LJH1978
Unregistered / Unconfirmed
GUEST, unregistred user!
界面上的字段为自动生成,为了达到数据的3NF,字段的实际值为代码,显示值为字符
如地区代码 "110104" 显示为 "北京市宣武区"我的具体做法是
在表的AfterOpen 事件中加入 FieldByName('名称').OnGetText :=NameOnGettext;//名称的获取显示的事件
procedure NameOnGetText(Sender :TField;Text :String; var DisplayText :Boolean );
var tb :TAdoDataSet; // 可以是一个共享的数据表,打开后不关闭;在这我就不创建了
begin
if DisplayText then
begin
tb.commandText :='select * from Table where 编号=' + Sender.dataset.FieldbyName ('编号').AsString;
tb.Open; //tb这个表可以放在一个公共的单元,在这里这打开会非常影速度
//打开后可以用定位的方法(Locate())获得属性,速度会比较快
Text :=sender.asString{原来的名称} + tb.规格 + tb.……
end;
end;
这样做能达到显示字符的目的,但一个要命的问题是,我这个软件中用了大量的代码,如地区,学历,职务等,
这样的话速度会非常慢,移动一条记录要1秒左右,别说用户受不了,自己感觉都实在太慢了,各位是如何解决这个问题的?
如地区代码 "110104" 显示为 "北京市宣武区"我的具体做法是
在表的AfterOpen 事件中加入 FieldByName('名称').OnGetText :=NameOnGettext;//名称的获取显示的事件
procedure NameOnGetText(Sender :TField;Text :String; var DisplayText :Boolean );
var tb :TAdoDataSet; // 可以是一个共享的数据表,打开后不关闭;在这我就不创建了
begin
if DisplayText then
begin
tb.commandText :='select * from Table where 编号=' + Sender.dataset.FieldbyName ('编号').AsString;
tb.Open; //tb这个表可以放在一个公共的单元,在这里这打开会非常影速度
//打开后可以用定位的方法(Locate())获得属性,速度会比较快
Text :=sender.asString{原来的名称} + tb.规格 + tb.……
end;
end;
这样做能达到显示字符的目的,但一个要命的问题是,我这个软件中用了大量的代码,如地区,学历,职务等,
这样的话速度会非常慢,移动一条记录要1秒左右,别说用户受不了,自己感觉都实在太慢了,各位是如何解决这个问题的?