Здравствуйте!
Знатоки PostgreSQL, возможна ли работа Visual FoxPro и PostgreSQL, если да, то как.
Имеется виду как правильно и грамотно и по какой схеме можно развернуть.
Порядок вот этого всего, с чего начать.
Чтобы моя база работала на PostgreSQL.
Буду рад любому совету...
Спасибо!
Насколько я знаю - это
Насколько я знаю - это невозможно. FoxPro работает только со своими БД и не умеет работать с PostgreSQL.
http://forum.foxclub.ru/read.
http://forum.foxclub.ru/read.php?29,536535,536569#msg-536569 - форум по FoxPro - по этой ссылке код соединения.
vfp
через драйвера ODBC из vfp можно подключится ко всему в том числе и к postgreSQL
так что для начала качнуть odbc драйвер и через добавление нового источника данных (не помню точно как правильно называлось) подключится
подключить можно через ОДВС
LOCAL lcPGSQLconnect, lnHandle, laError(1)
LOCAL lnRegion, lcSelect, lnBegin, lnEnd, i
*!* Соединение с PostgreSQL-базой данных StoreRoom посредством использования строки соединения
lcPGSQLconnect = "DRIVER=PostgreSQL ANSI;SERVER=111.111.1.111;PORT=5432" + ;
";DATABASE=имя_базы;UID=postgres;PWD=postgres"
*!* lcPGSQLconnect = "DSN=us_StoreRoom;SERVER=localhost;PORT=5432" + ;
*!* ";DATABASE=StoreRoom;UID=postgres;PWD=SysAdmin"
*!* ВНИМАНИЕ!Добавление в lcPGSQLconnect фрагмента ";C8=1" приводит к ошибкам выполнения SQLEXEC().
lnHandle = SQLSTRINGCONNECT(lcPGSQLconnect,.T.)
IF lnHandle > 0
MESSAGEBOX("Соединение с PostgreSQL-базой данных StoreRoom установлено!",64,"Сообщение")
lnReg = 1
* собственно запрос
lcSelect = [SELECT * FROM street ]
* lcSelect = [SELECT vccomment FROM zconvlog where istplogff=1 ]
IF SQLPREPARE(lnHandle,lcSelect,"PGSQLresult") = 1
FOR i = 1 TO 1
lnReg = 5*i
lnBegin = SECONDS()
* COPY TO fff
IF SQLEXEC(lnHandle) = 1
lnEnd = SECONDS()
* COPY TO fff1
* BROWSE NORMAL
COPY TO fff
WAIT WINDOW "Область #" + TRANSFORM(lnReg) + ;
" Число записей: " + CHR(13) + ;
"Время исполнения запроса: "+ TRANSFORM(lnEnd - lnBegin)
ELSE
= AERROR(laError)
MESSAGEBOX("Ошибка выполнения SQLEXEC()!" + CHR(13) + ;
REPLICATE("=",40) + CHR(13) + laError(2),48,"Предупреждение")
ENDIF
ENDFOR
ELSE
= AERROR(laError)
MESSAGEBOX("Ошибка выполнения SQLPREPARE()!" + CHR(13) + ;
REPLICATE("=",40) + CHR(13) + laError(2),48,"Предупреждение")
ENDIF
*!* Разрыв соединения с PostgreSQL-базой данных StoreRoom
IF SQLDISCONNECT(lnHandle) = 1
lnHandle = .NULL.
MESSAGEBOX("Соединение с PostgreSQL-базой данных StoreRoom разорвано!",64,"Сообщение")
ELSE
MESSAGEBOX("Соединение с PostgreSQL-базой данных StoreRoom не разорвано!",48,"Предупреждение")
ENDIF
ELSE
= AERROR(laError)
MESSAGEBOX("Соединение с PostgreSQL-базой данных StoreRoom не установлено!" + CHR(13) + ;
REPLICATE("=",40) + CHR(13) + laError(2),48,"Предупреждение")
ENDIF
USE IN SELECT("PGSQLresult")
*Здесь после SQLPREPARE() время исполнения 5-ти запросов лежит в диапазоне от 1.3 до 1.4 сек., при этом установка C8=1 (Use serverside prepare) приводит к краху исполнения 2-го и последующих запросов.
вот примерный текст для фокса