On-line: Andrey, гостей 0. Всего: 1 [подробнее..]
АвторСообщение





Пост N: 104
Зарегистрирован: 23.06.08
ссылка на сообщение  Отправлено: 06.03.17 15:54. Заголовок: Постоянный NetError в PostgreSQL (MiniGUI 17.02)


Здравствуйте.
Обнаружил баг в последней версии MiniGUI 17.02 (2017.02.28).
Для воспроизведения достаточно собрать пример PostgreSQL из папки BASIC и запустить с рабочими настройками.
На запросах DROP и CREATE будет срабатывать NetErr() с пустым ErrorMsg.

Причина бага кроется в файле SOURCE\HbPgSql\tpostgre.prg.
А именно в методе Refresh класса TPQuery который выполняется при каждом TPQServer::Execute.
Примерно 679 строка:
    IF ::nResultStatus == PGRES_TUPLES_OK 
...
ELSE
IF ( ::lError := ::nResultStatus == PGRES_COMMAND_OK )
::cError := ""
::rows := Val( PQcmdTuples( res ) )
ELSE
::cError := PQresultErrorMessage( res )
ENDIF
ENDIF

Ошибка заключается в том, что lError должен принимать значение .T. только при наличии ошибки, а в данном
случае он принимает .T. и при ::nResultStatus == PGRES_COMMAND_OK (любой запрос, не возвращающий данные).

В исходниках Harbour на GitHub данный баг отсутствует:

    IF ::nResultStatus == PGRES_TUPLES_OK 
...
ELSEIF ::nResultStatus == PGRES_COMMAND_OK
::lError := .F.
::cError := ""
::rows := Val( PQcmdTuples( res ) )
ELSE
::lError := .T.
::cError := PQresultErrorMessage( res )
ENDIF

Откуда он тогда появился в MiniGUI?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 3 [только новые]


moderator




Пост N: 1072
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.03.17 18:47. Заголовок: SkyNET пишет: Причи..


SkyNET пишет:

 цитата:
Причина бага кроется в файле SOURCE\HbPgSql\tpostgre.prg


Благодарю за сообщение!

SkyNET пишет:

 цитата:
Откуда он тогда появился в MiniGUI?


Эти изменения в классе TPQuery взяты из Харбора 3.4 (очередная оптимизация Виктора )

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5347
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.04.17 19:51. Заголовок: Всем привет ! Вот е..


Всем привет !

Вот ещё одна непонятка с проектом. Собираю проект для работы с PgSql, указываю свои библиотеки как обычно:
# extension *.L i b  PostgreSQL 
-lhbpgsql
-llibpq

Собирается проект без ошибок, а при запуске проги - вот такая ошибка:


Что за номер 168 такой ?
Как побороть проблему эту ?

Эти же самые библиотеки использую в других проектах. Там нормально...
Вот сборка моего проекта:
# Включить 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



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5348
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.04.17 21:02. Заголовок: Блин... Нашёл баг.....


Блин... Нашёл баг...

Если в папке нет файла библиотеки hbpgsql.lib, то проект всё равно собирается !!!

Почему ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 7
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет