ADO Query将goto标签视为参数

Jer*_*dge 3 delphi query-parameters tadoquery

我正面临在TADOQuery组件中执行SQL脚本的问题.正在执行的脚本包含goto语句及其相应的标签,例如:

goto MyLabel

MyLabel:
  --do something else
Run Code Online (Sandbox Code Playgroud)

但是,TADOQuery看到这些:字符并将它们视为参数(它们不是参数),并给我一个错误:

Parameter object is improperly defined. Inconsistent or incomplete information was provided

如何指示TADOQuery不要将这些视为参数?

Mar*_*ynA 5

将AdoQuery.ParamCheck设置为false.

更新 OP在后续评论中表示,上述内容对于他的直接问题已经足够,但如果查询包含实际的参数则不会有效.最初,我无法与它们合作.

但是,看一下ADODB(D7)中TParameters.ParseSQL的代码,作者似乎已经预料到了嵌入在SQL中的冒号(我的意思是,在任何之前:可以进入的参数名称作为TParameters的占位符) ),通过将加倍冒号(::)视为一种特殊情况.所以我认为意图是任何人不应该将任何不希望被视为TParameter的冒号加倍.要了解我的意思,请参阅Memo1的内容:

(PartialDFM)

object Memo1: TMemo
  Left = 32
  Top = 112
  Width = 297
  Height = 113
  Lines.Strings = (
    'declare'
    '  @number int'
    'select'
    '  @number = ?'
    'if @number > 0 goto positive'
    'if @number < 0 goto negative'
    ''
    'select ''zero'''
    ''
    'positive::'
    '  select ''positive'''
    '  goto'
    '    exitpoint'
    'negative::'
    '  select ''negative'''
    'exitpoint::')
end
object ADOQuery1: TADOQuery
  Connection = ADOConnection1
  Left = 64
  Top = 24
end
Run Code Online (Sandbox Code Playgroud)

然后,以下适用于我(根据分配给AdoQuery1.Parameters [0] .Value的值在DBGrid中显示"正","负"或"零")

procedure TForm1.DoQuery;
begin
  if AdoQuery1.Active
    then AdoQuery1.Close;
  // AdoQuery1.Prepared := True;
  AdoQuery1.SQL.Text := Memo1.Lines.Text;
  AdoQuery1.ParamCheck := False;
  ADOQuery1.Parameters.Clear;
  ADOQuery1.Parameters.CreateParameter('Param1', ftInteger, pdInput, 1, Null);
  AdoQuery1.Parameters[0].Value := 666;
  AdoQuery1.Prepared := True;
  AdoQuery1.Open;
end;
Run Code Online (Sandbox Code Playgroud)