2014-09-19 6 views
0

Описание: У меня есть проблема с выполнением подготовленного оператора несколько раз с параметрами привязки. 1-й раз он выполняет правильную настройку, а затем перезагружает параметры, оператор и когда я пытаюсь выполнить тот же подготовленный оператор в следующий раз, когда он не дал такую ​​ошибку.PostgreSQL: ошибка повторного использования подготовленного оператора в postgresql

: Я выполняю подготовленный оператор с привязкой некоторых параметров, после выполнения я отдыхаю подготовленный оператор и отвязывая параметры. при попытке выполнить один и тот же подготовленный оператор он выдает ошибку: «27: Ошибка выбора числового атрибута: ColAttribute для этого типа еще не реализовано». Я использую библиотеку libodbC++. когда я отладки это будет неправильно на этой линии (libodbC++ строка кода)

Line: ResultSet * Rs = ODBCXX_OPERATOR_NEW_DEBUG (FILE, ЛИНИЯ) ResultSet (это, hstmt_, hideMe);

Ошибка: "27: Ошибка получения числового атрибута: ColAttribute для этого типа еще не реализован"

PostgreSQL номер версии вы работаете:

Как вы установили PostgreSQL: PostgreSQL 9.3.5, скомпилированный на Visual C++ строите 1600, 64-разрядные

изменения, внесенные в настройки в файле postgresql.conf: нет

и версия операционной системы: окна 8.1 (64-разрядная версия)

Какую программу вы используете для подключения к PostgreSQL: ODBC 3.5 (libodbC++) библиотека

Есть ли что-нибудь отношение или необычное в логах PostgreSQL сервер: Нет

По вопросам любой вид ошибки:

Что вы делали, когда возникла ошибка/как вызвать ошибку: «27: ошибка выборки числовой атрибут: ColAttribute для этого типа еще не реализован»

Благодарности & С уважением Balakrishna

+0

Можете ли вы предоставить нам подготовленное заявление? – Compass

+0

Кто-то говорит, что это вызвано вызовом функции SQLColAttribute с идентификатором поля, который драйвер не распознает. Это правда? если это то, что является идентификатором поля, поддерживаемым драйвером postgresql? – balakrishna

ответ

0

Проблема заключается в том, как libodbC++ обрабатывает параметры и запросы. Есть два способа исправить это:

1. Upgrade the libodbc++ to use 7.4(V3) protocol. 
2. If you are using old libodbc++, then change disable the UseServerSidePrepare parameter in odbc configuration files. 

Explaination для UseServerSidePrepare = 0 в Odbc конфигурации:

The psqlodbc controls more than just whether to use unnamed or named plans in the server. With UseServerSidePrepare=0, parameters are handled completely in the driver, replacing the parameter markers with the values in the query itself.

Примечание: Там также может быть применений, где UseServerSidePrepare = 1 дает удар по производительности, особенно при работе с серверами < 9.2. Это по-прежнему лучший IMHO по умолчанию, вы все равно можете отключить его, если вам нужно.

PS: Я знаю, что вопрос задавался годами назад, но недавно я столкнулся с той же проблемой и имел очень мало ресурсов, которые фактически работали.