我们有一个 MS Access 考勤数据库,由生物识别硬件更新。所以没有办法替代 MS Access。现在我们需要在我们的 Intranet web 上提供出勤信息,为此我们尝试定期读取 Windows XP 计算机上的 MS-Access mdb 文件,并通过 php 写入 postgres 数据库。PHP - Postgres - Apache 在 Ubuntu 10.04 服务器上运行。html 页面/报告将从服务器显示。当使用 MDB 工具从 php 连接到 MS-Access mdb 文件时,仅返回数字和日期/时间字段(尽管是字符串)。文本字段返回 NULL。
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是Access中的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 并传输数据更好?如果是这样,最好的脚本是什么?