可以将DSNless连接与从VBA中的DAO数据库类创建的对象一起使用。
使用ODBC连接到数据库的连接可以正常工作,但是,如果您使用提到的其他连接字符串类型(如www.connectionstrings.com),则无法建立连接。
public Sub dbConnectTest()
Dim myDB As DAO.Database
Dim conn As String
Dim tns As String
Dim odbcString as String
odbcString = "ODBC;DSN=Location Name;UID=ANUSER;PWD=apassword;DBQ=A_TNS_NAME"
' this part works
Set myWorkspace = DBEngine.CreateWorkspace("APPNAME", "admin", "")
Set myDB = myWorkspace.OpenDatabase(Name:="", Options:=dbDriverNoPrompt, ReadOnly:=True, _
Connect:=odbcString)
' same here
Set myDB = OpenDatabase("", False, False, "ODBC")
' any of below part don't work
odbcString = "Driver=(Oracle in XEClient);dbq=server:1980/SID;UID=ANUSER;PWD=apassword;"
odbcString = "Driver={Oracle in OraHome92};Dbq=A_TNS_NAME;UID=ANUSER;PWD=apassword;"
odbcString = "Driver={Microsoft ODBC for Oracle};CONNECTSTRING=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=server)(PORT=1980)))(CONNECT_DATA=(SERVICE_NAME=SID)));Uid=ANUSER;Pwd=apassword;"
Set myDB = OpenDatabase("", False, False, odbcString)
end sub
我想更改连接字符串,因为即使用户注销后myDB对象设置为空,当使用新密码请求新登录时,仍会保留旧的连接字符串而不是连接错误,检索成功的连接对象。
此致
答案 0 :(得分:0)
我能够使用以下连接字符串连接到Oracle 11g实例并调用OpenDatabase。我正在使用通过引用“ Microsoft Office 16.0 Access数据库引擎对象”提供的DAO版本:
' Construct connection string
oracxnstr = "Driver={Microsoft ODBC for Oracle};Server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=fake.url.com)(PORT=fakePortNo))(CONNECT_DATA=(SID=fakeSID)));Uid=fakeUid;Pwd=fakePw;"
我显然在此字符串中使用了伪参数,因此我没有公开数据库。
' attempt to connect to oracle
Set oradb = dbws.OpenDatabase("", 1, True, oracxnstr)
Microsoft DAO文档严重不足,所以我指出了我的代码与你的代码之间可能存在的差异:
我能想到的唯一另一个区别是,也许您的Oracle用户名/密码帐户具有只读权限,而OpenDatabase方法的第3个参数设置为false?