sql-server – Delphi:“参数对象定义不正确.提供的信息不一致或不完整.“

前端之家收集整理的这篇文章主要介绍了sql-server – Delphi:“参数对象定义不正确.提供的信息不一致或不完整.“前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将记录插入到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;

我找到了两种解决方法

1)从sql删除括号,即:

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;

猜你在找的MsSQL相关文章