在已打开的Access实例上通过Excel VBA运行Access查询

问题描述 投票:0回答:1

我有一个列出了Access查询名称的电子表格。我想通过Excel VBA在Access中运行这些查询,但是我想要处理已经打开的实例(和数据库),而不是打开新的Access实例。我目前拥有的代码仅用于创建新实例:

Sub RunQueries()

Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")
appAccess.Visible = True
appAccess.OpenCurrentDatabase "D:\Access\tysql.accdb", False

Dim QueryName As String

For i = 2 To Queries.Count + 1
    QueryName = Cells(i, 1).Value
    appAccess.DoCmd.OpenQuery QueryName
Next i

End Sub

我会很感激任何建议。

excel vba excel-vba ms-access
1个回答
1
投票

实际上,您使用的是MS Access的GUI端而不是其底层数据库引擎。考虑通过ADO的路由,其中​​涉及打开没有.accdb数据库到屏幕。实际上,您甚至不需要将MSAccess.exe GUI安装为MS Office程序!

Dim conn As Object

Set conn = CreateObject("ADODB.Connection")

conn.Open "DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=C:\Path\To\Database\File.accdb;"

Dim QueryName As String

For i = 2 To Queries.Count + 1
    QueryName = Cells(i, 1).Value
    conn.Execute QueryName
Next i

Set conn = Nothing

使用Access作为数据库引擎的美妙之处在于它可以移植到其他语言,如任何RDBMS,而不仅仅是Excel VBA。例如,在Python(我看到的是您的一个配置文件标签)中,您可以迭代csv(以该格式保存工作表)并在数据库中运行命名查询。

import csv
import pyodbc

database = r'C:\Path\To\Database\File.accdb'
constr = "Driver={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={0};".format(database)

db = pyodbc.connect(constr)
cur = db.cursor()

with open(r'C:\Path\To\Query\Names.csv', 'r') as f:
    r = csv.reader(f)
    for line in r:
        cur.execute(line[0])
        db.commit()

cur.close()
db.close()
© www.soinside.com 2019 - 2024. All rights reserved.