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

В хранимой процедуре без возвращаемых значений, которая успешно (в рамках своей логики, либо отрабатывает молча, либо возвращает 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
Разные exception в execute procedure при разных клиентских библиотеках FB2.5.7 и FB3.0.1
    #39366662
Товарищ младший сержант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grgr...Хотелось бы иметь одну клиентскую библиотеку...
Гемор в перспективе, неизбежный.
Лет 10 назад я в каталог своих приложений стал добавлять подпапку \fbSupport. Там лежит клиент и разные мелкие полезняшки, вроде IBEScript.dll, образов bat-файлов для бэкап-рестора-старта-запуска и проч). Приложение при запуске настраивает нужные переменные окружения, и всё.
...
Рейтинг: 0 / 0
Разные exception в execute procedure при разных клиентских библиотеках FB2.5.7 и FB3.0.1
    #39366698
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grgrотладка показывает, что исключение такое уже на уровне вызова isc_dsql_execute2:

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

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

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

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

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


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

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

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


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