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




Пост N: 4890
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.05.16 14:39. Заголовок: MiniGui + PostgreSQL


Кому будет интересно.
https://habrahabr.ru/post/282764/

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 133 , стр: 1 2 3 4 5 6 7 All [только новые]


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


Пост N: 1279
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 03.09.16 16:04. Заголовок: Andrey пишет: Подск..


Andrey пишет:

 цитата:
Подскажите (помогите) сделать пожалуйста эту функцию для tpostgre.prg из MiniGUI\SOURCE\HbPgSql



скачайте архив #1

В архиве 2 пакетных файла: MakeLib.bat и to_95.bat
Поместите их в MiniGUI\SOURCE\HbPgSql, заменив при этом оригинальный MakeLib.bat

Запустите на выполнение to_95.bat
В каталоге MiniGUI\SOURCE\HbPgSql будут созданы 2 каталога 8.4 и 9.5. Часть файлов будут перемещены в 8.4. Посмотрите как выглядит каталог 8.4.

скачайте архив #2
Разместите файлы из архива в MiniGUI\SOURCE\HbPgSql\9.5. Структура каталога 9.5 должна напоминать структуру каталога 8.4

Откомпилируйте библиотеку hbpgsql (через MakeLib.bat)

Убедитесь, что все компилируется нормально и библиотеки создаются.

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


Пост N: 1280
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 03.09.16 16:16. Заголовок: Если все "хорошо..


Если все "хорошо", можете добавить нужную вам функциональность в postgres.c


 цитата:
