如何获取Advantage Database Server的版本号?

时间:2011-08-03 15:39:10

标签: delphi advantage-database-server

我可以很容易地找出我正在使用的客户端版本,但是如何找到服务器版本?

有一个AdsMgGetInstallInfo ace函数和一个相应的存储过程sp_mgGetInstallInfo

这些需要一些特殊权限吗?

我原本希望找到一个TAdsConnection.ServerVersion属性,但是这样的东西似乎不存在?

3 个答案:

答案 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;