DSNless соединение с базой данных Oracle с использованием объекта базы данных DAO в VBA - PullRequest
0 голосов
/ 11 декабря 2018

возможно использовать соединение DSNless с объектом, созданным из класса базы данных DAO в VBA.

Соединение с базой данных с использованием соединения 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 ничего не задано после выхода пользователя из системы, когда запрашивается новый вход в систему сновый пароль старая строка подключения каким-то образом сохраняется, и вместо ошибки подключения успешно восстанавливается объект подключения.

С уважением,

1 Ответ

0 голосов
/ 18 апреля 2019

Мне удалось подключиться к экземпляру Oracle 11g, используя следующую строку подключения, и вызвать OpenDatabase.Я использую версию DAO, доступную по ссылке «Объект ядра базы данных Microsoft Office 16.0 Access»:

' 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 крайне неадекватна, поэтому я указываю на различия между моим и вашим кодом, которые могут иметь отношение:

  • Я использую соединениестроковый параметр "Сервер" вместо "CONNECTSTRING."Однако любой из них работает в моей системе.
  • Я использую параметр строки подключения "SID" вместо "SERVICE_NAME".Это также не имело значения ... на этот раз.Но по причинам, которые я не понимаю, я знаю, что это имело значение в прошлом.Я не понимаю, почему это иногда имеет значение.(Я новичок в Oracle, но я думаю, что конфигурация Oracle как-то связана с ним.)
  • Для второго параметра метода OpenDatabase я использую 1 вместо true.Это перечисляемая константа dbDriverNotPrompt.Если я изменяю на true, это также не имеет значения.
  • Если я использую DAO 3.6, я делаю получаю ошибку времени выполнения 3151 «Ошибка подключения ODBC».Мне интересно, не может ли более старая версия обрабатывать строки подключения без Oracle или без TNS к Oracle?

Единственное другое отличие, о котором я могу подумать, это то, что, возможно, ваше имя пользователя Oracle /Учетная запись пароля имеет разрешения только для чтения, а для третьего параметра метода OpenDatabase установлено значение false?

...