On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 6553
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.12.19 18:54. Заголовок: MiniGui and PostgreSQL


Что то в новой версии МиниГуи стала вылетать программа на МиниГуи.
Или что то изменили в библиотеке PostgreSQL для МиниГуи ?
Вот такая ошибка:
Application: D:\PgSql\Dbf_to_PostgreSQL.exe 
Time from start: 0 days 0 hours 3 mins 55 secs
Error BASE/2020 Неверный аргумент: PQRESULTSTATUS Args: [1] = P 0x0
--------------------------------- Stack Trace ---------------------------------
Called from PQRESULTSTATUS(0)
Called from TPQQUERY:REFRESH(585) in module: tpostgre.prg
Called from TPQQUERY:NEW(546) in module: tpostgre.prg
Called from TPQSERVER:QUERY(199) in module: tpostgre.prg
Called from OPEN_PGTABLE(179) in module: use_Postgres.prg
Called from MYPGSQL(81) in module: Form_PostgreSQL.prg
Called from (b)MAIN(119) in module: main.prg

Куда копать то ?

PS. На одном сервере прога нормально передаёт базу из 90 тыс.записей,
а на другом сервере - валиться с такой ошибкой !
Уменьшил до 30 тыс.записей, всё равно валиться....

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


постоянный участник




Пост N: 6554
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.12.19 20:28. Заголовок: Собрал в новой верси..


Собрал в новой версии МиниГуи проект Convert DBF to PostgreSQL из
http://hmgextended.com/applications.html

Там перестал работать прелодер, т.е показ GIF файлов из модуля WaitThread.prg
Почему ? Как заставить работать на новой версии МиниГуи ?

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




Пост N: 6591
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.02.20 14:06. Заголовок: Всем привет ! Как м..


Всем привет !

Как можно исправить ошибку в исходниках ?
А то теперь периодически падает программа, несколько раз в день.
Вот такая ошибка:


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




Пост N: 6592
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.02.20 15:17. Заголовок: Вот модуль use_Postg..


Вот модуль use_Postgres.prg где происходит ошибка:
// Проверка на существование таблицы 
FUNCTION MyIsTablePg( cNamePgTable, oSrvPg )
LOCAL oTbl, cTable, lSeek := .f.

cTable := LOWER( cNamePgTable )
oTbl := oSrvPg:ListTables() // строка 122
? cNamePgTable
? "Список таблиц сервера PostgreSql :"
?? oTbl ; ? "-"
?v oTbl ; ? "-"

И что здесь править и как ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 62
Зарегистрирован: 24.02.11
ссылка на сообщение  Отправлено: 21.02.20 20:12. Заголовок: PGRESULTSTATUS(0) : ..


PGRESULTSTATUS(0) : насколько я понял по тексту tpostgre.prg - вместо 0 должен стоять результат обычного запроса по выбору имен таблиц. Если 0 - значит запрос по какой-то причине перестает правильно срабатывать. Может сбиваются входные параметры типа схемы или имени базы, может связь с сервером прерывается, а может служебные таблицы блокируются кем-то или чем-то для чтения.

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




Пост N: 6594
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.02.20 13:16. Заголовок: Везде по тексту tpos..


Везде по тексту tpostgre.prg вижу примерно такое:
      result := ( PQresultStatus( res ) == PGRES_COMMAND_OK ) 
в postgres.ch стоит вот так:
/* PQresultStatus() */ 
#define PGRES_EMPTY_QUERY 0
#define PGRES_COMMAND_OK 1
#define PGRES_TUPLES_OK 2
#define PGRES_COPY_OUT 3
#define PGRES_COPY_IN 4
#define PGRES_BAD_RESPONSE 5
#define PGRES_NONFATAL_ERROR 6
#define PGRES_FATAL_ERROR 7

Т.е. возврат должен быть числовой - N

А в ошибке идёт:
Error BASE/2020 Неверный аргумент: PQRESULTSTATUS Args: [1] = P 0x0  
--------------------------------- Stack Trace ---------------------------------
Called from PQRESULTSTATUS(0)

Почему ? И что такое P ?

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




Пост N: 3074
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.02.20 14:54. Заголовок: Andrey пишет И что т..


Andrey пишет
 цитата:
И что такое P ?


Point указатель на память с ответом\результатом вып. команды
METHOD ListTables() CLASS TPQserver
...
res := PQexec( ::pDB, cQuery ) // выясняй, что тут в res

