ADO Query将goto标签视为参数

时间:2014-07-15 14:31:46

标签: delphi query-parameters tadoquery

我在TADOQuery组件中执行SQL脚本时遇到问题。正在执行的脚本包含goto个语句及其相应的标签,例如:

goto MyLabel

MyLabel:
  --do something else

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

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

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

1 个答案:

答案 0 :(得分:5)

将AdoQuery.ParamCheck设置为false。

更新的 OP在后续评论中说,上述内容足以解决他的直接问题,但如果查询包含实际的参数,则无法工作。最初,我无法与它们合作。

然而,看一下ADODB(D7)中TParameters.ParseSQL的代码,作者似乎已经预料到了嵌入在SQL中的冒号(我的意思是,在任何人之前:一个人可以进入以作为地方的一个参数 - TParameters的持有者),通过将加倍冒号(::)视为一种特殊情况。所以我认为意图是任何人都不应该将任何一个不想被视为TParameter的冒号加倍。要了解我的意思,请参阅备忘录1的内容:

(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

然后,以下内容适用于我(根据分配给AdoQuery1.Parameters的值,在DBGrid中显示&#34;肯定&#34;,&#34;否定&#34;或&#34;零&#34; [0]。价值)

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;