Прочитайте foxpro DB используя php / Java - PullRequest
2 голосов
/ 10 февраля 2010

Я ищу фрагмент кода / библиотеку для чтения данных из сторонней БД foxpro по сети, используя php / Java с сервера Linux. Есть ли в наличии библиотека? Некоторые люди, кажется, используют библиотеку Dbase для php? Это работает?

Какие параметры мне нужны из БД Foxpro, кроме стандартных (имя базы данных, имя пользователя, пароль). Имя DBF, строка подключения ??

Ответы [ 5 ]

5 голосов
/ 26 июня 2010

Некоторое время назад я искал то же решение и зашел в тупик. Я хотел решение, которое работает с PHP, хотя.
Некоторые из них, которые я попробовал, были
1. Драйверы Xbase : они хорошо работали для простых DBF, но тогда они не поддерживают более новые типы данных, такие как поля DateTime, поэтому этот параметр был исключен.
2. Драйвер ODBC для VFP : Это хорошо работает, если вы работаете с более старой версией VFP, так как разработка этой версии остановлена, и она не поддерживает более новые поля автоинкремента. и вы продолжаете получать странные ошибки, такие как «Не стол», который сводит вас с ума. «Драйвер VFP ODBC не поддерживает таблицы с полями автоинкремента»
3. Коммерческие инструменты : Есть много других коммерческих вариантов, которые, очевидно, не будут работать для меня
4. Бесплатные инструменты (DBF в CSV) , которые преобразуют DBF в CSV или аналогичный файл, но тогда это будет работать, если вы делаете только выбор. Вы не можете делать какие-либо обновления.

Последний вариант, который наконец-то сработал для меня, был: Visual Foxpro OLE Driver.

Вы можете установить драйвер OLE с здесь . Пример кода выглядит как

$conn = new COM("ADODB.Connection");
$conn->Open('Provider=VFPOLEDB.1;Data Source="C:\\testDB.dbc";'); 

$query = "SELECT * FROM TABLE1 ";
$rs = $conn->Execute($query) or die("Error in query: $query. " . $conn->ErrorMsg());
while (!$rs->EOF) {
    echo " Got COL1: " . $rs->Fields("COL1") . " :: COL2: " . $rs->Fields("COL2") . " id: " . $rs->Fields("ID") . "\n";
    $rs->MoveNext();
}

$query = "UPDATE TABLE1 set COL1 = \"AA\", COL2 = \"Updated value\" ";
$conn->Execute($query);

Я не нашел никакой документации по php, но вы могли бы обратиться к MSDN ADO API и используйте аналогичный API, особенно если вы хотите выполнять операции на основе транзакций.

$conn->BeginTrans();
..
..
$conn->CommitTrans();
or 
$conn->RollbackTrans();
3 голосов
/ 26 июня 2010

XBaseJ может быть тем, что вы ищете. Это открытый исходный код, и он довольно хорош - я использую его в нескольких приложениях, где клиенты все еще используют 15-летние приложения FoxPro.

1 голос
/ 30 марта 2010

Лучший способ, который я нашел, - это настроить сервер MSSQL в качестве связанного сервера в базе данных Foxpro. MSSQL находится на той же машине, что и foxpro. Запросы отправляются на сервер MSSQL. Я использую бесплатный. Вероятно, у меня была та же проблема, с которой вы сталкиваетесь ... получение текущих данных Foxpro по сети.

1 голос
/ 10 февраля 2010

Возможно, вы захотите сообщить нам, в какой версии FoxPro создаются данные. Таблицы FoxPro для DOS отличаются от таблиц Visual FoxPro, если они содержатся в контейнере базы данных (DBC).

Таблицы DOS могут быть доступны с помощью инструментов DBase, поскольку они действительно имеют некоторую совместимость.

Вот ссылка на пример доступа к данным Visual FoxPro. Он также должен работать с FoxPro для данных DOS.

http://social.msdn.microsoft.com/Forums/en/visualfoxprogeneral/thread/821a3cb7-2f25-4cc9-b3a6-ec4551013d2a

Рик Шуммер

0 голосов
/ 20 января 2016

Смотрите этот ответ на похожий вопрос: https://stackoverflow.com/a/21945208/1456887

В основном:

  • драйверы FoxPRO OLE DB
  • JACOB версии 1.17 или лучше
  • исправить строку подключения.
...