我在Excel中有一个宏,可以删除Access中的表。
是否可以在不打开Access数据库的情况下执行此操作?
Set AppAcc = Nothing
Set AppAcc = New Access.Application
AppAcc.Visible = True
AppAcc.OpenCurrentDatabase "C:\MyStuff\MyDataBase.mdb"
AppAcc.DoCmd.SetWarnings False
With AppAcc
.DoCmd.OpenQuery "Delete_Query1"
.DoCmd.OpenQuery "Delete_Query2"
.DoCmd.OpenQuery "Delete_Query3"
End With
AppAcc.DoCmd.SetWarnings True
AppAcc.Quit acQuitSaveNone
Set AppAcc = Nothing
答案 0 :(得分:1)
绝对有办法。由于MS Access是数据库,因此它可以像所有主要RDBMS(Oracle,SQL Server,Postgres等)一样通过后端进行连接。下面演示了使用ADO的ODBC / OLEDB连接。然后,下面进一步是您当前正在运行的DAO替代版本,但无需进行Access.Application
和DoCmd
调用就可以这样做。
两者都无需安装MS Access GUI(MS Office应用程序)也可以工作。每次使用后期绑定。对于早期绑定,请添加VBA引用 Microsoft ActiveX数据对象#。#库或 Microsoft DAO#。#对象库,然后修改Dim
和{{1} }语句。
ADO
Set
DAO
Dim conn As Object
Set conn = CreateObject("ADODB.Connection")
' WITH ODBC DRIVER
conn.Open "DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=C:\MyStuff\MyDataBase.mdb;"
' WITH ODBC DSN
'conn.Open "DSN=MS Access Database;DBQ=C:\MyStuff\MyDataBase.mdb;"
' WITH OLEDB PROVIDER
'conn.Open "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyStuff\MyDataBase.mdb;"
' THREE WAYS TO CALL ACTION QUERIES
conn.Execute "{CALL Delete_Query1}"
conn.Execute "EXEC Delete_Query2"
conn.Execute "Delete_Query3"
Set conn = Nothing