如何在Delphi TSQLQuery中使用Firebird的执行块?

如何在Delphi TSQLQuery中使用Firebird的执行块?,delphi,parameters,firebird,dbexpress,Delphi,Parameters,Firebird,Dbexpress,使用dbExpress TSQLQuery,我无法使用execute block命令执行查询,因为该命令需要?参数表示法,Delphi使用:对于参数,如果在该块的主体中创建变量并将其用作 select data from table where .... into :var; 即:var被TSQLQuery解释为一个参数 用Delphi执行execute block语句的方法是什么 如果我写: execute block(param1 char(1)=:param1) 我可以从Delphi加

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

select data from table where .... into :var;
即:var被TSQLQuery解释为一个参数

用Delphi执行execute block语句的方法是什么

如果我写:

execute block(param1 char(1)=:param1)
我可以从Delphi加载:param1的值,但当我使用Query.Open或Query.ExecSQL执行它时,返回一个错误,指示缺少参数so?因为在Firebird中,执行块被写入:

execute block(param1 char(1)=?param1)
有没有办法用TSQLQuery解决这个问题

:var被TSQLQuery解释为参数


您可以通过将属性设置为False来关闭它。

对我来说唯一有效的方法是不放置:在块中放置内部变量。 例如,从表中选择数据,将其输入var;这就是工作!,然后,由于这是一个块,请使用if

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

解决了问题

首先可以禁用的TSQLQuery属性

ParamCheck := False;
然后在执行块的开头,删除参数路径

execute block (param1 char (1) = :param1)
并且您的查询被传递到%s,而不是:param1


我在我的问题中这样做并解决了它

@MartynA,这个问题似乎与这个问题无关。@Markrottveel:我的错误-最近我好像在某个地方写了一些关于这个问题的文章,我以为是我引用的那页,但显然不是。ParamCheck是假的。如果我使用execute block use_Code char1=:use_Code,plus char2=:plus,fromclass int=:fromclass,f1 timestamp=:f1,f2 timestamp=:f2,prov int=:prov返回texto varchar4096作为声明变量nom varchar50;声明变量sucu integer;开始从prov=:prov到:nom;从另一个表中选择另一个,其中class=:fromclass和datecolumn介于:f1和:f2之间,进入:sucu;当Query1.Open或ExecSQL:引发异常类TBXError并显示消息“令牌未知,第x行第y列?”时结束。@Nizamulk此类信息属于您的问题,而不是注释。请编辑您的问题