如何在 Delphi TSQLQuery中使用Firebird的Execute Block?

nbnkbykc  于 2023-04-20  发布在  其他
关注(0)|答案(4)|浏览(163)

使用dbExpress TSQLQuery,我不能使用execute block命令执行查询,因为该命令需要?表示参数,而 Delphi 使用:表示参数,那么,如果在该块的主体中创建变量并将其用作

select data from table where .... into :var;

“:var”被TSQLQuery解释为参数。
在 Delphi 中执行execute块语句的方法是什么?
如果我写:

execute block(param1 char(1)=:param1)

我可以从 Delphi 中为:param1加载一个值,但是当我用Query.OpenQuery.ExecSQL执行它时,会返回一个错误,指示缺少参数so?,因为在Firebird中执行块是这样写的:

execute block(param1 char(1)=?param1)

有没有办法用TSQLQuery解决这个问题?

jhkqcmku

jhkqcmku1#

首先,您可以禁用的TSQLQuery属性

ParamCheck := False;

然后在execute块的开头,删除参数path。

execute block (param1 char (1) = :param1)

并且您的查询传递的是(%s)而不是:param1.
我在我的问题中这样做并解决了它!

l7mqbcuq

l7mqbcuq2#

“:var”被TSQLQuery解释为参数
您可以通过将ParamCheck属性设置为False来关闭此功能。

8hhllhi2

8hhllhi23#

对我来说,唯一有效的方法是不要在块中为内部变量放置“:”。例如,select data from table into var;,这就是工作!,然后,因为这是一个块,所以用if来评估var!

if (var = 1)
  do something; 
else
  do anotherthing;

解决业务!

yptwkmov

yptwkmov4#

最近我遇到了类似的问题,但是使用FDQuery(Firedac),找到的解决方案是将TFQUery的属性ResourceOptions.PreprocessCmdText设置为“False”。例如:

qryAux.ResourceOptions.PreprocessCmdText := False;

相关问题