HB_FUNC( PQPING ) 
{
#if PG_VERSION_NUM >= 90100
if( HB_ISCHAR( 1 ) )
hb_retni( PQping( hb_parc( 1 ) ) );
else
hb_errRT_BASE( EG_ARG, 2020, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
#else
hb_retni( 2 );
#endif
}




ну и пересобрать библиотеку, конечно.

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




Пост N: 5082
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.09.16 00:04. Заголовок: Петр пишет: ну и пе..


Петр пишет:

 цитата:
ну и пересобрать библиотеку, конечно.



Всё заработало !
Спасибо ОГРОМНОЕ !

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


Пост N: 1281
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 04.09.16 09:33. Заголовок: Andrey пишет: Всё з..


Andrey пишет:

 цитата:
Всё заработало !


ну и чудненько. Теперь можете попробовать убедить Григория внести изменения в MakeLib.bat и в структуру каталога HbPgSQL.
Для совместимости можно оставить
set PQ_VER=8.4

Andrey пишет:

 цитата:
hLib := hb_libLoad( "libpq.dll" )
? GetPingResult( hb_DynCall( { "PQping", hLib, HB_DYN_CTYPE_CHAR }, c )

Неудобно уж очень.


Позвольте не согласиться. Вот так как вы изобразили - может быть, НО ЕСЛИ прописать где-то в tpostgre.prg


 цитата:
FUNCTION _PQping( cConnInfo )
RETURN hb_DynCall( { "PQping", "libpq.dll", HB_DYN_CTYPE_INT }, cConnInfo )


или просто добавить в начале приложения (или в каком-то включаемом файле *.ch) строку

 цитата:
#translate _PQPing( <cConnInfo> ) => hb_DynCall( { "PQping", "libpq.dll", HB_DYN_CTYPE_INT }, <cConnInfo> )


врядли вы сможете ощутить значительные неудобства при вызове _PQping( cConnInfo ) в сравнении с PQping( cConnInfo ).

Уже знакомый вам пример (можно включить в поставку MiniGUI, хуже не будет )

P.S. в вашем случае переход на старшую версию вполне оправдан.

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




Пост N: 5083
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.09.16 16:55. Заголовок: Петр пишет: P.S. в ..


Петр пишет:

 цитата:
врядли вы сможете ощутить значительные неудобства при вызове _PQping( cConnInfo ) в сравнении с PQping( cConnInfo ).


Я понял подход. Про это не подумал сразу. Спасибо !

Петр пишет:

 цитата:
P.S. в вашем случае переход на старшую версию вполне оправдан.


Спасибо !
Функция PQping() прекрасно ловит потерю связи с сервером, да и GetPingResult() тоже классная функция !

cStaticConnInfo := hb_strFormat( "hostaddr = %1$s port = %2$s connect_timeout = %3$s", cHost, cPort, cTimeout )
res := PQping( cStaticConnInfo ) // проверка доступности сервера
IF res == PQPING_OK
// можно работать с сервером
ELSE
cMsg := "Ошибка сервера: " + GetPingResult( res )
MsgStop(cMsg)
? cMsg
ENDIF

Пришлось внести изменения в postgres.ch:
/* From libpq-fe.h
* PGPing - The ordering of this enum should not be altered because the
* values are exposed externally via pg_isready. For version 9
*/
#define PQPING_OK 0
#define PQPING_REJECT 1
#define PQPING_NO_RESPONSE 2
#define PQPING_NO_ATTEMPT 3


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


Пост N: 1284
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 04.09.16 17:21. Заголовок: Andrey пишет: Функц..


Andrey пишет:

 цитата:
Функция PQping() прекрасно ловит потерю связи с сервером


это хорошо, НО
Andrey пишет:

 цитата:
res := PQexec( ::pDB, "COMMIT" ) // Строка 167
lError := PQresultStatus( res ) != PGRES_COMMAND_OK // Строка 168

Как в исходнике убрать ошибку или не надо убирать ?


ошибку все равно убрать нужно

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




Пост N: 5084
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.09.16 18:49. Заголовок: Петр пишет: ошибку ..


Петр пишет:

 цитата:
ошибку все равно убрать нужно


Да не знаю как...

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




Пост N: 5094
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.09.16 18:26. Заголовок: Столкнулся с большой..


Столкнулся с большой проблемой...
Использую Tsbrowse по базе PostgreSQL - работает...
Но происходит вылет(закрывается по ошибке) если нет открытого dbf-файла.
По исходнику h_tbrowse.prg вылет происходит так:
Error DBCMD/2001 Файл не открыт: ORDSETFOCUS
Called from ORDSETFOCUS(0)
Called from (b)TSBROWSE_SETDBF(11389)
Called from TSBROWSE:NLOGICPOS(7320)
Called from TSBROWSE:LBUTTONDOWN(6926)
Called from TCONTROL:HANDLEEVENT(902)
Called from TSBROWSE:HANDLEEVENT(7399)
Called from EVENTS(79)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1395)
Called from DOMETHOD(4651)
Called from FORM_PGSQL(167)
Called from MYPGSQL(97)


Вылет понятен, так как в исходнике ничего не прописано про PostgreSQL
If "ADS" $ ::cDriver
...
Else
::bTagOrder := {|uTag| ( cAlias )->( OrdSetFocus( uTag ) ) }, ;
::bGoToPos := {|n| Eval( ::bKeyNo, n ) }
EndIf

Как туда можно прикрутить PostgreSQL ?

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



Пост N: 1227
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.09.16 18:57. Заголовок: Andrey пишет: Но про..


Andrey пишет:
 цитата:
Но происходит вылет(закрывается по ошибке) если нет открытого dbf-файла.
По исходнику h_tbrowse.prg вылет происходит так:
Error DBCMD/2001 Файл не открыт: ORDSETFOCUS


Так dbf или индекс не открыт ? Определись.


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




Пост N: 5095
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.09.16 19:41. Заголовок: На экране открываю 2..


На экране открываю 2 бровса. Второй с PostgreSQL.
FUNCTION Form_PgSql()
....
DEFINE TBROWSE oBrw2 ;
....
MyCreateTable2(...)
END TBROWSE
....
STATIC FUNCTION MyCreateTable2(...)
...
// создать первую колонку с номером в таблице
ADD COLUMN TO oBrw2 HEADER "№№" ;
DATA { || oQuery:RECNO() } ;
...
// создать другие колонки
PGLoadFields( "oBrw2", cForm, .T. )
...
Первое окно с Dbf закрываю. На экране остаётся второй Tsbrowse. Вот он и ломается !
Хотя переменные разные: oBrw1 и oBrw2




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



Пост N: 1228
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.09.16 19:44. Заголовок: Andreyпишет DEFINE T..


Andreyпишет
 цитата:
DEFINE TBROWSE oBrw2 ;


хотелось уточнить что там дальше в ALIAS

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




Пост N: 5098
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.09.16 22:15. Заголовок: Потом программа выле..


Ставлю проверку:
cAlias := ::cAlias
::cDriver := ( ::cAlias )->( RddName() )
MsgDebug( cAlias, ::cDriver )

Выводит - DBF2TEST, DBFCDX

Потом программа вылетает вот так:
Error BASE/1003 Переменная не существует: OQUERY
Called from (b)MYCREATETABLE2(225)
Called from TSBROWSE:DRAWLINE(2942)
Called from TSBROWSE:LBUTTONDOWN(6920)
Called from TCONTROL:HANDLEEVENT(902)
Called from TSBROWSE:HANDLEEVENT(7399)
Called from EVENTS(79)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1395)
Called from DOMETHOD(4651)
Called from MYTABLEDBF(107)

