可以使用DSN减少与从VBA中的DAO Database类创建的对象的连接。
使用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对象设置为空,当使用新密码请求新登录时,旧连接字符串以某种方式保留,而不是成功连接错误连接对象被重新获得。
问候,
我能够使用以下连接字符串连接到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?