在我的Delphi2009应用程序中,我需要检查一个字段是否存在,以及在应用程序执行期间是否没有添加它。
我已经弄清楚了字段的测试,但无法获得要添加的字段。我试过了
var
fld : TStringField;
begin
if not ADOConnection1.Connected then
ADOConnection1.Open;
fld := TStringField.Create(tbl);
fld.FieldName := 'test';
tbl.Fields.Add(fld);
end;但它不起作用。
发布于 2009-07-27 15:55:21
尝尝这个
fld:= TStringField.Create(tbl);
fld.FieldName := 'test';
fld.DisplayLabel := 'test';
fld.name := 'test';
fld.DataSet := tbl;
fld.Size := 30;
tbl.Fields.Add(fld);再见。
发布于 2010-09-13 10:34:13
如果您试图获得表设计器中“添加所有字段”或“添加字段”菜单的功能,那么从Embarcadero源代码中的代码开始并将其清除,以便在设计器之外可用,这是非常简单的。首先在DSDesign.pas: function TFieldsEditor.DoAddFields( all : Boolean):TField中使用这个方法;我添加所有缺少的字段的代码如下:
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;发布于 2009-07-27 18:01:45
如果表是SQL Databse的一部分,一旦检测到该字段丢失,就可以通过SQL添加该字段,然后重新打开该表。
cmd := tAdoCommand.create;
try
cmd.Connection := AdoConnection1;
cmd.CommandText := 'ALTER TABLE table ADD TEST nvarchar(30)';
cmd.Execute;
finally
cmd.Free;
end; https://stackoverflow.com/questions/1188829
复制相似问题