Delphi 如何找到用于FireDac连接的MS Access版本和/或dll名称?
我与Microsoft Access数据库有FireDac连接。我正在连接上配置Parms,如下所示:Delphi 如何找到用于FireDac连接的MS Access版本和/或dll名称?,delphi,firedac,delphi-10.1-berlin,Delphi,Firedac,Delphi 10.1 Berlin,我与Microsoft Access数据库有FireDac连接。我正在连接上配置Parms,如下所示: Connection.Params.Add('DriverID=MSAcc'); Connection.Params.Add('Database=' + FDatabasePath); Connection.Connected := true; 一般来说,这很有效。但是,在某些情况下,会安装旧的MS Access驱动程序。我们希望检测到这种情况并提醒用户,以便他们可以安装新的驱动程序 我如何
Connection.Params.Add('DriverID=MSAcc');
Connection.Params.Add('Database=' + FDatabasePath);
Connection.Connected := true;
一般来说,这很有效。但是,在某些情况下,会安装旧的MS Access驱动程序。我们希望检测到这种情况并提醒用户,以便他们可以安装新的驱动程序
我如何获取FireDac找到并用于建立连接的驱动程序版本,或者至少是VendorLib名称?
我知道我可以在打开我的连接之前在Phys连接链接上指定一个VendorLib。我不想那样做。我希望FireDac通过它的过程找到并使用系统上最相关的驱动程序。然而,一旦这样做了,我想知道它最终使用了什么驱动程序
在连接打开后,我尝试创建一个TFDPhysmAccess DriverLink,希望设置实际的DriverId或VendorLib属性。但是,ActualDriverId是MsAcc,VendorLib是空的。1。获取驱动程序的版本
您可以通过属性以序号形式获取驱动程序版本,也可以通过属性以字符串形式获取驱动程序版本(还可以包括驱动程序描述)。查询的信息类型在ODBC API中描述如下:
SQL驱动程序版本(ODBC 1.0)
包含驱动程序版本的字符串,以及可选的
司机的描述。至少,版本的形式为###########,其中前两位为主要版本,后两位为次要版本,后四位为主要版本
发布版本
使用FireDAC,您可以通过以下方式获得:
uses
FireDAC.Phys.ODBCWrapper;
procedure TForm1.Button1Click(Sender: TObject);
var
DriverVerStr: string;
DriverVerInt: TFDVersion;
ODBCConnection: TODBCConnection;
begin
ODBCConnection := TObject(FDConnection.CliObj) as TODBCConnection;
DriverVerStr := ODBCConnection.DRIVER_VER;
DriverVerInt := ODBCConnection.DriverVersion;
Memo.Lines.Add(Format('DriverVerStr: %s', [DriverVerStr]));
Memo.Lines.Add(Format('DriverVerInt: %d', [DriverVerInt]));
end;
uses
FireDAC.Phys.ODBCWrapper;
procedure TForm1.Button1Click(Sender: TObject);
var
ODBCVerStr: string;
ODBCVerInt: TFDVersion;
ODBCConnection: TODBCConnection;
begin
ODBCConnection := TObject(FDConnection.CliObj) as TODBCConnection;
ODBCVerStr := ODBCConnection.DRIVER_ODBC_VER;
ODBCVerInt := ODBCConnection.DriverODBCVersion;
Memo.Lines.Add(Format('ODBCVerStr: %s', [ODBCVerStr]));
Memo.Lines.Add(Format('ODBCVerInt: %d', [ODBCVerInt]));
end;
2.获取驱动程序支持的ODBC版本
要获取所用驱动程序支持的ODBC版本,可以使用属性获取序号值或字符串值。查询到的数据类型信息描述如下:
SQL\u驱动程序\u ODBC\u版本(ODBC 2.0)
具有驱动程序支持的ODBC版本的字符串。
该版本的格式为###.###,其中前两位数字为
主版本和后两位数字为次版本。
SQL_SPEC_MAJOR和SQL_SPEC_MINOR定义了主要版本和次要版本
数字。对于本手册中描述的ODBC版本,以下是3
和0,并且驱动程序应返回“03.00”
使用FireDAC,您可以通过以下方式获得:
uses
FireDAC.Phys.ODBCWrapper;
procedure TForm1.Button1Click(Sender: TObject);
var
DriverVerStr: string;
DriverVerInt: TFDVersion;
ODBCConnection: TODBCConnection;
begin
ODBCConnection := TObject(FDConnection.CliObj) as TODBCConnection;
DriverVerStr := ODBCConnection.DRIVER_VER;
DriverVerInt := ODBCConnection.DriverVersion;
Memo.Lines.Add(Format('DriverVerStr: %s', [DriverVerStr]));
Memo.Lines.Add(Format('DriverVerInt: %d', [DriverVerInt]));
end;
uses
FireDAC.Phys.ODBCWrapper;
procedure TForm1.Button1Click(Sender: TObject);
var
ODBCVerStr: string;
ODBCVerInt: TFDVersion;
ODBCConnection: TODBCConnection;
begin
ODBCConnection := TObject(FDConnection.CliObj) as TODBCConnection;
ODBCVerStr := ODBCConnection.DRIVER_ODBC_VER;
ODBCVerInt := ODBCConnection.DriverODBCVersion;
Memo.Lines.Add(Format('ODBCVerStr: %s', [ODBCVerStr]));
Memo.Lines.Add(Format('ODBCVerInt: %d', [ODBCVerInt]));
end;
3.获取驱动程序访问的DBMS产品的版本
您可以通过属性获取访问的DBMS产品版本。ODBC API将查询的信息类型描述为:
SQL\U DBMS版本(ODBC 1.0)
表示DBMS产品版本的字符串
由驱动程序访问。该版本的格式为###########,其中
前两位为主要版本,后两位为
次要版本,最后四位数字为发布版本。
驱动程序必须以这种形式呈现DBMS产品版本,但可以
还要附加DBMS产品特定的版本。例如
“04.01.0000 Rdb 4.1”
使用FireDAC,您可以通过这种方式获得它(没有返回已解析序号版本号的属性,所以让我们自己尝试解析序号值):
4.获取FireDAC统一版本信息
FireDAC提供可通过连接对象的接口属性访问的和属性
对于ODBC驱动程序,如果驱动程序不是单层驱动程序,则属性返回驱动程序版本(在这里的第1节中描述),否则返回DBMS产品版本(在第3节中描述)。返回ODBC驱动程序的始终DBMS产品版本(在这里的第3节中描述)
例如:
procedure TForm1.Button1Click(Sender: TObject);
var
Metadata: IFDPhysConnectionMetadata;
begin
Metadata := FDConnection.ConnectionMetaDataIntf;
try
Memo.Lines.Add(Format('ClientVersion: %d', [Metadata.ClientVersion]));
Memo.Lines.Add(Format('ServerVersion: %d', [Metadata.ServerVersion]));
finally
Metadata := nil;
end;
end;
这些属性似乎返回驱动程序实现的ODBC版本,而不是驱动程序本身的版本。现在我可以在我的ODBC管理工具中看到两个用于访问的目录。一个是版本10.00.15063,另一个是版本14.00.7010。当我在我的连接上运行您的代码时,我得到以下信息:驱动程序版本:Microsoft Access数据库引擎驱动程序ODBC版本:03.51驱动服务器版本:0驱动程序版本:351000000我希望
驱动程序版本将是CLI版本。至少应该是这样。驱动程序ODBC版本应报告支持的ODBC版本。嗯,该驱动程序中的信息类型执行得很差。在这种情况下,嗯,也许可以检查驱动程序库的版本?更新。我试着介绍您可能感兴趣的版本信息。我猜您正在寻找的是DBMS产品信息(至少您的标题是“我如何找到MS Access版本”,很抱歉我错过了)。为什么对您使用的驱动程序返回ODBC API指定以外的驱动程序版本仅仅是因为错误的实现(如果有人返回“Access数据库引擎”,而不是“至少,该版本的格式为##.#.#.#.#.#.#”则不值得评论:)我需要卸载我的旧驱动程序,并检查一些版本号,看看有什么变化。不过你确实给了我一个方向的想法。由于访问返回的内容,我将使用OdbcConnection.DRIVER\u NAME属性。这给了我aceobc.dll。然后我可以从dll中读取版本号。这就是我希望看到的版本。谢谢你的详细帖子。我没有对我正在做的事情给予足够的关注。我试图在指针上使用“是”。我需要:如果TObject(FDConnection.CliObj)是todbconnection,那么。。。现在工作得很好。非常感谢。