gpt4 book ai didi

sql-server - 德尔福: "Parameter object is improperly defined. Inconsistent or incomplete information was provided."

转载 作者:行者123 更新时间:2023-12-03 14:51:58 25 4
gpt4 key购买 nike

我正在尝试将记录插入到 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;

关于sql-server - 德尔福: "Parameter object is improperly defined. Inconsistent or incomplete information was provided.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/712011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com