我可以很容易地找出我正在使用的客户端版本,但是如何找到服务器版本?
有一个AdsMgGetInstallInfo
ace函数和一个相应的存储过程sp_mgGetInstallInfo
。
这些需要一些特殊权限吗?
我原本希望找到一个TAdsConnection.ServerVersion
属性,但是这样的东西似乎不存在?
答案 0 :(得分:2)
我只为.NET提供程序找到了AdsConnection.ServerVersion,因此在Delphi Advantage Database包装器中可能会丢失它。
但是,您可能会尝试调用Advantage Management API函数AdsMgGetInstallInfo,并ADS_MGMT_INSTALL_INFO结构会收到应该是Advantage Database Server版本的aucVersionStr
成员。所以它可能看起来像这样(这是AdsMgGetInstallInfo引用中的修改示例)。
请注意,我还没有测试过,我希望您将拥有所有数据类型和结构定义。
uses ACE;
function GetServerVersion: string;
var
Size: UNSIGNED16;
MgmtHandle: ADSHANDLE;
ResultValue: UNSIGNED32;
InstallInfo: ADS_MGMT_INSTALL_INFO;
begin
Result := '';
ResultValue := ACE.AdsMgConnect('\\MyExample\Server', nil, nil, @MgmtHandle);
if (ResultValue <> AE_SUCCESS) then
Exit;
Size := SizeOf(ADS_MGMT_INSTALL_INFO);
ResultValue := ACE.AdsMgGetInstallInfo(MgmtHandle, @InstallInfo, @Size);
if (ResultValue <> AE_SUCCESS) then
Exit;
Result := InstallInfo.aucVersionStr;
end;
答案 1 :(得分:1)
您应该调用“sp_mgGetInstallInfo”存储过程。 这是Java示例:
public static String getAdsVersion() throws ClassNotFoundException,
SQLException {
Connection conn = null;
try {
conn = getAdsConnection();
CallableStatement statement = conn
.prepareCall("{call sp_mgGetInstallInfo()}");
ResultSet resultSet = statement.executeQuery();
resultSet.next();
String version = resultSet.getString("Version");
return version;
} finally {
if (conn != null) {
conn.close();
}
}
}
答案 2 :(得分:1)
这是使用Delphi中的sp_mgGetInstallInfo
存储过程方法的示例,假设您已经有一个有效连接的TAdsQuery组件:
adsQuery.SQL.Clear();
adsQuery.SQL.Add('EXECUTE PROCEDURE sp_mgGetInstallInfo();');
adsQuery.Active := True;
versionStr := adsQuery.FieldByName('Version').AsString;