FireDAC 优势数据库连接类型

Posted

技术标签:

【中文标题】FireDAC 优势数据库连接类型【英文标题】:FireDAC Advantage DB Connection Type 【发布时间】:2018-03-25 16:15:39 【问题描述】:

我正在考虑从 Advantage Native Delphi 组件迁移到 FireDAC。我一直在寻找一种方法来确定如何使用 FireDAC 来确定用于连接服务器的方法 - 远程、本地、AIS(互联网)。

我会寻找 TAdsConnection.ConnectionType 的等价物。

谢谢 加里·康利

【问题讨论】:

【参考方案1】:

您要查找的函数名为AdsGetConnectionType。您可以在 FireDAC.Phys.ADSCli 模块中找到它的导入,但它没有在任何地方使用。

但是自己获取它的地址并调用它并没有那么难。例如(不是一个好):

uses
  FireDAC.Stan.Consts, FireDAC.Phys.ADSCli, FireDAC.Phys.ADSWrapper;

var
  FTAdsGetConnectionType: TAdsGetConnectionType = nil;

type
  TADSLib = class(FireDAC.Phys.ADSWrapper.TADSLib)
  end;

function GetConnectionType(Connection: TFDConnection): Word;
const
  AdsGetConnectionTypeName = 'AdsGetConnectionType';
var
  CliLib: TADSLib;
  CliCon: TADSConnection;
  Status: UNSIGNED32;
  Output: UNSIGNED16;
begin
  Result := 0;
  CliCon := TADSConnection(Connection.CliObj);
  CliLib := TADSLib(CliCon.Lib);

  if not Assigned(FTAdsGetConnectionType) then
    FTAdsGetConnectionType := CliLib.GetProc(AdsGetConnectionTypeName);

  if Assigned(FTAdsGetConnectionType) then
  begin
    Status := FTAdsGetConnectionType(CliCon.Handle, @Output);
    if Status = AE_SUCCESS then
      Result := Word(Output)
    else
      FDException(CliLib.OwningObj, EADSNativeException.Create(Status, CliLib, nil),
        $IFDEF FireDAC_MonitorTrue$ELSEFalse$ENDIF);
  end
  else
    FDException(CliLib.OwningObj, [S_FD_LPhys, CliLib.DriverID],
      er_FD_AccCantGetLibraryEntry, [AdsGetConnectionTypeName]);
end;

可能的用法:

case GetConnectionType(FDConnection1) of
  ADS_AIS_SERVER: ShowMessage('AIS server');
  ADS_LOCAL_SERVER: ShowMessage('Local server');
  ADS_REMOTE_SERVER: ShowMessage('Remove server');
end;

【讨论】:

以上是关于FireDAC 优势数据库连接类型的主要内容,如果未能解决你的问题,请参考以下文章

firedac连接linux的oracle

Delphi XE FireDac 连接池

如何找到用于 FireDac 连接的 MS Access 版本和/或 dll 名称?

Delphi:FireDac 连接阻止应用程序

firedac odbc sql server driver连接占线导致另一个hstmt

关于DBX Framewrok 和 FireDac 的一点随笔