【问题标题】:Get the MS Access source database of linked tables with Python使用 Python 获取链接表的 MS Access 源数据库
【发布时间】:2019-02-28 16:16:36
【问题描述】:

在这个问题上搜索了很多之后,我请求你的指导!

使用 Python,我必须访问 multiple Access 数据库提取有关这些数据库内容的信息(表名、类型表,如果是链接表,则为来源...)。

我从使用 pyodbc 开始,但是当我想访问包含我想要的所有数据的表 MSysObjects 时,我遇到了访问授权问题 ("无法读取记录 "\xa0MSysObjects\xa0" 没有读取权限)。

经过一番搜索,我发现在 Access DB 中执行授权此类请求的代码行很少。但它需要从每个 Access DB 启动,因为某些功能只能在 Access DB 上使用。

所以我决定使用 win32com 看看它是否有解决方案。 可悲的是,它没有。 我遇到了完全相同的错误。

最后似乎只有几个解决方案:

  1. 想办法把几行授权给 数据库(可能直接通过 Python 导入或通过制作 Python 从特定的 Access 数据库导入它)然后执行它。
  2. 找到一种从 MSysObjects 之外的其他方式获取所需信息(此处为链接表的源数据库)的方法。
  3. 想办法通过 SQL 请求直接从 Python 更新授权。

我希望我是可以理解的! 如果您对我想到的解决方案之一或什至其他解决方案有答案,我将非常感激!

向大家致以最诚挚的问候!

【问题讨论】:

  • 您应该能够使用 win32com 和 Access DAO 循环访问 TableDefs 集合并检查每个 TableDef 对象的 .Connect 属性。
  • 感谢@GordThompson,它运行良好!

标签: python ms-access pyodbc pywin32 win32com


【解决方案1】:

如果您对非 Python 解决方案感到满意,我认为 VBA 是此类工作的最佳工具。

Private Sub Command1_Click()

Dim db As DAO.Database, tbl As DAO.TableDef
Dim f As DAO.Field
Set db = CurrentDb() ' Connect to current database

' Loop through each table in the database
For Each tbl In db.TableDefs
    Debug.Print "Table name: ", tbl.Name
    ' Loop throuth each field in the table
    For Each f In tbl.Fields
        Debug.Print "Field: ", f.Name
    Next f
Next tbl

End Sub

【讨论】:

  • 如上所述,win32com 与 VBA 类似:与 MS Access 对象库的 COM 接口。注意:VBA 是 Office 产品中的第一个参考(请参阅工具\参考)(误称两者是相互结合的)。任何可以运行 COM 的编程语言(如 Python)都可以运行 Access 方法。
猜你喜欢
  • 1970-01-01
  • 2014-08-17
  • 2020-01-13
  • 1970-01-01
  • 2011-08-18
  • 2018-08-05
  • 2020-12-01
  • 2010-09-17
  • 2010-09-25
相关资源
最近更新 更多