gpt4 book ai didi

delphi - 异常打开 TAdoDataset : Arguments are of the wrong type, 超出可接受的范围,或者相互冲突

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

我已经尝试调试以下问题几个星期了 - 该方法是从同一数据模块内的多个位置调用的,但此异常(来自本文的主题行)仅在用于特定目的的整数时发生(取货订单与我们通过承运商运送的订单)的使用 - 不要问我应用程序如何区分一个整数的用途和另一个整数的用途!此外,我无法在我的计算机上重复此问题 - 即使在使用相同的生产数据库时,错误也发生在仓库计算机上,而不是我自己的开发计算机上。我怀疑两台机器之间存在 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

数据库信息:(数据库名称和实例)

设置参数。

参数设置完成。

GetEPackageID() 引发异常。类型:EOleException,消息:参数类型错误、超出可接受范围或相互冲突错误:参数类型错误,超出可接受的范围,或者与 packageID 10813711 的参数相互冲突

<小时/> 我尝试消除该参数,并以编程方式为此数据集构建了命令文本,怀疑 TParameter 配置的某些部分可能不正常,但在相同的情况下会发生相同的错误。我已经尝试了我能想到的所有 TParameter 属性组合 - 这是我为第百万个数据集创建的第百万个 TParameter,而且我从未遇到过此错误。我什至从头开始创建了第二个数据集,并删除了对原始数据集的所有引用,以防 .dfm 中原始数据集的某些属性可能损坏,但在相同情况下会发生相同的错误。该数据集的命令文本很简单

select ValueA from TableName where ValueB = @ParameterB

我准备做一些极端的事情,比如编写一个 Web 服务来查找这些值 - 现在感觉好像我可以毁掉我的机器,重建它,从头开始重写整个应用程序,然后应用程序每当我尝试从主要值查找次要值时,仍然知道抛出异常,但仅限于取货订单,并且仅限于仓库中的一台机器,但是 我可能错过了一些简单的东西。因此,任何人可以提供的任何帮助将不胜感激。

最佳答案

搜索 CodeGear/Embarcadero newsgroups我只能找到与设置/使用 Filter 属性相关的错误。我会在项目中搜索任何设置组件 Filter 属性的内容,并检查该组件是否绑定(bind)到任何可以间接设置 Filter 属性的 UI 控件(例如 DevExpress 的 TcxGrid、Infopower 的 Filter 对话框等)

另一个建议是将数据集的打开包装在禁用/启用控件中。如果数据集绑定(bind)到 UI 控件,则控件不应尝试应用任何可能导致异常的操作(应用过滤器)。

function TdmESShip.GetESPackageID(const PackageID : Integer): String;
var
ESPackageID :string; // for debugging
begin
with qESPackage do
begin
ESPackageID := '';
DisableControls();
try
try
Parameters.ParamByName('PackageID').Value := PackageID;
Open();
if NOT(IsEmpty()) then
begin
ESPackageID := qESPackageESPackageID.AsString;
end;
Close(); // No need to keep open
except
on E:Exception do
begin
ESPackageID := '9999999'; // ex. return a known bogus value
// log the error, re-raise a more meaningful error, etc
end;
end;
finally
EnableControls();
Result := ESPackageID;
end;
end;
end;

祝你好运

关于delphi - 异常打开 TAdoDataset : Arguments are of the wrong type, 超出可接受的范围,或者相互冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2404871/

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