我正在尝试将记录插入到3层数据库设置中的表中,并且当中间层服务器尝试将第一个参数添加到查询时,它会生成上面的错误消息作为OLE异常.
我已经用Google搜索了这个错误,并且我一致地发现了相同的结果:它来自查询中某个字符串中的冒号,这是ADO的sql解析器.这不是这种情况.任何地方都没有假冒冒号.我已经检查并重新检查对象定义与我试图插入的表的模式.一切都结束了,这让我的同事难过.有谁知道还有什么可能导致这个?我在这里结束了我的智慧.
我正在使用Delphi 2007和sql Server 2005.
解决方法
我可以使用Delphi 2007和MSsql Server 2008得到这个错误,我找到了一个解决方法. (这是相当糟糕的恕我直言,但也许它对你有用,如果你的是由同样的事情造成的.)
with TADOQuery.Create(nil) do try Connection := ADOConnection; sql.Text := ' (SELECT * FROM Stock WHERE InvCode = :InvCode ) ' +' (SELECT * FROM Stock WHERE InvCode = :InvCode ) '; Prepared := true; Parameters.ParamByName('InvCode').Value := 1; Open; // <<<<< I get the "parameter object is...etc. error here. finally Free; end;
我找到了两种解决方法:
sql.Text := ' SELECT * FROM Stock WHERE InvCode = :InvCode ' +' SELECT * FROM Stock WHERE InvCode = :InvCode ';
2)使用两个参数而不是一个:
with TADOQuery.Create(nil) do try Connection := ADOConnection; sql.Text := ' (SELECT * FROM Stock WHERE InvCode = :InvCode1 ) ' +' (SELECT * FROM Stock WHERE InvCode = :InvCode2 ) '; Prepared := true; Parameters.ParamByName('InvCode1').Value := 1; Parameters.ParamByName('InvCode2').Value := 1; Open; // <<<<< no error now. finally Free; end;