在RunTime更新Paradox表

时间:2012-05-13 15:34:10

标签: sql delphi runtime

我目前正在使用以下方法在运行时向paradox表添加字段。

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。

我做错了什么?

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

1 个答案:

答案 0 :(得分: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'语句的语法与您的语法不同 - tablename用引号括起来并包含文件的扩展名。