使用带有 anydac(现在是 firedac)脚本的 firebird 参数时出错
Getting error using a parameter with anydac (now firedac) script for firebird
我无法让以下脚本无错误地执行。它是 运行 in 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
给出错误'Token unknown - line 1, column 48',参数(:DEFVAL)位置
我试过先分配 sql 文本然后调用 Params.FindParam 但它不在列表中。这适用于查询。
不使用参数,只在 SQL 字符串中包含默认值是可行的,但此代码用作更大框架工作的一部分,该选项是最后的选择。
您收到令牌未知错误的原因是 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 是一些保存所需默认值的整数变量。
我无法让以下脚本无错误地执行。它是 运行 in 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
给出错误'Token unknown - line 1, column 48',参数(:DEFVAL)位置
我试过先分配 sql 文本然后调用 Params.FindParam 但它不在列表中。这适用于查询。
不使用参数,只在 SQL 字符串中包含默认值是可行的,但此代码用作更大框架工作的一部分,该选项是最后的选择。
您收到令牌未知错误的原因是 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 是一些保存所需默认值的整数变量。