Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Разные exception в execute procedure при разных клиентских библиотеках FB2.5.7 и FB3.0.1 / 9 сообщений из 9, страница 1 из 1
14.12.2016, 12:43
    #39366651
grgr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разные exception в execute procedure при разных клиентских библиотеках FB2.5.7 и FB3.0.1
Господа!

В хранимой процедуре без возвращаемых значений, которая успешно (в рамках своей логики, либо отрабатывает молча, либо возвращает exception) вызывается так в IBExpert:

execute procedure advance2(1000, 500);

есть вызов исключения

exception wrong_parameters 'Такая сумма аванса недоступна сотруднику, уменьшите сумму!';

Есть компьютер с приложением (не IBExpert), где клиентская библиотека от FB2.5, и тогда работает правильно. А если вызывает исключение, которое ловиться программой, то отображается именно такой текст. Сервер всегда 2.5.7.

Если использовать библиотеку от FB3.0.1, то в случае правильных параметров, которые не предполагают исключения, все работает. Если ввести параметры, на которые мы должны реагировать вышеуказанным исключением, то в клиент придёт исключение "Attempt to execute an unprepared dynamic SQL statement", а не то, что указывали мы.

Мы использует IBSQL (не IBQuery), отладка показывает, что исключение такое уже на уровне вызова isc_dsql_execute2:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
fetch_res := Call(Database.GDSLibrary.isc_dsql_execute2(StatusVector, TRHandle,
                            @FHandle, Database.SQLDialect, FSQLParams.AsXSQLDA,
                            FSQLRecord.AsXSQLDA), False);
      if (fetch_res <> 0) then
      begin
        if (fetch_res <> isc_lock_conflict) then
        begin
           { Sometimes a prepared stored procedure appears to get
             off sync on the server ....This code is meant to try
             to work around the problem simply by "retrying". This
             need to be reproduced and fixed.
           }
          Database.GDSLibrary.isc_dsql_prepare(StatusVector, TRHandle, @FHandle, 0,
                          PByte(FProcessedSQL.Text), Database.SQLDialect, nil);
          Call(Database.GDSLibrary.isc_dsql_execute2(StatusVector, TRHandle,
                             @FHandle, Database.SQLDialect, FSQLParams.AsXSQLDA,
                             FSQLRecord.AsXSQLDA), True);
        end
        else
          IBDataBaseError(Database.GDSLibrary);  // go ahead and raise the lock conflict
      end;



Отмечу, что хранимая процедура с возвращаемыми значениями, вызываемая через "select * from ..." корректно возвращает исключение при любой клиентском библиотеке: и FB2.5, и FB3.0.1.

Как нам получить "наше" исключение в примере выше? Хотелось бы иметь одну клиентскую библиотеку и соединятся с СУБД разных версий.
...
Рейтинг: 0 / 0
14.12.2016, 12:55
    #39366662
Товарищ младший сержант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разные exception в execute procedure при разных клиентских библиотеках FB2.5.7 и FB3.0.1
grgr...Хотелось бы иметь одну клиентскую библиотеку...
Гемор в перспективе, неизбежный.
Лет 10 назад я в каталог своих приложений стал добавлять подпапку \fbSupport. Там лежит клиент и разные мелкие полезняшки, вроде IBEScript.dll, образов bat-файлов для бэкап-рестора-старта-запуска и проч). Приложение при запуске настраивает нужные переменные окружения, и всё.
...
Рейтинг: 0 / 0
14.12.2016, 13:31
    #39366698
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разные exception в execute procedure при разных клиентских библиотеках FB2.5.7 и FB3.0.1
grgrотладка показывает, что исключение такое уже на уровне вызова isc_dsql_execute2:

Это уже сто лет известный баг в IBX, созданный для обхода другого бага в древнем
Interbase. Ни то ни другое к Firebird отношения не имеет. Выкиньте к чёртовой матери
процитированный код.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.12.2016, 13:43
    #39366721
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разные exception в execute procedure при разных клиентских библиотеках FB2.5.7 и FB3.0.1
grgr,

очень похоже на вот это
http://www.ibase.ru/ibstp/

рекомендую сравнить код с кодом других компонентов (firedac, ibx2, и т.д.)
...
Рейтинг: 0 / 0
14.12.2016, 14:22
    #39366780
grgr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разные exception в execute procedure при разных клиентских библиотеках FB2.5.7 и FB3.0.1
kdv,

Спасибо, вы правы, это явно имеет отношение к моему случаю. Я наталкивался на эту статью сто лет назад, но сейчас, при поиске (гуглении и т.п.), её почему-то мне не показывает.

Однако, я все еще попробую разобраться, почему с клиентской библиотекой fb2.5 все норм, а с fb3.0 - нет. Или, как сказал Товарищ младший сержант - это принципиальная ситуация и никто не обещает, что новые клиентские библиотеки будут нормально работать со старыми версиями СУБД, так?


p.s.: Господа, а есть простой список поломанного в fb3.0 относительно fb2.5? Не именно новые возможности, а старые, типа длинна имени переменных (declare variables) в процедурах не более 31 символа, обязательного именования столбцов в курсоре, даже когда я обращаюсь к ним не по имени (то бишь cast() теперь нужно сопровождать алиасом, но вы знаете, конечно), обязательно приведение к одному типу в case (многие ситуации, разрешаемые в 2.5 по умолчанию, теперь требуют явного указания (явного cast()) ) и т.п.
...
Рейтинг: 0 / 0
14.12.2016, 14:34
    #39366813
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разные exception в execute procedure при разных клиентских библиотеках FB2.5.7 и FB3.0.1
grgrИли, как сказал Товарищ младший сержант - это принципиальная ситуация и никто не обещает,
что новые клиентские библиотеки будут нормально работать со старыми версиями СУБД, так?

Никто не обещает, что новые библиотеки будут иметь в себе те же баги, что и старые.
Правильное поведение сохраняется. Если ты закладываешься на баги - ССЗБ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.12.2016, 15:40
    #39366959
grgr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разные exception в execute procedure при разных клиентских библиотеках FB2.5.7 и FB3.0.1
Все заработало.

Действительно, возвращался exception, затем, так как код вот такой странный, то вызывалась процедура еще раз, получался exception другой (Attempt to...). Исправление кода помогло.
...
Рейтинг: 0 / 0
14.12.2016, 16:40
    #39367017
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разные exception в execute procedure при разных клиентских библиотеках FB2.5.7 и FB3.0.1
grgr а есть простой список поломанного в fb3.0 относительно fb2.5?
этот список, как и всегда, находится в дистрибутиве Firebird,
/doc/README.incompatibilities.txt
...
Рейтинг: 0 / 0
14.12.2016, 18:09
    #39367095
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разные exception в execute procedure при разных клиентских библиотеках FB2.5.7 и FB3.0.1
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Разные exception в execute procedure при разных клиентских библиотеках FB2.5.7 и FB3.0.1 / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]