Автор | Сообщение |
|
| постоянный участник
|
Пост N: 4890
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.05.16 14:39. Заголовок: MiniGui + PostgreSQL
|
|
|
Ответов - 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) Убедитесь, что все компилируется нормально и библиотеки создаются.
|
|
|
|
| постоянный участник
|
Пост 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 } |
| ну и пересобрать библиотеку, конечно.
|
|
|
|
| постоянный участник
|
Пост N: 5082
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.09.16 00:04. Заголовок: Петр пишет: ну и пе..
Петр пишет: цитата: | ну и пересобрать библиотеку, конечно. |
| Всё заработало ! Спасибо ОГРОМНОЕ !
|
|
|
|
| постоянный участник
|
Пост 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. в вашем случае переход на старшую версию вполне оправдан.
|
|
|
|
| постоянный участник
|
Пост 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
|
|
|
|
| постоянный участник
|
Пост 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 Как в исходнике убрать ошибку или не надо убирать ? |
| ошибку все равно убрать нужно
|
|
|
|
| постоянный участник
|
Пост N: 5084
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.09.16 18:49. Заголовок: Петр пишет: ошибку ..
Петр пишет: цитата: | ошибку все равно убрать нужно |
| Да не знаю как...
|
|
|
|
| постоянный участник
|
Пост 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 ?
|
|
|
|
| постоянный участник
|
Пост N: 1227
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.09.16 18:57. Заголовок: Andrey пишет: Но про..
Andrey пишет: цитата: | Но происходит вылет(закрывается по ошибке) если нет открытого dbf-файла. По исходнику h_tbrowse.prg вылет происходит так: Error DBCMD/2001 Файл не открыт: ORDSETFOCUS |
| Так dbf или индекс не открыт ? Определись.
|
|
|
|
| постоянный участник
|
Пост 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
|
|
|
|
| постоянный участник
|
Пост N: 1228
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.09.16 19:44. Заголовок: Andreyпишет DEFINE T..
Andreyпишет хотелось уточнить что там дальше в ALIAS
|
|
|
|
|
| постоянный участник
|
Пост 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() } ; ...
|
|
|
|
| |
Пост N: 6005
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.09.16 22:44. Заголовок: Andrey пишет: Error..
Andrey пишет: цитата: | Error BASE/1003 Переменная не существует: OQUERY |
| а она есть ?
|
|
|
|
| постоянный участник
|
Пост N: 5099
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.09.16 23:16. Заголовок: Dima пишет: а она е..
Dima пишет: Есть. Объект не удалял.
|
|
|
|
| |
Пост N: 1051
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.09.16 09:28. Заголовок: Andrey пишет: Есть...
Andrey пишет: Весь код давай , а то тут все в угадайку играют
|
|
|
|
| |
Пост N: 6006
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.09.16 16:06. Заголовок: А если ее сделать не..
А если ее сделать не Private а Public и убрать Static у этой функции...
|
|
|
|
| постоянный участник
|
Пост N: 5100
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.09.16 16:16. Заголовок: Dima пишет: А если ..
Dima пишет: цитата: | А если ее сделать не Private а Public и убрать Static у этой функции... |
| Какая разница. Это же в тексте этого модуля происходить. Там кажись теряется весь объект oServer := TPQServer():NEW()
|
|
|
|
| постоянный участник
|
Пост 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
|
|
|
|
| постоянный участник
|
Пост 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 ;" ?
|
|
|
|
| постоянный участник
|
Пост N: 1292
Зарегистрирован: 09.10.06
|
|
Отправлено: 10.09.16 18:13. Заголовок: Andrey пишет: Что з..
Andrey пишет: цитата: | Что за фокус такой, открывать "SELECT * FROM test ;" ? |
| Андрей, скачайте, наконец, с помощью git сырцы harbour, посмотрите contrib rddsql/sddpg и не морочьте голову людям своими (чужими) строчками. По существу - это какое-то PGRDD (VIA "pgrdd"), скорее всего на базе RDDSQL, украшенное препроцессором
|
|
|
Ответов - 133
, стр:
1
2
3
4
5
6
7
All
[только новые]
|
|