LINUX.ORG.RU

«Ломается» запрепареный стэйтмент

 ,


0

1

Есть две таблицы. У второй foreign key на первую. Так же есть запрепареный стэйтмент, добавляющий запись во вторую таблицу.

Если выполнить этот стейтмент, то вернется, как и полагается, ошибка: «insert or update on table „test2“ violates foreign key constraint „test_fk“ Key (test1_id)=(TEST_ID) is not present in table „test1“.; Error while executing the query»

После этого добавляю запись в первую таблицу и снова пытаюсь дернуть этот стэйтмент. Неожидано получаю generic ошибку S1000 «Error while executing the query».

Соответственно, если стэйтмент предварительно не «ломать», то он работает хорошо.

Скорее всего, проблема в постгрессовском odbc драйвере, т.к. с TimeSten'ом тот же тест работает на ура.

Как правильно «починить» стейтмент после ошибки выполнения? SQLFreeStmt(SQL_CLOSE) дергается.

Еще пытался логирование включить, но никаких логов не появляется:

Trace=1
TraceFile=/tmp/odbc.trace
Debug=1
DebugFile=/tmp/odbc.debug
CommLog=1

★★

Ответ на: комментарий от bvn13

Можно. А каких именно? Все работает через ODBC'шное API. TimesTen работал хорошо, но когда стали приделывать поддержку двух баз, то для PostgreSQL полезли всякие бяки. Какие-то уже решили, но вот «ломающийся» стейтмент - это финиш...

kulti ★★
() автор топика
Ответ на: комментарий от bvn13

Ну, в двух словах: пишется запрос с параметрами (statement), который один раз prepare'тся (prepared statement), а когда его нужно выполнить, биндятся параметры и полученный стейтмент выполняется.

В общем, можете погуглить про prepared statements. Скорее всего пригодится, если вы с БД работаете.

kulti ★★
() автор топика
Ответ на: комментарий от anonymous

Тогда смысл стейтмент выполнять пропадает. Проще direct использовать будет =)

kulti ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.