小问题-大分数(不够再加)
大家都知道在field-editer中可以增加数据源中所有的字段对象,并且可以追加新的字段,以便产生计算字段和查找字段,但是这些者是通过field-editer完成的。现在由于我的数据源是动态通过SQL产生的.所以我想在代吗中增加数据源中所有的字段对象,并且可追加新的字段,(达到象field-editer中那样的效果),是否可以实现???
我现在的问题是无法在代吗中增加新的字段,(然后使用选则原字段目标字段,和结果字段的功能),如果在代码中无法动态实现追加新的字段,那我如何动态实现以上的功能???
问题点数:100、回复次数:13Top
1 楼zhangpeigao(东部一绝)回复于 2002-05-18 14:07:38 得分 0
可以通过重组select 语句中的字段数
如:select AAA,BBB,CCC,AAA+BBB DDD from table1Top
2 楼sogh(青山之音)回复于 2002-05-18 14:10:40 得分 0
我也想要这个功能,热切关注!Top
3 楼linqiu6(小秋)回复于 2002-05-18 14:11:15 得分 0
除了select ****** from 以外,我想知道field-editer中的add-new是哪里来的???Top
4 楼rabbitisme(玥。小蓝相信真爱)回复于 2002-05-18 14:13:30 得分 0
关注Top
5 楼zhangpeigao(东部一绝)回复于 2002-05-18 14:18:40 得分 0
field-editer中的字段可以通过预先的SQL语句再add.allfield
当然也可以一个个add-new,这样子你就可以用到字段级的事件了
如:onsettext,ongettext等,还有add-new可以是一个计算字段
或浏览字段,浏览字段可以通过另TTable,或已打开的TQuery.
Top
6 楼zhangpeigao(东部一绝)回复于 2002-05-18 14:27:36 得分 0
可以预先在SQL中加语句,再用field-editer中的add-allfield
也可以一个个加,这样子你可以用字段级的onsettext和ongettext
等事件,也可以利用displaylabel属性(写中文名),但好象不能
在运行时动态加。也可以增加计算字段或浏览字段(从另Ttable或TQuery
中lookup来)Top
7 楼linqiu6(小秋)回复于 2002-05-18 14:31:41 得分 0
补充:
不要使用field-editer!!!还有其它方法吗?Top
8 楼zhangpeigao(东部一绝)回复于 2002-05-18 14:39:54 得分 0
动态创建一张临时表,将查询计算的值
往表中加,最后删除临时表(drop)
或则可以的话改用Tstringgrid,这样可以避免很多东西Top
9 楼BossHawk(BossHawk)回复于 2002-05-18 14:48:53 得分 0
应该可以创建TField吧,就是说用代码实现field-editer的功能,你仔细查一下帮助,查一下你用的TQuery什么的使用帮助Top
10 楼linqiu6(小秋)回复于 2002-05-18 14:52:53 得分 0
补充:
我用的是TADODataSet,我查过了有一个这样的function
dateset.fields.add(新字段名),但是就是不行.sos.sos.sosTop
11 楼man8888(北京男人)回复于 2002-05-18 16:25:19 得分 0
用field-editer 生成几个字段,看源代码都有什么内容。然后模仿写代码。Top
12 楼kyee(浪子阿鹏)回复于 2002-05-18 17:45:37 得分 0
同意 bosshawk(BossHawk) 的方法。Top
13 楼linqiu6(小秋)回复于 2002-05-20 09:16:15 得分 0
这样我实现不了,如果上面的兄弟可能做到的话,能放出代码给我看一下吗??Top
14 楼sagosago()回复于 2002-06-18 13:44:39 得分 100
with DefaultFieldClasses[TFieldType(ftString)].Create(Qry) do
begin
FieldKind := fkLookup;
Lookup:=true;
FieldName := 'test';
KeyFields := 'ID';
LookupDataSet :=Qry;
LookupKeyFields := 'ID';
LookupResultField := 'NAME';
Name := 'test';
end;
Qry.FieldDefs.Add('test',ftString,20,False);Top




