请教:如何动态添加、删除永久字段?(200分)

  • 主题发起人 主题发起人 123456
  • 开始时间 开始时间
1

123456

Unregistered / Unconfirmed
GUEST, unregistred user!
由于在程序中,数据库结构不固定,需动态添加、删除永久字段,
包括“计算字段”和“Lookup字段”。请教各位高手程序该怎么写。
 
如果嫌分少的话,我还可以加。
 
最好后一个数据字典,数据字典中存放各种字段的数据类型,字段类型,长度等等。。
创建时用
With Table1.Fields do
add(......)
 
首先,我想告诉你这种做法不太好,因为动态添加字段前要关闭数据集,
如果你的程序如此反复,速度可能不太理想,但要做也可以。

1、添加计算字段:
var a:tintegerfield;
begin
table1.close;
a:=tstringfield.create(application);
a.FieldKind:=fkCalculated;
a.FieldName:='Calc';
a.DataSet:=table1;
table1.Open;
end;
做完如上代码后,就在表中添加了一个计算字段,当然,你还得在OncalcFields
中进行具体的计算。

2、添加LOOKUP字段也像上面,只不过是FieldKing类型改成fkLoopUp就是行,但还得设一下它的LookupDataset,Lookupkeyfields等东东,以你的水平应该不难。

3、至于fieldking为fkdata类型的字段对象对应的就是物理数据库中的物理字段,
物理字段有几个那么它最多就只有几个,你干脆一开始就创建完毕就是了。

如果想在运行过程中修改库的结构什么的,比如修改物理字段的类型、大小等,
我想应该不大可能,除非是通过SQL语句。

 
cch_b说的很对。
我补充两句:
DELPHI只是把DATASET的结构取出来,生成对象,原理如此。
你以后想什么问题,如想不通,用面向对象的方法思考一下,会有许多启发。
 
你可以用SQL语句添加或删除字段,下面是从names.db表中
删除lastname字段和添加firstname字段的例子:
ALTER TABLE "names.db"
DROP lastname, ADD firstname CHAR(30)
 
对不起,错了一个字, 就是那TSringField应改成TIntegerField,
我真是迷糊
 
多人接受答案了。
 
后退
顶部