【发布时间】:2010-03-08 21:24:41
【问题描述】:
几周以来,我一直在尝试调试以下问题 - 从同一数据模块中的多个位置调用此方法,但此异常(来自本文的主题行)仅在整数用于特定目的时发生(提货订单与我们通过承运人运送的订单)被使用 - 不要问我应用程序如何区分一个整数的目的和另一个整数的目的!此外,我无法在我的机器上复制这个问题——错误发生在仓库机器上,而不是我自己的开发机器上,即使使用相同的生产数据库也是如此。我怀疑两台机器之间存在 MDAC 版本冲突,但已运行版本检查器并确认两台机器都在运行 2.8,另外还通过在运行时记录 TAdoDataset 的 .Version 属性来确认这一点。
function TdmESShip.SecondaryID(const PrimaryID : Integer ): String;
begin
try
with qESPackage2 do
begin
if Active then
Close;
LogMessage('-----------------------------------');
LogMessage('Version: ' + FConnection.Version);
LogMessage('DB Info: ' + FConnection.Properties['Initial Catalog'].Value + ' ' + FConnection.Properties['Data Source'].Value);
LogMessage('Setting the parameter.');
Parameters.ParamByName('ParameterName').Value := PrimaryID;
LogMessage('Done setting the parameter.');
Open;
此日志记录代码在 100 次中有 99 次记录成功操作,如下所示:
版本:2.8 数据库信息:(数据库名称和实例)
设置参数。
参数设置完毕。
打开数据集。
但是,每当处理“提货”订单时,只要打开数据集,就会引发此异常:
版本:2.8
数据库信息:(数据库名称和实例)
设置参数。
参数设置完毕。
GetESPackageID() 引发异常。类型:EOleException,消息:参数类型错误、超出可接受范围或相互冲突 错误:参数类型错误、超出可接受范围或在 packageID 10813711 中相互冲突
我已尝试消除该参数并以编程方式为此数据集构建命令文本,怀疑 TParameter 的配置的某些部分可能不正常,但在相同情况下会发生相同的错误。我已经尝试了所有我能想到的 TParameter 属性组合——这是我为我的第 100 万个数据集创建的第 100 万个 TParameter,我从未遇到过这个错误。我什至从头开始创建了第二个数据集,并删除了对原始数据集的所有引用,以防 .dfm 中原始数据集的某些属性可能已损坏,但在相同情况下会发生相同的错误。 该数据集的命令文本很简单
select ValueA from TableName where ValueB = @ParameterB
我正准备做一些极端的事情,比如编写一个 Web 服务来查找这些值 - 现在感觉好像我可以摧毁我的机器,重建它,从头开始重写整个应用程序,以及应用程序仍然知道每当我尝试从主要值中查找次要值时抛出异常,但仅适用于取货订单,并且仅来自仓库中的一台机器,但是 em> 我可能遗漏了一些简单的东西。因此,任何人都可以提供任何帮助,我们将不胜感激。
【问题讨论】:
-
我发现这个软件的用户可以选择打印一个文件,如果打印对话框出现过,不管文件是否打印,打开这个对话框就是导致后面的异常打开 TAdoDataset。然而,我找不到这两个动作之间的逻辑关联,即使因果关系似乎是 100% 可靠的。从那以后,我已经调换了部门,但怀疑打印机对话框的底层窗口功能可能被错误地调用,导致某些东西处于不一致的状态。
-
此消息“参数类型错误、超出可接受范围或相互冲突”是标准 OLE 错误消息代码,当某些选项无效时可以从 ADO 返回,并且 OLE/COM 方法返回此标准故障代码。
-
我应该修改这个求助请求,说明我现在完全不在 Delphi 工作,所以我个人解决这个问题的机会现在已经没有了。我组织的大部分现有 Delphi 代码库很快就会移植到 .NET。谢谢大家!
标签: delphi ado delphi-2007