0

我目前正在使用以下方法在运行时将字段添加到悖论表。

procedure TfrmMain.AddField(UpdTable, FieldName, FieldType: string);
begin
 with qryUpdate do
 begin
  Close;
  ParamByName('UPDTABLE').AsString := UpdTable;
  ParamByName('FLDNAME').AsString  := FieldName;
  ParamByName('FLDTYPE').AsString  := FieldType;
  ExecSQL;
  Open;
 end;
end;

procedure TfrmMain.FormShow(Sender: TObject);
begin
  AddField('Test','newfield', 'VARCHAR(30)');
end;

在名为“qryUpdate”的组件中,我有以下查询:

ALTER TABLE :UPDTABLE
ADD :FLDNAME :FLDTYPE

但是,执行查询时会显示以下消息:

关键字使用无效。

令牌:?

行号:1。

我究竟做错了什么?

另一个(相关)问题:将这样的字段添加到现有数据库是否会损害现有字段/数据?

4

1 回答 1

2

您只能将字段添加到表中一次!编写的代码将在每次运行程序时尝试添加该字段。在添加新字段之前,您应该首先检查您的表包含多少个字段。

我曾经使用以下代码在运行时添加字段(这是用于 BDE/Paradox 表)

with ttable.create (nil) do
 try
  databasename:= 'whatever';
  tablename:= 'test.db';
  open;
  fc:= fieldcount;
  close;
 finally
  free
 end;

if fc = 7 then
 with tquery.create (nil) do
  try
   databasename:= 'whatever';
   close;
   sql.add ('alter table "test.db" add newfield varchar (30)');
   execsql
  end;
   finally
  free
 end;

请注意,我的“alter table”语句的语法与您的不同 - 表名用引号括起来并包含文件的扩展名。

于 2012-05-14T03:16:08.387 回答