У нас есть база данных посещаемости MS Access, которая обновляется с помощью биометрического оборудования. Таким образом, нет возможности заменить MS Access. Теперь нам нужно предоставить информацию о посещаемости в нашей сети интрасети, для которой мы пытаемся периодически читать файл MSD-Access mdb на компьютере под управлением Windows XP и записывать в базу данных postgres через php. PHP - Postgres - Apache работает на сервере Ubuntu 10.04. html-страницы/отчеты должны отображаться с сервера. При использовании инструментов MDB для подключения к файлу mdb MS-Access с php возвращаются только поля Number и Date/Time (хотя в качестве String). Текстовые поля возвращают NULL.Драйвер MDBTools не возвращает строковые значения с PHP MS-Access
код PHP выглядит следующим образом:
$dbName = "/media/winshare/attEngine.mdb";
if (!file_exists($dbName))
die("Could not find database file.");
$dbconn = new PDO("odbc:DRIVER=MDBTools; DBQ=$dbName; Uid=admin; Pwd=pswd;");
if ($dbconn) {
echo "mdb connection established.<br />\n";
} else {
die ("mdb connection could not be established.<br />\n");
}
$qry = "SELECT transactionId, aDate, aDateTime, EmpCode, EmpName, ControllerNum FROM Transactions;";
$dbqryprep = $dbconn->prepare($qry);
$dbqryprep->execute();
$result = $dbqryprep->fetchall(PDO::FETCH_ASSOC);
echo "QRY RESULT (from Access):<pre>\n";
var_dump($result);
echo "\n</pre>\n";
Здесь: TransactionID является AutoNumber в доступе; aDate, aDateTime - дата/время; EmpCode - номер; и EmpName и ControllerNum - это текстовые поля в Access.
Когда мы загружаем PHP, это дает результат следующим образом (только первые два массива элементов показаны):
mdb connection established.
QRY RESULT (from Access):
array(31986) {
[0]=> array(7) {
["transactionId"]=> string(3) "341"
["aDate"]=> string(17) "11/23/13 00:00:00"
["aDateTime"]=> string(17) "11/23/13 13:01:07"
["EmpCode"]=> string(1) "0"
["EmpName"]=> NULL
["ControllerNum"]=> NULL
}
[1]=> array(7) {
["transactionId"]=> string(3) "342"
["aDate"]=> string(17) "11/23/13 00:00:00"
["aDateTime"]=> string(17) "11/23/13 13:01:12"
["EmpCode"]=> string(1) "0"
["EmpName"]=> NULL
["ControllerNum"]=> NULL
}
На самом деле у меня есть 2 вопроса:
Что может быть проблема в моем использовании MDBTools, как указано выше?
Или лучше запускать/планировать сценарии на компьютере Windows для подключения через odbc к Access и postgres, а также для передачи данных? Если да, то для чего это лучшие сценарии?
Спасибо за подробный ответ. Но я не могу контролировать исходную базу данных доступа, чтобы ограничить длину текстовых столбцов, поскольку она предоставляется поставщиком оборудования, поэтому я продолжаю использовать решение на базе Windows! – kpk