当前位置:主页>销售管理软件> 列表

程序中增加数据集的field 找管家进销存

财务软件版1楼: 我有两个数据集,一个是程序中创建的Tado1,另一个从工具栏中选的Tado2,属性已经设置好了。现在要将tado1中的field增加到tado2中,关联起来,就像在数据集中点击右键选择new field,然后配置一些属性,但必须是fklookup型的,不知道该如何做?

2楼: sql alt 如管家进销存

3楼: 能不能说详细点

4楼: ALTER TABLE
通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。

语法
ALTER TABLE table
{ [ ALTER COLUMN column_name
{ new_data_type [ ( precision [ , scale ] ) ]
[ COLLATE < collation_name > ]
[ NULL | NOT NULL ]
| {ADD | DROP } ROWGUIDCOL }
]
| ADD
{ [ < column_definition > ]
| column_name AS computed_column_expression
} [ ,...n ]
| [ WITH CHECK | WITH NOCHECK ] ADD
{ < table_constraint > } [ ,...n ]
| DROP
{ [ CONSTRAINT ] constraint_name
| COLUMN column } [ ,...n ]
| { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ ,...n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [ ,...n ] }
}

5楼: 最好有段代码,谢谢

6楼: 没人会吗???

财务软件版7楼: 你是想在数据集中增加字段还是在后台表中增加呢

8楼: ADOQuery1.Fields.Add();

9楼: Fields.Add();增加后打开数据集出错,我用的是adodataset

10楼: //增加字段;
if DataSet.Fields.FindField(TmpAdoQuery.fieldbyname(''ConTrolName'').AsString)= nil then
begin
//没有找到自动新增;
if Uppercase(TmpAdoQuery.fieldbyname(''ControlItem'').AsString)=uppercase(''TStringField'') then
begin
//字符 TStringField
TmpNewField:=TStringField.Create(DataSet) ;
TmpNewFielD.Size :=TmpAdoQuery.fieldbyname(''LeftValue'').AsInteger ;
ifUserCreate:= True;
end;
if Uppercase(TmpAdoQuery.fieldbyname(''ControlItem'').AsString)=uppercase(''TAutoIncField'') then
begin
//自动增长 TAutoIncField
TmpNewField:=TAutoIncField.Create(DataSet) ;
ifUserCreate:=true;
end;
if Uppercase(TmpAdoQuery.fieldbyname(''ControlItem'').AsString)=uppercase(''TIntegerField'') then
begin
//数值整型 TIntegerField
TmpNewField:=TIntegerField.Create(DataSet) ;
ifUserCreate:=true;
end;
if Uppercase(TmpAdoQuery.fieldbyname(''ControlItem'').AsString)=uppercase(''TBCDField'') then
begin
//数值 TBCDField
TmpNewField:=TBCDField.Create(DataSet) ;
ifUserCreate:=true;
end;
if Uppercase(TmpAdoQuery.fieldbyname(''ControlItem'').AsString)=uppercase(''TCurrencyField'') then
begin
//数值货币 TCurrencyField
TmpNewField:=TCurrencyField.Create(DataSet) ;


ifUserCreate:=true;
end;
if Uppercase(TmpAdoQuery.fieldbyname(''ControlItem'').AsString)=uppercase(''TFloatField'') then
begin
//数值浮点 TFloatField
TmpNewField:=TFloatField.Create(DataSet) ;
ifUserCreate:=true;
end;
if Uppercase(TmpAdoQuery.fieldbyname(''ControlItem'').AsString)=uppercase(''TDateField'') then
begin
//日期 TDateField
TmpNewField:=TDateField.Create(DataSet) ;
ifUserCreate:=true;
end;
if Uppercase(TmpAdoQuery.fieldbyname(''ControlItem'').AsString)=uppercase(''TDateTimeField'') then
begin
//日期时间 TDateTimeField
TmpNewField:=TDateTimeField.Create(DataSet) ;
ifUserCreate:=true;
end;
if Uppercase(TmpAdoQuery.fieldbyname(''ControlItem'').AsString)=uppercase(''TMemoField'') then
begin
//备注 TMemoField
TmpNewField:=TMemoField.Create(DataSet) ;
ifUserCreate:=true;
end;
if Uppercase(TmpAdoQuery.fieldbyname(''ControlItem'').AsString)=uppercase(''TBlobField'') then
begin
//二进制、图形 TBlobField
TmpNewField:=TBlobField.Create(DataSet) ;
ifUserCreate:=true;
end;
if ifUserCreate then
begin
//创建成功设置属性;
if TmpAdoQuery.fieldbyname(''TabOrder'').AsString=''1'' then
TmpNewField.FieldKind :=fkData
else
begin
if TmpAdoQuery.fieldbyname(''TabOrder'').AsString=''2'' then
TmpNewField.FieldKind :=fkCalculated
else
if TmpAdoQuery.fieldbyname(''TabOrder'').AsString=''3'' then

begin
TmpNewField.FieldKind :=fkLookup ;
TmpNewField.KeyFields :=TmpAdoQuery.fieldbyname(''DsSoureName'').AsString;
TmpDataSet :=Self.FindComponent(TmpAdoQuery.fieldbyname(''LabelEng'').AsString);
if TmpDataSet<>nil then
TmpNewField.LookupDataSet :=TDataSet(TmpDataSet)
else
TmpNewField.LookupDataSet :=nil ;
TmpNewField.LookupKeyFields :=TmpAdoQuery.fieldbyname(''LabelJT'').AsString;
TmpNewField.LookupKeyFields :=TmpAdoQuery.fieldbyname(''LabelFT'').AsString;
end;
end;
TmpNewField.FieldName := TmpAdoQuery.fieldbyname(''ConTrolName'').AsString;
TmpNewField.Name := DataSet.Name + TmpNewField.FieldName;
TmpNewField.Index := DataSet.FieldCount;
TmpNewField.Visible :=TmpAdoQuery.fieldbyname(''IsVisible'').AsBoolean ;
TmpNewField.ReadOnly :=Not TmpAdoQuery.fieldbyname(''IsEnable'').AsBoolean ;
TmpNewField.DisplayWidth :=TmpAdoQuery.FieldByName(''TopValue'').AsInteger ;
TmpNewField.DisplayLabel :=TmpAdoQuery.FieldByName(''CTDisplayLabel'').AsString ;
//DataSet.AggFields.Add(TmpNewField);
if DataSet.Active then
DataSet.Close ;
TmpNewField.DataSet := DataSet ;
//DataSet.FieldDefs.UpDate;
//TmpNewField.Free ;
end;
end else
begin
//找到就设置;
DataSet.Fields.FindField(TmpAdoQuery.fieldbyname(''ConTrolName'').AsString).Visible :=TmpAdoQuery.fieldbyname(''IsVisible'').AsBoolean ;
DataSet.Fields.FindField(TmpAdoQuery.fieldbyname(''ConTrolName'').AsString).ReadOnly :=Not TmpAdoQuery.fieldbyname(''IsEnable'').AsBoolean ;
DataSet.Fields.FindField(TmpAdoQuery.fieldbyname(''ConTrolName'').AsString).DisplayWidth :=TmpAdoQuery.FieldByName(''TopValue'').AsInteger ;
DataSet.Fields.FindField(TmpAdoQuery.fieldbyname(''ConTrolName'').AsString).DisplayLabel :=TmpAdoQuery.FieldByName(''CTDisplayLabel'').AsString ;
end;

这个是我用在动态开发中的代码,测试通过;