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不要将这些视为参数?
将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)