【问题标题】:Getting data from mdb database file in my Windows program在我的 Windows 程序中从 mdb 数据库文件中获取数据
【发布时间】:2012-05-26 01:43:34
【问题描述】:

我曾帮助一位客户将 mdb 表数据导出为 csv 文件(然后进一步处理这些 csv 文件)。我用过 Ubuntu,所以我可以使用 mdbtools(mdb 查看器)。现在客户希望我以 Windows 程序的形式自动化我所做的工作。我遇到了两个问题:

  1. 几个小时后,我仍然没有在 Windows 上找到可以以我可以合并到程序/脚本中的方式导出表数据的免费工具。 Jackcess (jackcess.sourceforge.net) 看起来很有希望,但是在运行下载的 jar 时会弹出一个完全不相关的诺基亚套件程序...

  2. 我已经设法使用 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


【解决方案1】:

您也许可以使用 VBScript。 VBScript 通常用于网页的 ASP 文件,但也可以作为 Windows 程序单独使用。

VBScript 是免费的,因为它是您在记事本中编写的代码。

其他人可能会为您提供更好的答案。祝你好运。

【讨论】:

  • VBScript 与存储数据的 Jet/ACE 配合得非常好。所有驱动程序均可免费下载。有关 ADODB,请参阅 www.connectionstrings.com,尽管您也可以在 VBScript(或 VB.Net 或 C#)中使用 DAO。
  • 我的客户是否需要安装 MS Access 才能使用 VBScript 从 mdb 中获取数据?此外,由于 {Microsoft Access Driver (*.mdb)} 似乎对我不起作用,是否有可用于 VBScript 的替代驱动程序?
  • 不,您不需要 MS Access。但是你必须安装驱动程序。另外,请确保您安装了正确的驱动程序。我自己不太了解驱动程序,但在 SO 中搜索这些术语以找到一些帮助:asp classic ms access ado
猜你喜欢
  • 1970-01-01
  • 2012-06-09
  • 2012-05-28
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
相关资源
最近更新 更多