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

フィールドをテーブルに追加できるのは1回だけです。記述されているように、コードはプログラムを実行するたびにフィールドを追加しようとします。新しいフィールドを追加する前に、まずテーブルに含まれるフィールドの数を確認する必要があります。

以前は、次のコードを使用して実行時にフィールドを追加していました(これは、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 に答える