动态改变字段是可以的
比说你在IDE状态时用dataSet的属性编辑器已经放了field1,field2,field3三个固定栏位
这时假设你需要动态新增一个string的字段类型,字段名为'aa',这里用一个sFldName变量表示
可以这么写:
implement
var
myField:TStringField;...
if FDataSet.State<>dsInactive then
FDataSet.Active:=false; //FdataSet必须属于非活动状态才能动态修改字段
if FDataSet.FindField(sFldName)=nil then
begin
end
else
showmessage(format('已经存在%s的字段',[sFldName])); myField:=TStringField.Create(FDataSet);
myField.Size:=12; //设定长度
myField.FieldName:=sFldName; //设定对应的字段名
myFIeld.name:=FdataSet.name+sFldName;//设定整个myField的名称
myField.Index:=i; //设定myField的顺序
myField.DataSet:=FDataSet; //指定myField属于哪个TDataSet Fields[i].Visible:=true ;//or false 指定Field字段是否显示 .....最后在form的destory事件里要写上
myField.Free;
myField:=nil;
如果一个table控件指定了永久字段,那么它打开另一个表时,最经常的情况就是
"找不到XXX字段"
必须先在程序里删除掉永久字段
var
AComponent:TComponet;
AComponent:=FindComponent('XXXX');
if AComponent<>nil then
AComponent.Free;
当然此时FDataSet也应该属于关闭状态
比说你在IDE状态时用dataSet的属性编辑器已经放了field1,field2,field3三个固定栏位
这时假设你需要动态新增一个string的字段类型,字段名为'aa',这里用一个sFldName变量表示
可以这么写:
implement
var
myField:TStringField;...
if FDataSet.State<>dsInactive then
FDataSet.Active:=false; //FdataSet必须属于非活动状态才能动态修改字段
if FDataSet.FindField(sFldName)=nil then
begin
end
else
showmessage(format('已经存在%s的字段',[sFldName])); myField:=TStringField.Create(FDataSet);
myField.Size:=12; //设定长度
myField.FieldName:=sFldName; //设定对应的字段名
myFIeld.name:=FdataSet.name+sFldName;//设定整个myField的名称
myField.Index:=i; //设定myField的顺序
myField.DataSet:=FDataSet; //指定myField属于哪个TDataSet Fields[i].Visible:=true ;//or false 指定Field字段是否显示 .....最后在form的destory事件里要写上
myField.Free;
myField:=nil;
如果一个table控件指定了永久字段,那么它打开另一个表时,最经常的情况就是
"找不到XXX字段"
必须先在程序里删除掉永久字段
var
AComponent:TComponet;
AComponent:=FindComponent('XXXX');
if AComponent<>nil then
AComponent.Free;
当然此时FDataSet也应该属于关闭状态
myField的操作应该放到
begin
end;里面