我在TADOQuery
组件中执行SQL脚本时遇到问题。正在执行的脚本包含goto
个语句及其相应的标签,例如:
goto MyLabel
MyLabel:
--do something else
但是,TADOQuery
会看到这些:
字符,并将它们视为参数(它们不是参数),并给我一个错误:
Parameter object is improperly defined. Inconsistent or incomplete information was provided
如何指示TADOQuery
不要将这些视为参数?
答案 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;