动态改变字段是可以的
比说你在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也应该属于关闭状态