cjm*_*ues 3 delphi firebird anydac firedac
我无法在没有错误的情况下执行以下脚本..它在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
Run Code Online (Sandbox Code Playgroud)
它给出了'令牌未知 - 第1行,第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';
Run Code Online (Sandbox Code Playgroud)
如果您确实需要适应可能变量的默认值,那么显然需要将其更改为类似于:
with vScript.SQLScripts.Add do
SQL.Text := Format('ALTER TABLE "PERSON" add "AGE" INTEGER DEFAULT %i', [iDefaultValue]);
Run Code Online (Sandbox Code Playgroud)
其中iDefaultValue是一个保持所需默认值的整数变量.