使用Excel VBA更新封闭的Access数据库

时间:2018-08-07 18:21:39

标签: excel vba ms-access

我在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

1 个答案:

答案 0 :(得分:1)

绝对有办法。由于MS Access是数据库,因此它可以像所有主要RDBMS(Oracle,SQL Server,Postgres等)一样通过后端进行连接。下面演示了使用ADO的ODBC / OLEDB连接。然后,下面进一步是您当前正在运行的DAO替代版本,但无需进行Access.ApplicationDoCmd调用就可以这样做。

两者都无需安装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