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 连接的 MS Access 版本和/或 dll 名称?