|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Из стороннего (third party) приложения работаю с базой Firebird 3. Проблема следующая. Если я выполняю запрос "INSERT ...", делаю commit, то новые данные становятся доступными сразу (например, в IBExpert'е). Если же я выполняю запрос "EXECUTE PROCEDURE ...", которая делает то же самое, то новые данные становятся доступными только после отключения от базы в приложении. P.S. Проверил в IBExpert'е с помощью ODBCViewer Если выполнить "EXECUTE PROCEDURE ...", затем "INSERT" или "UPDATE" куда-нибудь (с коммитами), то данные обновляются. Можно ли, какие и где параметры драйвера подкрутить, чтобы запрос "EXECUTE PROCEDURE ..." сразу нормально коммитился? Или другой способ, если драйвер не виноват. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 19:38 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 20:36 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Jarz, либо это есть в настройках драйвера (autocommit), либо облом без явного завершения транзакций. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 22:05 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Jarz Если я выполняю запрос "INSERT ...", делаю commit, то новые данные становятся доступными сразу (например, в IBExpert'е). Если же я выполняю запрос "EXECUTE PROCEDURE ...", которая делает то же самое, то новые данные становятся доступными только после отключения от базы в приложении. То есть, ты делаешь COMMIT после EXECUTE PROCEDURE - и "не работает"? Враньё. Или ты не ту транзакцию коммитишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 22:31 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
ёёёёёИли ты не ту транзакцию коммитишь. У ODBC всего одна транзакция, промахнуться невозможно. Вопрос в том "а коммитит ли он её"? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 23:11 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov ёёёёёИли ты не ту транзакцию коммитишь. У ODBC всего одна транзакция, промахнуться невозможно. Вопрос в том "а коммитит ли он её"? Ну так он написал "то же самое" - врёт? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 18:18 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
ёёёёёврёт? "Добросовестно заблуждается." Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 18:28 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Вот что я делаю. Подключаюсь к БД IBExpert'ом и third party приложением (TP) 1. a) В TP приложении выполняю (команды условные) Код: sql 1. 2.
b) в IBExpert'e обновляю таблицу (зелёная галочка Commit Transaction) - получаю только что записанные данные с) В TP приложении выполняю Код: sql 1. 2.
d) в IBExpert'e обновляю таблицу - не получаю только что записанные данные 2. В IBExpert'e a) через ODBC Viewer выполняю INSERT b) обновляю таблицу - получаю только что записанные данные c) через ODBC Viewer выполняю EXECUTE PROCEDURE d) обновляю таблицу - не получаю только что записанные данные e) выполняю INSERT или UPDATE (даже в другую таблицу) f) обновляю таблицу - получаю данные, записанные через EXECUTE PROCEDURE В IBExpert'e вы и сами (при желании) можете проверить, чтобы убедиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 21:04 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Jarz, какой конкретно ODBC драйвер используется? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 21:19 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
JarzВ IBExpert'e вы и сами (при желании) можете проверить, чтобы убедиться. Вот только желания нет. Включай аудит в Firebird и смотри какие запросы и в каких транзакциях выполняются. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 22:12 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Jarz c) через ODBC Viewer выполняю EXECUTE PROCEDURE d) обновляю таблицу - не получаю только что записанные данные ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 23:53 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
ёёёёё Jarz, какой конкретно ODBC драйвер используется? h__ps://firebirdsql.org/en/odbc-driver/ ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 07:57 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Включай аудит в Firebird и смотри какие запросы и в каких транзакциях выполняются. Включил. Посмотрел. - Если сделать INSERT/UPDATE, то транзакция коммитится сразу - Если сделать EXECUTE PROCEDURE, то транзакция не коммитится - При следующем UPDATE/INSERT транзакция коммитится ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 11:22 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Jarz, Возможно в object.commit() проверяется какой-нибудь флаг, который не выставляется должным образом в object.exec( "EXECUTE PROCEDURE ..." ); ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 11:55 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Vlad F, я сходу не нашел, какие операции завершаются коммитом при автокоммите. То ли это общее для ОДБЦ, то-ли driver-specific. Обычно в драйверах приавтокоммите однозначно завершаются коммитом insert, update и delete. Select - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 12:38 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Vlad F Jarz, Возможно в object.commit() проверяется какой-нибудь флаг, который не выставляется должным образом в object.exec( "EXECUTE PROCEDURE ..." ); В IBExpert'овском ODBCViewer'е такое же поведение. kdv Vlad F, я сходу не нашел, какие операции завершаются коммитом при автокоммите. То ли это общее для ОДБЦ, то-ли driver-specific. Обычно в драйверах приавтокоммите однозначно завершаются коммитом insert, update и delete. Select - нет. SELECT'ов в вызываемой процедуре нет, suspend-ов - тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 13:06 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Если что, у нас работает. Никогда проблем не наблюдали. Jarz, по-вашему получается, что хранимку с клиента вообще никак не запустить? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 13:22 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
KreatorXXI, "по его" получается, что после execute procedure нет коммита при автокоммите. Только и всего. Надо явно вызывать коммит. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 13:24 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 13:28 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
kdv"по его" получается, что после execute procedure нет коммита при автокоммите. Только и всего. Надо явно вызывать коммит. Вот только он же утверждал, что явно вызывает коммит. Врал, наверное. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 13:28 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Мне кажется, дело всё-таки в драйвере. В документации написано: авторIf the BLR code for the stored procedure contains if (countSUSPEND == 1)... Then the ODBC driver will use execute procedure . ... If the BLR code for the stored procedure contains if (countSUSPEND > 1) as would be the case in this stored procedure definition: Then the ODBC Driver will use select * from Я порылся в исходниках: действительно, именно так и происходит. Определяется это в функции Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Только вот в исходниках Firebird у функции print_blr всего 3 параметра. А наиболее близкой является функция isc_print_blr . Возможно, из-за этого драйвер всегда подставляет "select *" . Подтвердить я это пока не могу, т.к. в трейс-логе отображается исходный текст запроса. Т.е. если я написал "ExEcuTe", то так в логе и будет. А итоговый я не знаю как посмотреть. Видимо, следующий этап - попытаться собрать модифицированный драйвер самому. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 15:34 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
JarzА итоговый я не знаю как посмотреть. Повторяю медленно: включить аудит на стороне Firebird. Что ты якобы и сделал в https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1322814&msg=22090471 Тоже врал?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 15:41 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
JarzВ документации написано: Это - для ODBC-шного синтаксиса "{?call ...}". А ты, если не врал, использовал прямой вызов EXECUTE PROCEDURE. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 15:57 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Jarz, вообще это какая-то лабуда и самодеятельность. Есть в процедуре suspend, или нет, ничто не запрещает выполнить execute procedure и получить результат. Один, как положено. Если же где-то внутри кто-то перекручивает вызов процедуры то так то эдак, по каким-то мутным критериям, то это его проблемы. Если процедура селективная, и надо выбрать оттуда набор записей, так и вызывать её надо как select from procedure, а не как execute procedure. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 16:16 |
|
ODBC, "execute procedure", commit - не обновляются данные до дисконнекта
|
|||
---|---|---|---|
#18+
Jarz, и еще добавлю, что если кто-то в селективной процедуре пишет insert/update/delete, то это тоже его проблемы :-) И, явный коммит в драйвере должен работать, выполнялось вообще что-нибудь или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 16:19 |
|
|
start [/forum/topic.php?fid=40&msg=39932558&tid=1560424]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
129ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 245ms |
0 / 0 |