Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Обновление таблицы Paradox во время выполнения

Автор вопроса: CommunityОтветов: 1

В настоящее время я использую следующий метод, чтобы добавить поле в таблицу парадоксов во время выполнения.

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.

Что я делаю неправильно?

Другой (связанный) вопрос: не повредит ли добавление подобных полей в существующую базу данных существующим полям/данным?

  • Вы пытались запустить SQL вне вашего приложения. или следить за этим? Shaun07776 13.05.2012
  • Я только что выполнил запрос (я заменил все параметры теми, которые я передаю ему с помощью программы), и он работал нормально. 14.05.2012

sqlruntimedelphi

Ответы

Ответ 1 · рейтинг 2 · No'am Newman

Вы можете добавить поле в таблицу только один раз! Ваш код, как написано, будет пытаться добавить поле каждый раз, когда вы запускаете программу. Прежде чем добавлять новое поле, вы должны сначала проверить, сколько полей содержит ваша таблица.

Раньше я использовал следующий код для добавления полей во время выполнения (это для таблиц 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" отличается от вашего - имя таблицы заключено в кавычки и включает расширение файла.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы