EFDDBEngineException错误代码-错误代码映射是否有任何变化

问题描述 投票:0回答:1

我有一个Delphi XE7应用程序,它使用Postgres作为后端,并使用Firedac进行数据库连接。当名称为'db_name'的数据库不存在时,Delphi XE 7代码将生成EFDDBEngineException类异常。

此异常的类型为ekOther,错误代码为0。

// E.Kind  and E.ErrorCode
EFDDBEngineException

但是,当我将此应用程序迁移到Delphi 10.3.1时,错误代码现在返回1。在Delphi 10.3.1发行文档中找不到对此更改的任何引用。

我的问题是:更改Delphi 10.3.1代码以检查错误代码1而不是0是否安全?

// Delphi XE 7 code
if (E.Kind = ekOther) and (E.ErrorCode = 0) then begin
delphi postgresql-9.4 firedac delphi-10.3-rio
1个回答
0
投票

没有手工的旧版本的Delphi,但是在Delphi 10.3.2中,PostgreSQL的ErrorCode设置为进行连接尝试时驱动程序返回的状态,其值为ErrorCode(声明为尝试失败(由CONNECTION_BAD函数调用返回)时,值为1的常量。)>

但是,由于任何类型的尝试连接失败的原因,都会返回此CONNECTION_BAD状态,获取有关此类失败的详细信息的唯一方法(即使对于PostgreSQL 12也是如此)是检查错误消息(这是FireDAC所做的工作)设置相关属性,例如您要测试的PQstatus

话虽如此,要知道连接尝试是否由于不存在的数据库原因而失败,您必须分析错误消息。测试您不能保证这种特定的失败。

我无法回答您的问题,因为我没有手工的旧版本的Delphi,但是对于最新版本的Delphi,您可以像下面这样修改代码(但正如我上面所说,它不能保证对不存在的代码进行测试数据库失败):

PQstatus
© www.soinside.com 2019 - 2024. All rights reserved.