【发布时间】:2012-05-26 01:43:34
【问题描述】:
我曾帮助一位客户将 mdb 表数据导出为 csv 文件(然后进一步处理这些 csv 文件)。我用过 Ubuntu,所以我可以使用 mdbtools(mdb 查看器)。现在客户希望我以 Windows 程序的形式自动化我所做的工作。我遇到了两个问题:
几个小时后,我仍然没有在 Windows 上找到可以以我可以合并到程序/脚本中的方式导出表数据的免费工具。 Jackcess (jackcess.sourceforge.net) 看起来很有希望,但是在运行下载的 jar 时会弹出一个完全不相关的诺基亚套件程序...
我已经设法使用 pyodbc 模块在 python 程序中打开了两个表,但由于“没有读取权限”,所有其他表都无法打开。直到现在我都认为对数据库没有访问限制,因为 Ubuntu 上的 mdb 查看器会打开所有表而没有任何 fuzz。没有其他可用的文件,只有 mdb 文件。一种可能性可能是这根本不是权限问题,而是列名中特殊字符的问题。我无法打开的所有表都至少有一个带有国家字符的列名,而我可以打开的两个表没有。我尝试在从 python 调用的 SQL 选择中使用方括号,如下所示: SQL = '从 SomeTable 中选择 [列名];' 但这没有什么区别。我也无法从不包含国家字符的列中获取数据(除了两个有效的表)。
如果确实是权限问题,我的程序也必须可以执行任何解决方案,不得有任何手动步骤。
编辑:生成 mdb 文件的程序的开发人员已确认对任何表都没有限制。因此,错误消息“没有读取权限”具有误导性。相反,我将专注于解决我认为的列名中国家字符的问题。我将从下面建议的 JSDB 方法开始。谢谢大家!
编辑 2:我发现我觉得很重要:我可以使用 pyodbc 打开的所有表都有 Owner=Admin 而我无法打开的所有表都没有所有者(似乎是空字符串,“Owner=” )。
编辑 3:我试了一下 JDBC。再次出现同样的错误,正如在编辑 2 中的发现所预期的那样。显然要解决的问题是表所有权(尽管 Linux 下的 MDB Viewer 似乎并不关心这一点......)。由于文件的创建者说他没有引入任何权限设置,我猜奇怪的表所有权可能是使用新程序(如 2010)读取旧程序(如 90 年代的某个时候)产生的数据的结果,或者是在旧程序的某些迁移过程中引入的。关于如何解决它的任何想法?
【问题讨论】:
-
查看这篇文章(针对 JSDB):stackoverflow.com/a/371488/800165
-
是的,抱歉,我的意思是 csv。问题已更新。
-
我还没有尝试过 JSDB,但我尝试从 LibreOffice Base 连接到我的 mdb。我在那里收到了关于权限的相同错误消息,这向我表明,在内心深处,使用了与我的 pyodbc 方法相同的数据库驱动程序,即 {Microsoft Access Driver (*.mdb)}。所以我想我正在寻找替代驱动程序,或该驱动程序的替代版本。在 JSDB 方法中将使用哪些驱动程序?
标签: database windows ms-access export