我曾经帮助一位客户将 mdb 表数据导出到 csv 文件(然后进一步处理这些 csv 文件)。我用过 Ubuntu,所以我可以使用 mdbtools(mdb 查看器)。现在客户希望我以 Windows 程序的形式自动化我所做的工作。我遇到了两个问题:
几个小时后,我仍然没有在 Windows 上找到可以以我可以合并到程序/脚本中的方式导出我的表数据的免费工具。Jackcess (jackcess.sourceforge.net) 看起来很有希望,但是当运行下载的 jar 时,会弹出一个完全不相关的诺基亚套件程序...
我已经设法通过使用 pyodbc 模块在 python 程序中打开了两个表,但是由于“没有读取权限”,所有其他表都无法打开。直到现在我都认为对数据库没有访问限制,因为 Ubuntu 上的 mdb 查看器会打开所有表而没有任何 fuzz。没有其他可用的文件,只有 mdb 文件。一种可能性可能是这根本不是权限问题,而是列名中特殊字符的问题。我无法打开的所有表都至少有一个带有国家字符的列名,而我可以打开的两个表没有。我尝试在从 python 调用的 SQL 选择中使用方括号,如下所示: SQL = 'SELECT [colname] from SomeTable;' 但这没有什么区别。
如果确实是权限问题,我的程序也必须可以执行任何解决方案,不得有任何手动步骤。
编辑:生成 mdb 文件的程序的开发人员已确认对任何表都没有限制。因此,错误消息“没有读取权限”具有误导性。相反,我将专注于解决我认为的列名中国家字符的问题。我将从下面建议的 JSDB 方法开始。感谢大家!
编辑 2:我发现我觉得很重要:我可以使用 pyodbc 打开的所有表都有 Owner=Admin 而我无法打开的所有表都没有所有者(看起来是空字符串,“Owner =”)。
编辑 3:我给了 JDBC 一个机会。再次出现同样的错误,正如在编辑 2 中的发现所预期的那样。显然要解决的问题是表所有权(尽管 Linux 下的 MDB Viewer 似乎并不关心这一点......)。由于文件的创建者说他没有引入任何权限设置,我猜奇怪的表所有权可能是使用新程序(如 2010)读取旧程序(如 90 年代的某个时候)产生的数据的结果,或者是在旧程序的某些迁移过程中引入的。关于如何解决它的任何想法?