首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用firebird的anydac (现在为firedac)脚本获取参数时出错

使用firebird的anydac (现在为firedac)脚本获取参数时出错
EN

Stack Overflow用户
提问于 2016-11-01 20:37:35
回答 1查看 369关注 0票数 3

我无法在没有错误的情况下执行以下脚本它是在delphi中针对firebird数据库运行的。

代码语言:javascript
复制
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字符串中的默认值,但这段代码被用作更大框架工作的一部分,该选项是最后的选择。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-01 22:05:10

您获得令牌未知错误的原因是ALTER TABLE语句不允许以这种方式使用参数。

您需要将字符串化的默认值与ALTER TABLE语句连接起来。因为在本例中,您的代码无条件地应用了默认值1,所以这可以简单地包含在语句文字中:

代码语言:javascript
复制
with vScript.SQLScripts.Add do
  SQL.Text := 'ALTER TABLE "PERSON" add "AGE" INTEGER DEFAULT 1';

如果您确实需要容纳潜在的可变默认值,那么很明显,这将需要更改为类似于:

代码语言:javascript
复制
with vScript.SQLScripts.Add do
  SQL.Text := Format('ALTER TABLE "PERSON" add "AGE" INTEGER DEFAULT %i', [iDefaultValue]);

其中,iDefaultValue是一些整数变量,保存了所需的默认值。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40368244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档