Т.е. вот эта строка -
ADD COLUMN TO oBrw2 HEADER "№№" ;
DATA { || oQuery:RECNO() } ;
...


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




Пост N: 6005
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.09.16 22:44. Заголовок: Andrey пишет: Error..


Andrey пишет:

 цитата:
Error BASE/1003 Переменная не существует: OQUERY


а она есть ?

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




Пост N: 5099
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.09.16 23:16. Заголовок: Dima пишет: а она е..


Dima пишет:

 цитата:
а она есть ?



Есть. Объект не удалял.




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


Пост N: 1051
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.09.16 09:28. Заголовок: Andrey пишет: Есть...


Andrey пишет:

 цитата:
Есть. Объект не удалял.


Весь код давай , а то тут все в угадайку играют

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




Пост N: 6006
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.09.16 16:06. Заголовок: А если ее сделать не..


А если ее сделать не Private а Public и убрать Static у этой функции...

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




Пост N: 5100
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.09.16 16:16. Заголовок: Dima пишет: А если ..


Dima пишет:

 цитата:
А если ее сделать не Private а Public и убрать Static у этой функции...



Какая разница. Это же в тексте этого модуля происходить.
Там кажись теряется весь объект oServer := TPQServer():NEW()



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



Пост N: 1229
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.09.16 16:17. Заголовок: Dima пишет А если ее..


Dima пишет
 цитата:
А если ее сделать не Private а Public и убрать Static у этой функции...


Не поможет, т.к.
1. алиас oBrw2 прицепился к алиасу oBrw1
2. блоки кодов управления заполнены на дбф (а здесь переменная объект запроса к постгрес)
3. Возможно надо исп. ole
If Upper( uAlias:ClassName() ) == "TOLEAUTO"
cAlias := "ADO_"
::oRSet := uAlias
EndIf
4. Возможно проще обойтись массивом и как писап Петр ограниченным запросом LIMIT 100


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




Пост N: 5101
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.09.16 16:24. Заголовок: Нашёл в \hmg.3.4..


Нашёл в \hmg.3.4.3\SAMPLES\HFCL\SQL\POSTGRESQL_1\demo.prg

такую строчку:
nConnectionHandle := dbPGConnection( cServer + ";" + cDataBase + ";" + cUser + ";" + cPassWord )

CreateTable( cServer , cDataBase , cUser , cPassWord )

USE "SELECT * FROM test ;" ALIAS Test NEW VIA "pgrdd" CONNECTION nConnectionHandle

Что за фокус такой, открывать "SELECT * FROM test ;" ?

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


Пост N: 1292
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 10.09.16 18:13. Заголовок: Andrey пишет: Что з..


Andrey пишет:

 цитата:
Что за фокус такой, открывать "SELECT * FROM test ;" ?


Андрей, скачайте, наконец, с помощью git сырцы harbour, посмотрите contrib rddsql/sddpg и не морочьте голову людям своими (чужими) строчками.

По существу - это какое-то PGRDD (VIA "pgrdd"), скорее всего на базе RDDSQL, украшенное препроцессором


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

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