加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 07:07:16 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试将记录插入到3层数据库设置中的表中,并且当中间层服务器尝试将第一个参数添加到查询时,它会生成上面的错误消息作为OLE异常. 我已经用Google搜索了这个错误,并且我一致地发现了相同的结果:它来自查询中某个字符串中的冒号,这是ADO的SQL解析器.这不
我正在尝试将记录插入到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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读