首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Delphi中以编程方式将字段添加到TAdoTable

如何在Delphi中以编程方式将字段添加到TAdoTable
EN

Stack Overflow用户
提问于 2009-07-27 15:25:13
回答 6查看 16.8K关注 0票数 2

在我的Delphi2009应用程序中,我需要检查一个字段是否存在,以及在应用程序执行期间是否没有添加它。

我已经弄清楚了字段的测试,但无法获得要添加的字段。我试过了

代码语言:javascript
复制
var
  fld : TStringField;
begin
  if not ADOConnection1.Connected then
    ADOConnection1.Open;
  fld := TStringField.Create(tbl);
  fld.FieldName := 'test';
  tbl.Fields.Add(fld);
end;

但它不起作用。

EN

回答 6

Stack Overflow用户

发布于 2009-07-27 15:55:21

尝尝这个

代码语言:javascript
复制
 fld:= TStringField.Create(tbl);
    fld.FieldName := 'test';
    fld.DisplayLabel := 'test';
    fld.name := 'test';
    fld.DataSet := tbl;
    fld.Size := 30;
    tbl.Fields.Add(fld);

再见。

票数 4
EN

Stack Overflow用户

发布于 2010-09-13 10:34:13

如果您试图获得表设计器中“添加所有字段”或“添加字段”菜单的功能,那么从Embarcadero源代码中的代码开始并将其清除,以便在设计器之外可用,这是非常简单的。首先在DSDesign.pas: function TFieldsEditor.DoAddFields( all : Boolean):TField中使用这个方法;我添加所有缺少的字段的代码如下:

代码语言:javascript
复制
procedure AddAllFields(DataSet: TDataset);
var
   FieldsList: TStringList;
   FieldName: WideString;
   Field: TField;
   WasActive: boolean;
   FieldDef: TFieldDef;
   i: Integer;
begin
   WasActive := DataSet.Active;
   if WasActive then
      DataSet.Active := False;
   try
      FieldsList := TStringList.Create;
      try
         DataSet.FieldDefs.Update;

         // make a list of all the field names that aren't already on the DataSet
         for i := 0 to DataSet.FieldDefList.Count - 1 do
            with DataSet.FieldDefList[i] do
               if (FieldClass <> nil) and not(faHiddenCol in Attributes) then
               begin
                  FieldName := DataSet.FieldDefList.Strings[i];
                  Field := DataSet.FindField(FieldName);
                  if (Field = nil) or (Field.Owner <> DataSet.Owner) then
                     FieldsList.Add(FieldName);
               end;

         // add those fields to the dataset
         for i := 0 to FieldsList.Count - 1 do
         begin
            FieldDef := DataSet.FieldDefList.FieldByName(FieldName);
            Field := FieldDef.CreateField(DataSet.Owner, nil, FieldName, False);
            try
               Field.name := FieldName + IntToStr(random(MaxInt)); // make the name unique
            except
               Field.Free;
               raise ;
            end;
         end;
      finally
         FieldsList.Free;
      end;
   finally
      if WasActive then
         DataSet.Active := true;
   end;
end;
票数 3
EN

Stack Overflow用户

发布于 2009-07-27 18:01:45

如果表是SQL Databse的一部分,一旦检测到该字段丢失,就可以通过SQL添加该字段,然后重新打开该表。

代码语言:javascript
复制
cmd := tAdoCommand.create;
try
  cmd.Connection := AdoConnection1;
  cmd.CommandText := 'ALTER TABLE table ADD TEST nvarchar(30)';
  cmd.Execute;
finally
  cmd.Free;
end; 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1188829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档