【发布时间】:2016-03-17 00:19:14
【问题描述】:
我们有一个由生物识别硬件更新的 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 中的自动编号; 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
}
其实我有两个问题:
我在使用上述 MDBTools 时会出现什么问题?
或者在 Windows 计算机上运行/调度脚本以通过 odbc 连接到 Access 和 postgres,并传输数据更好?如果是这样,最好的脚本是什么?
【问题讨论】:
标签: php ms-access ubuntu-10.04 mdbtools