Как получить номер версии сервера базы данных Advantage? - PullRequest
1 голос
/ 03 августа 2011

Я легко могу узнать, какую версию клиента я использую, но как я могу узнать версию сервера?

Существует функция AdsMgGetInstallInfo ace и соответствующая хранимая процедура sp_mgGetInstallInfo.

Требуются ли для этого какие-то особые привилегии?

Я ожидал найти свойство TAdsConnection.ServerVersion, но чего-то подобного не существует?

Ответы [ 3 ]

2 голосов
/ 03 августа 2011

Я нашел AdsConnection.ServerVersion только для провайдера .NET, поэтому он, вероятно, отсутствует в оболочке базы данных Delphi Advantage.

Но вы можете попытаться вызвать AdvantageAPI управления функция AdsMgGetInstallInfo и в структуру ADS_MGMT_INSTALL_INFO получает элемент aucVersionStr, где должна быть версия сервера базы данных Advantage.Так что это может выглядеть так (это модифицированный пример из справочника 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 голос
/ 09 августа 2012

Вот пример использования метода хранимых процедур sp_mgGetInstallInfo в Delphi, при условии, что у вас уже есть компонент TAdsQuery с допустимым доступным соединением:

adsQuery.SQL.Clear();
adsQuery.SQL.Add('EXECUTE PROCEDURE sp_mgGetInstallInfo();');
adsQuery.Active := True;
versionStr := adsQuery.FieldByName('Version').AsString;
1 голос
/ 29 декабря 2011

Вы должны вызвать процедуру хранения "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();
        }
    }

}
...