IF PQresultStatus( res ) == PGRES_TUPLES_OK
...

Версии клиента и сервера (dll-ки) совпадают ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 63
Зарегистрирован: 24.02.11
ссылка на сообщение  Отправлено: 25.02.20 18:01. Заголовок: Ошибка возникает при..


Ошибка возникает при использовании метода TPQSERVER:LISTTABLES(). В процессе реализации метода (далее по тексту tpostgre.prg) выполняется запрос к служебной таблице "information_schema.tables". Текст запроса примерно такой:

 цитата:
"SELECT table_name FROM information_schema.tables WHERE table_schema = 'bla-bla-bla' AND table_type = 'BASE TABLE'"


Результатом выполнения запроса является "res" - что-то типа таблицы, из которой потом заносятся имена таблиц в массив "result". Далее идет проверка полученного результата IF ( ::lError := PQresultStatus( res ) != PGRES_TUPLES_OK ). Но вместо "res" передается 0, о чем говорит первая строка сообщения об ошибке, т.е. запрос к служебной таблице не отрабатывает должным образом.
В запросе ломаться нечему, кроме названия схемы ('bla-bla-bla'). Ну или все-таки нарушается связь с сервером.

А каков алгоритм запроса списка таблиц? Он периодически выполняется нормально, а потом в какой-то момент происходит сбой?
Или программа работает, пока нет обращения к списку таблиц и вылетает при первой же попытке?

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




Пост N: 3077
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.02.20 20:51. Заголовок: vvv пишет Но вместо ..


vvv пишет
 цитата:
Но вместо "res" передается 0, о чем говорит первая строка сообщения об ошибке, т.е. запрос к служебной таблице не отрабатывает должным образом.


Если бы был 0, то работала цепочка, выделенная цветом
 
HB_FUNC( PQRESULTSTATUS )
{
PGresult * res = hb_PGresult_par( 1 );

if( res )
hb_retni( PQresultStatus( res ) );
else
hb_errRT_BASE( EG_ARG, 2020, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );

}


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




Пост N: 3078
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.02.20 20:59. Заголовок: PS Возможно, надо ув..


PS
Возможно, надо увеличить время timeout коннекта ?
Или использовать begin sequnce и повторять запрос ?

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




Пост N: 6595
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.02.20 17:04. Заголовок: vvv пишет: А каков ..


vvv пишет:

 цитата:
А каков алгоритм запроса списка таблиц? Он периодически выполняется нормально, а потом в какой-то момент происходит сбой?
Или программа работает, пока нет обращения к списку таблиц и вылетает при первой же попытке?


У многих программа работает без ошибки. 5-6 клиентов.
Только у одного периодически, т.е. несколько раз в день падает программа с такой ошибкой.
Отправка записей происходит каждые 5 минут.
Т.е. есть исправленные записи, то отправляются эти 2-3 записи из базы.
Большая часть идёт без ошибки, только вот несколько раз за день (по разному) падает прога.
Всё таки наверное пропадает коннект к базе.
Вот и хотелось бы поправить исходники, чтобы ошибку локализовать и получить ошибку N, т.е. число а не P.
Как это сделать ?

SergKis пишет:

 цитата:
Возможно, надо увеличить время timeout коннекта ?


Это уже потом можно будет пробовать.
Самое главное, вдруг у других тоже будет такое... И как тогда у них ошибку ловить ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 64
Зарегистрирован: 24.02.11
ссылка на сообщение  Отправлено: 26.02.20 17:24. Заголовок: Отправка записей про..



 цитата:
Отправка записей происходит каждые 5 минут.



По логике при отправке или получении записей нет необходимости перечитывать список таблиц. А вот при кратковременном дисконнекте - вполне.

Ради интереса, попробуй вручную разорвать коннект на работающем компе. Выдаст или нет такую ошибку?

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




Пост N: 3079
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.02.20 19:00. Заголовок: Andrey пишет Вот и х..


Andrey пишет
 цитата:
Вот и хотелось бы поправить исходники, чтобы ошибку локализовать и получить ошибку N, т.е. число а не P.


Там всегда должен быть P, т.к. это адрес памяти с ответом, ответа нет 0 (надо пинговать соединение или увеличить timeout, просто долгий ответ). Свои запросы, как минимум, оберни в begin sequnce и повтори при 0 несколько раз, после паузы, к примеру wApi_Sleep(200) и лог на эту ситуевину. Для проверки соединения, к примеру, спрашивай версию сервера перед запросом, но может есть ф-я для этого с кодами ошибок соединения, я не работал с этим сервером

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 20
Зарегистрирован: 29.11.19
ссылка на сообщение  Отправлено: 01.03.20 14:33. Заголовок: Я сталкивался с подо..


