Форум » GUI » Постоянный NetError в PostgreSQL (MiniGUI 17.02) » Ответить

Постоянный NetError в PostgreSQL (MiniGUI 17.02)

SkyNET: Здравствуйте. Обнаружил баг в последней версии MiniGUI 17.02 (2017.02.28). Для воспроизведения достаточно собрать пример PostgreSQL из папки BASIC и запустить с рабочими настройками. На запросах DROP и CREATE будет срабатывать NetErr() с пустым ErrorMsg. Причина бага кроется в файле SOURCE\HbPgSql\tpostgre.prg. А именно в методе Refresh класса TPQuery который выполняется при каждом TPQServer::Execute. Примерно 679 строка: [pre] IF ::nResultStatus == PGRES_TUPLES_OK ... ELSE IF ( ::lError := ::nResultStatus == PGRES_COMMAND_OK ) ::cError := "" ::rows := Val( PQcmdTuples( res ) ) ELSE ::cError := PQresultErrorMessage( res ) ENDIF ENDIF [/pre] Ошибка заключается в том, что lError должен принимать значение .T. только при наличии ошибки, а в данном случае он принимает .T. и при ::nResultStatus == PGRES_COMMAND_OK (любой запрос, не возвращающий данные). В исходниках Harbour на GitHub данный баг отсутствует: [pre] IF ::nResultStatus == PGRES_TUPLES_OK ... ELSEIF ::nResultStatus == PGRES_COMMAND_OK ::lError := .F. ::cError := "" ::rows := Val( PQcmdTuples( res ) ) ELSE ::lError := .T. ::cError := PQresultErrorMessage( res ) ENDIF[/pre] Откуда он тогда появился в MiniGUI?

Ответов - 3

gfilatov2002: SkyNET пишет: Причина бага кроется в файле SOURCE\HbPgSql\tpostgre.prg Благодарю за сообщение! SkyNET пишет: Откуда он тогда появился в MiniGUI? Эти изменения в классе TPQuery взяты из Харбора 3.4 (очередная оптимизация Виктора )

Andrey: Всем привет ! Вот ещё одна непонятка с проектом. Собираю проект для работы с PgSql, указываю свои библиотеки как обычно: [pre2]# extension *.L i b PostgreSQL -lhbpgsql -llibpq[/pre2] Собирается проект без ошибок, а при запуске проги - вот такая ошибка: Что за номер 168 такой ? Как побороть проблему эту ? Эти же самые библиотеки использую в других проектах. Там нормально... Вот сборка моего проекта: [pre2]# Включить multi/single-thread Harbour VM -mt # Incremental-режим компиляции -inc ..... # paths to the main and extension *.Lib -lminigui -ltsbrowse -lTbrw_Table2.lib -lhbole -lxhb -lhbwin # extension *.L i b PostgreSQL -lhbpgsql -llibpq[/pre2]

Andrey: Блин... Нашёл баг... Если в папке нет файла библиотеки hbpgsql.lib, то проект всё равно собирается !!! Почему ?




полная версия страницы