使用Excel时MS Access VBA传递查询连接错误

问题描述

我可以使用ODBC到Oracle通过Passthrough查询连接到Oracle,但是存在的问题是,因为我有多个数据库都使用相同的连接,所以我想将服务器的凭据存储在Excel加密文件中,所以没人可以看到我的密码,只需要在一个地方而不是每个数据库中进行更新,但是当我尝试与我的传递连接时,它不起作用,但是如果我在vba中手动声明它们,则可以。

错误消息是3151-ODBC-连接到“ {OraClientName}服务器中的Oracle”失败

这是我的代码,不知道为什么它不起作用?我尝试过DSN及其相同的结果?

Function MyConnection()
On Error Resume Next
DoCmd.DeleteObject acQuery,"MY_TRANS"
Err.Clear
On Error GoTo 0 

'''''GET EXCEL LOGIN DETAILS
Dim xlsApp
Set xlsApp = CreateObject("Excel.Application")
Dim WkBk As Excel.WorkBook
Set WkBk = xlsApp.WorkBooks.Open(FileName:="FILE LOCATION.xlsx",Password:="MYPASSWORD")

Dim logoNNAME As String
Dim PWD As String

logoNNAME = WkBk.Sheets(1).Range("B3").Value
PWD = WkBk.Sheets(1).Range("D3").Value

If Not (xlsApp Is nothing) Then xlsApp.Quit
'end excel stuff
xlsApp.Quit
Set xlsApp = nothing

'THIS WORKS IF I UNCOMMENT
'logoNNAME = "MYNAME"
'PWD = "PASSWORD"


Dim db As DAO.Database
Dim ExtData As QueryDef
Dim strsql As String
Set db = CurrentDb
strsql = "SELECT * FROM TABLE"
Set ExtData = db.createqueryDef("MY_TRANS")

ServerName = "MYSERVER"
ExtData.Connect = "ODBC;DRIVER={Oracle in OraClientName};Server=" & ServerName & ";DBQ=DBQNAME;UID=" & logoNNAME & ";Pwd=" & PWD & ""

ExtData.sql = strsql
DoCmd.OpenQuery "MY_TRANS"
DoCmd.Close acQuery,"MY_TRANS"
 
ExtData.Close
db.Close
Set db = nothing

END FUNCTION

解决方法

@Andre您的评论解决了该问题答案是,如果您在键入Debug.Print LOGONNAME(LOGONNAME =“ MYNAME”)并输入相同的密码后得到错误,则需要进入excel并检查详细信息相同或重新输入并再次检查。这为我解决了这个问题。