Я сталкивался с подобной проблемой с MS SQL. (работаю через хранимые процедуры ХП).
Решилась довольно просто. Перед вызовом ХП запрашиваю входные-выходные параметры ХП
и если запрос возвращает не ожидаемый тип данных, разрушаю коннект и с задержкой 3 раза пытаюсь
создать новый, если успешно продолжаю, если нет ошибка.
Это конечно не устранит ошибку в сети, это чаще всего не контакт в кабелях
искать лучше всего через пинг с ключём /t (если есть разрывы будет видно)

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 95
Зарегистрирован: 22.04.15
ссылка на сообщение  Отправлено: 06.03.20 13:52. Заголовок: Была типичная ошибка..


Была типичная ошибка, проблема была - не в проге, а в железке)
Выяснил, оказалось проблема была в материнке, в определенные моменты вылетала сетка (оказалось изначальная болезнь материнки - сетевая карта - решил установкой старого драйвера которое поставлялось с материнкой),
еще также возникали проблемы из-за сетки :) (контакты, кабель, ...) и т.д.
Проверь, возможно дело не в проге...

*Также, для заметки по MS Ofiice - если MS Office(Word, Excel) проблемы с лицензией, та же проблема :) вылетает ошибка - решается либо ввести лицензию, либо переустановить офис если пиратка :)

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




Пост N: 6939
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.04.21 23:40. Заголовок: Как в Харборе при ло..


Как в Харборе при логине к базе PostgreSQL задать имя проги ?
Пробовал так:
// сделано специально, т.к. в TPQServer():NEW() нельзя задать timeout  
conn := PQconnectdb( "dbname = " + cDatabase + " host = " + cHost + " user = " + cUser + ;
" password = " + cPass + " port = " + cPort + " connect_timeout = " + cTimeout + ;
" application_name = myProga" )
IF PQstatus( conn ) != CONNECTION_OK
...
ENDIF
M->oServer := TPQServer():NEW( cHost, cDatabase, cUser, cPass,, schema )

? "New TPQServer() PQstatus( oServer:pDb() ) = ", PQstatus( M->oServer:pDb() )

Коннект проходит, но в утилите pgAdmin 4 v 1 всё равно нет имени проги.
Кто знает как можно это сделать ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7322
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.04.21 22:35. Заголовок: Andrey пишет: Кто з..


Andrey пишет:

 цитата:
Кто знает как можно это сделать ?


Может так
PQexec( "SET application_name='myProga'" )

Andrey пишет:

 цитата:
" application_name = myProga" )


Не факт но возможно тут тож кавычки нужны
" application_name = 'myProga'" )

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


Пост N: 1658
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 17.04.21 14:09. Заголовок: Andrey пишет: // сд..


Andrey пишет:

 цитата:
// сделано специально, т.к. в TPQServer():NEW() нельзя задать timeout


You are totally wrong

METHOD New( cHost, cDatabase, cUser, cPass, nPort, cSchema, hCustom ) CLASS TPQserver

hCustom := { "connect_timeout" => cTimeout, "application_name" => "myProga" }

oServer := TPQServer():NEW( cHost, cDatabase, cUser, cPass,, schema, hCustom)
и дальше проверка на отсутствие ошибок соединения

Вы построчно можете описать, что делает ваш код?
И объяснить связь между conn и M->oServer?

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




Пост N: 6942
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.04.21 18:10. Заголовок: Петр пишет: И объяс..


Петр пишет:

 цитата:
И объяснить связь между conn и M->oServer?


Подозревал я что неправильно написал, т.е. 2 раза делаю коннект базе, да не знал как правильно делать.
Давно это было, ещё в 2015-2016 годах.
До сих пор код работал и заказчиков устраивал.
Но нужно было заменить кое что и пришлось править весь код.
Спасибо БОЛЬШОЕ Петр !

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




Пост N: 6949
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.05.21 18:06. Заголовок: Петр пишет: hCustom..


Петр пишет:

 цитата:
hCustom := { "connect_timeout" => cTimeout, "application_name" => "myProga" }


Переделал свою прогу.
Нет в PG admine 4 имя проги конекта к базе. Пустота.

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

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