【问题标题】:How to save a query or macro in MS Access using pyodbc?如何使用 pyodbc 在 MS Access 中保存查询或宏?
【发布时间】:2020-10-01 11:56:14
【问题描述】:

关于如何使用 pyodbc 在 MS Access 中运行查询,以及如何调用已保存在 MS Access 中的查询,网上有很多提示,但是有没有办法将查询/宏存储在MS Access,使用pyodbc、win32com或其他?

然后必须可以从 MS Access 执行保存的请求。

(我的目标是让用户能够自己执行请求)

【问题讨论】:

    标签: python ms-access pyodbc


    【解决方案1】:

    您可以通过 Access ODBC 创建保存的 SELECT 查询,如下所示:

    crsr = cnxn.cursor()
    query_name = "query1"
    # emulate DROP VIEW IF EXISTS
    view_names = [x.table_name for x in crsr.tables(tableType="VIEW").fetchall()]
    if query_name in view_names:
        crsr.execute(f"DROP TABLE {query_name}")  # yes, DROP TABLE
    crsr.execute(f"""
    CREATE VIEW {query_name} AS 
    SELECT * FROM Donor WHERE DonorID = 1 
    """
    )
    cnxn.commit()
    

    您可以通过win32comDAO.DBEngine.120 对 Access 数据库执行更多低级操作,但用户宏(与数据宏相反)在 Access 和 AFAIK 中有点奇怪,您无法做到很多通过 DAO 的人。

    【讨论】:

    • 好的,“create view”语句创建一个新查询。简单的 !谢谢!
    【解决方案2】:

    要添加,请记住 ms-accessmultifaceted thing。多年来,底层数据库(JET/ACE 引擎)和 GUI 应用程序已被合并为“Access 数据库”。但这是两个不同的组成部分。

    • 任何涉及 GUI 应用程序 (MSACCESS.exe) 的内容,例如 data macros、通用宏、模块、表单和报告,都不能在 ODBC 连接中处理,而 ODBC 连接在编程语言的非可视背景中运行。此外,必须安装 Office 应用程序 MS Access 才能调整 GUI 对象。

      您仍然可以使用 Access 的 TableDefsQueryDefs 创建/删除表和查询,它们都是使用代码的对象库的一部分。请注意:与 Access'object library 的交互不仅限于 VBA,而是适用于任何与 COM 连接的语言,包括带有win32com 模块的 Python; C# 和 VB.Net 与InteropServices;带有COM 库的PHP;带有Win32::OLE 模块的 Perl; R 与 RDCOMClient 包,还有其他。此类 COM 编程需要安装 MSACCESS.exe,该软件。

    • 任何涉及数据库(JET/ACE 引擎)的内容,即 Windows .dll 文件,例如表和查询,都可以在 ODBC 或 OLEDB 连接中处理。此外,不需要安装 Office 应用程序 MS Access 即可在 .mdb.accdb 文件上运行 ODBC 连接。唯一的要求是拥有 Windows 环境和 ODBC 驱动程序。

      因此,如@GordonThompson shows、DDL(CREATE TABLECREATE VIEWCREATE PROCEDURECREATE INDEXDROP TABLE)和 DML(SELECTINSERT、@9876543 987654344@) 调用可以在 ODBC 连接中操作以操作数据库,但不能操作 GUI 对象。

    【讨论】:

    • 为了记录,CREATE PROCEDURE 也适用于 ACE/.accdb。示例here.
    • @GordThompson, hmmmm...CREATE PROCEDURE 在 MS Access 2016 中对我不起作用 .accdb / 64 位在 Python pyodbc 中使用带有任何操作 SQL 查询的 ODBC 驱动程序。但是CREATE VIEW 可以。有趣的是,PROCEDURE 确实可以与使用 OLEDB 提供程序的adodbapi 一起使用,而VIEWadodbapi 中不起作用。您在示例中使用的连接字符串是什么?
    • 我的测试是使用 Access 2013 ODBC。我也养成了将;ExtendedAnsiSQL=1 添加到连接字符串末尾的习惯,所以这可能与它有关。
    • @GordThompson,扩展参数是缺失的部分。很好学习和了解!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2023-03-20
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    相关资源
    最近更新 更多