我目前正在使用以下方法在运行时向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。
我做错了什么?
另一个(相关)问题: 将这样的字段添加到现有数据库会不会损害现有的字段/数据?
答案 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用引号括起来并包含文件的扩展名。