Получение ошибки при использовании параметра с помощью сценария anydac (теперь firedac) для firebird
Я не могу заставить следующий скрипт выполняться без ошибок. Он выполняется в delphi для базы данных Firebird.
var
vScript: TADScript;
begin
vScript := TADScript.Create(nil);
vScript.Connection := xConnection;
vScript.Transaction := xTransaction;
with vScript.Params.Add do
begin
Name := 'DEFVAL'; // also tried ':DEFVAL'
AsInteger := 1;
end;
with vScript.SQLScripts.Add do
SQL.Text := 'ALTER TABLE "PERSON" add "AGE" INTEGER DEFAULT :DEFVAL';
vScript.ValidateAll;
vScript.ExecuteAll;
end
Выдает ошибку "Токен неизвестен - строка 1, столбец 48", параметр (:DEFVAL) расположение
Я попытался назначить SQL-текст, а затем вызвать Params.FindParam, но его нет в списке. Это работает для запросов.
Не использование параметров и просто включение значения по умолчанию в строку SQL работает, но этот код используется как часть большей работы с фреймами, и этот вариант является последним средством.
1 ответ
Причина, по которой вы получаете токен неизвестной ошибки, состоит в том, что ALTER TABLE
операторы не позволяют использовать параметры таким способом.
Вам нужно будет согласовать строковое значение по умолчанию с ALTER TABLE
заявление. Поскольку ваш код безоговорочно применяет значение по умолчанию 1
в этом случае это можно просто включить в литерал оператора:
with vScript.SQLScripts.Add do
SQL.Text := 'ALTER TABLE "PERSON" add "AGE" INTEGER DEFAULT 1';
Если вам действительно нужно учитывать потенциально переменные значения по умолчанию, тогда, очевидно, это нужно будет изменить на что-то похожее на:
with vScript.SQLScripts.Add do
SQL.Text := Format('ALTER TABLE "PERSON" add "AGE" INTEGER DEFAULT %i', [iDefaultValue]);
Где iDefaultValue - некоторая целочисленная переменная, содержащая требуемое значение по умолчанию.