Конференция "Базы" » Версия FireBird [D7]
 
  • PonosetcDM © (05.10.11 13:31) [0]
    Здравствуйте, уважаемые.
     Не поделитесь ли мнение, о том, как из программы узнать версию установленной FireBird?
  • Ega23 © (05.10.11 13:42) [1]
  • Anatoly Podgoretsky © (05.10.11 14:18) [2]
    А то что FireBird может быть более одного не волнует?
  • PonosetcDM © (05.10.11 14:29) [3]
    Нет кол-во установленных не интересует, предположем, что мне заранее известно о том, что он один...
  • Rouse_ © (05.10.11 14:39) [4]
    Может быть ньюанс, что его рядышком с твоей программой в виде Embeded варианта положат...
  • Ega23 © (05.10.11 14:48) [5]

    > Может быть ньюанс, что его рядышком с твоей программой в
    > виде Embeded варианта положат...


    ConnectionString-то разные будут.
    А вообще вопрос несколько странный. По-идее, ты должен в требованиях к программе указать: "Версия сервера не ниже ххх". И уже дальше в рамках базы использовать возможности именно этой версии, не выше и не ниже.
  • PonosetcDM © (05.10.11 14:50) [6]

    > Rouse_ ©   (05.10.11 14:39) [4]
    > Может быть ньюанс, что его рядышком с твоей программой в
    > виде Embeded варианта положат...

    Да, да.. все возможно.... Возможно, что он вааапще не установлен, но все же, узнать такую инфу реально или нет... может быть какой-то "пунктик" в реестре есть... или в библиотеке fbclient.dll функция какая-ть есть.. иль ещё какое-ть чудо-юдо??
  • Rouse_ © (05.10.11 14:51) [7]

    > ConnectionString-то разные будут.

    а при чем тут это?
    В системе стоит например второй FB, рядом с программой лежит FB 1.5 Embeded, толку с того что определится наличие второго, если работа будет вестись с Embeded вариантом, чья библиотека будет подгружена первой?
  • Ega23 © (05.10.11 14:57) [8]

    > В системе стоит например второй FB, рядом с программой лежит
    > FB 1.5 Embeded, толку с того что определится наличие второго,
    >  если работа будет вестись с Embeded вариантом, чья библиотека
    > будет подгружена первой?


    Вот я тут как раз у Жеки уточнил. Если использовать IBx-компоненты, то будет подгружена библиотека 'gds23dll'. Т.е. её поиск будет вестись по стандартным правилам - сначала рядом с exe и т.д.
    Но, насколько я понял из его объяснения, она будет использоваться как клиентская часть, но совсем не факт, что как серверная, это уже зависит от ConnectionString.
    Далее. Я совершенно не обязан использовать IBx компоненты с их провайдером, я ведь могу взять ODBC-провайдер или OLEDB-провайдер. И тут уже, вроде как, всё исключительно через ConnectionString задаётся, хоть 10 версий Embedded рядом положи.

    З.Ы. Попробую дома потестить.
  • Ega23 © (05.10.11 14:59) [9]

    > Да, да.. все возможно.... Возможно, что он вааапще не установлен,
    >  но все же, узнать такую инфу реально или нет... может быть
    > какой-то "пунктик" в реестре есть... или в библиотеке fbclient.
    > dll функция какая-ть есть.. иль ещё какое-ть чудо-юдо??


    А нафига? Начинай с ней работать, если что не так, то exception вывалится.
  • Rouse_ © (05.10.11 15:27) [10]

    > Но, насколько я понял из его объяснения, она будет использоваться
    > как клиентская часть, но совсем не факт, что как серверная

    это клиент/сервер в одном флаконе, в этом и цимус...
  • PonosetcDM © (05.10.11 16:21) [11]

    > А нафига? Начинай с ней работать, если что не так, то exception
    > вывалится.

    Эксцепшон - это само сабой разумеется, но тут может быть кривой(неправильный) SQL запрос скаже, а может быть такое, что старая версия FB не поддерживает некоторых ключевых слов, введенных в новой версии, при этом для новых версий SQL запрос будет правильным, т.о. чтобы избежать лишнего разбора полетов, проше может сразу сказать юзеру, что "у тя, мол, FB старый. Ну ка новый ставь скарее"...
  • Rouse_ © (05.10.11 16:35) [12]
    Ну не получается по хорошему, поудем другим вариантом :)
    Даю намек: библиотека gds32.dll экспортирует функцию gds_version
  • Ega23 © (05.10.11 16:51) [13]

    > но тут может быть кривой(неправильный) SQL запрос скаже


    1. ANSI-SQL - он и в Африке ANSI-SQL. Если всё будет по его правилам, то ничего страшного не произойдёт.
    2. У тебя сама база не должна развернуться на сервере, ниже чем ....
    3. Всё вышесказанное относится к стандартой связке База-Клиент, если ты пишешь что-то a-la IBExpert или PowerDesigner, то конечно нужно версию учитывать. Но опять-таки, ДО коннекта. Посмотри, как это тот же IBExpert делает.
  • wisekaa © (05.10.11 23:32) [14]
    TIBServerProperties - что мешает использовать компонент?
  • PEAKTOP © (06.10.11 16:35) [15]
    > PonosetcDM ©   (05.10.11 13:31)
    >  Не поделитесь ли мнение, о том, как из программы узнать версию установленной FireBird?


    Начиная с версии 2.0 можно выполнить запрос вида:

    SELECT RDB$GET_CONTEXT('SYSTEM', 'ENGINE_VERSION ') FROM RDB$DATABASE



    читать тут: http://firebirdsql.su/doku.php?id=rdb_get_context

    Для релизов старше версии 2.0 этот способ считается разработчиками единственно правильным в виду поддержки движком старых клиентов gds32.dll/so даже от InterBase 6.0.
  • Loginov Dmitry © (07.10.11 00:32) [16]

    > Не поделитесь ли мнение, о том, как из программы узнать
    > версию установленной FireBird?


    Версию сервера можно узнать с помощью TIBDatabaseInfo.Version


    > Возможно, что он вааапще не установлен, но все же, узнать
    > такую инфу реально или нет...


    Если не установлен, то версию узнать нельзя.
  • PonosetcDM © (07.10.11 15:36) [17]
    Использовать какие-либо компонентоы, не хочется....

    Экспортировал функцию "gds__version" запускаю, выполняю получаю результат "170393861", хм..... задумался я тут... что же значат эти магические цифры.. Имеется установленый FireBird 2.1
  • PonosetcDM © (07.10.11 15:38) [18]

    > Начиная с версии 2.0 можно выполнить запрос вида:SELECT
    > RDB$GET_CONTEXT('SYSTEM', 'ENGINE_VERSION ') FROM RDB$DATABASE

    Этот вариант хороший, но мне хочется распознать версии < 2.0. Вариант: если выполнено, то посмотреть результат, а если не выполнена - выдавать сообщение об обновлении версии - не оч хороший, хочется чуть больше универсальности...
  • Cobalt © (07.10.11 15:58) [19]
    function TIBDatabaseInfo.GetVersion: AnsiString;
    var
     local_buffer: array[0..IBBigLocalBufferLength - 1] of AnsiChar;
     DatabaseInfoCommand: AnsiChar;
    begin
     DatabaseInfoCommand := AnsiChar(isc_info_version);
     Call(FGDSLibrary.isc_database_info(StatusVector, @FDatabase.Handle, 1, @DatabaseInfoCommand,
                           IBBigLocalBufferLength, local_buffer), True);
     local_buffer[5 + Int(local_buffer[4])] := #0;
     result := AnsiString(PAnsiChar(@local_buffer[5]));
    end;

 
Конференция "Базы" » Версия FireBird [D7]
Есть новые Нет новых   [119772   +79][b:0][p:0.001]