powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Подключение Access к СУБД Oracle, выполнение хранимой процедуры Oracle.
5 сообщений из 5, страница 1 из 1
Подключение Access к СУБД Oracle, выполнение хранимой процедуры Oracle.
    #39968466
mozgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Да, знаю, тема множество раз поднималась и есть решения, но я бы хотел прояснить вот какой момент:
Имеется Access 2013 x64 (15.0.4569.1506) с присоединенными к Oracle 12g таблицами через виндовый (Win7 x64) источник ODBC, драйвер ODAC x64 11.02.00.03. Access в данном случае используется как морда для пользователей и никакой особой логики в себе не содержит.
Таким образом, имеется постоянное подключение к Oracle'у которое бы и хотелось использовать для выполнения из программного кода запросов к базе, а так же вызовов Ora Stored Procedure.
Есть ли такая возможность, или обязательно создавать новое подключение?

З.Ы. Этот вопрос возник сразу из двух нюансов:
1) Как-то оно логично использовать одно единственное подключение и не плодить их по нескольку штук для каждого нового АРМ.
2) Возможно я конечно где-то косячу, но мне кажется, что это не я, а ODAC, потому как
Код: vbnet
1.
2.
3.
4.
5.
Dim odbcConn As New ADODB.Connection
Dim connectionString As String
connectionString = "Driver={Oracle in OraClient11g_home1};" + "Server=server_ip_address/orcl;" + "Uid=user_name;" + "Pwd=user_pass;"
'connectionString = "Driver={Oracle in OraClient11g_home1};Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=server_ip_address)(PORT=1521)))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME=orcl)));User Id=user_name;Password=user_pass;"
odbcConn.Open (connectionString)


При любом из представленных значений connectionString , на Open ругается " [Oracle][ODBC][ORA]ORA-12560: TNS:protocol adapter error ". При том, что TNS настроен верно, TNS ping проходит, из SQLplus проблем с подключением по имени инстанса нет, виндовый ODBC прекрасно к базе подключается, а второй вариант строки подключения используется мной в другом решении (уже на C#), с подключенной (этот же ODAC) Oracle.DataAccess.dll
...
Рейтинг: 0 / 0
Подключение Access к СУБД Oracle, выполнение хранимой процедуры Oracle.
    #39968473
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgen,

Когда открываете любую таблицу (линкованную к Oracle) или запрос к серверу, то программа 1 раз спрашивает логин и пароль пользователя. После этого вы можете в VBA ссылаться на запрос или таблицу через DAO (объект CurrentDB например работает через DAO). В этом случае программа не будет повторно спрашивать ни логина, ни пароля. Это удобно во многих случаях.
Когда просто отрываете таблицу Access ругается? Если да, то Вы скорее всего не настроили DSN. А в случае ADODB по моему каждый раз приходиться как бы переподключаться. Стало быть каждый раз строку подключения приходится подсововать. А это не всегда удобно. Есть конечно ещё 1 вариант: создаёте FileDSN, где внутри текста файла указываете логин и пароль пользователя (с точки зрения безопасности не самое лучшее решение) и потом в строке подключения будете указывать этот FileDSN.
...
Рейтинг: 0 / 0
Подключение Access к СУБД Oracle, выполнение хранимой процедуры Oracle.
    #39968488
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgen
Таким образом, имеется постоянное подключение к Oracle'у которое бы и хотелось использовать для выполнения из программного кода запросов к базе, а так же вызовов Ora Stored Procedure.
Есть ли такая возможность, или обязательно создавать новое подключение?
Каждая одбц-линкованная таблица - это отдельное подключение.
Так что "одним больше - одним меньше", погоды не делает.

Но для ДАО, как минимум, можно использовать табличную строку коннекта, а не составлять её каждый раз
Типа такого:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Function RunPassQuery(strSQL As String) As DAO.Recordset
    Dim db As DAO.Database
    Dim qd As DAO.QueryDef
    
    Set db = CurrentDb
    Set qd = db.CreateQueryDef("")
    qd.ReturnsRecords = True
    qd.Connect = db.TableDefs("MyLinkedTab").Connect ' любая линкованная с сервера таблица
    qd.SQL = strSQL
    Set RunPassQuery = qd.OpenRecordset()
    
    Set qd = Nothing
    Set db = Nothing
End Function


Код: vbnet
1.
2.
3.
4.
5.
?RunPassQuery("select @@version as xz")(0)
Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) 
    Aug 22 2017 17:04:49 
    Copyright (C) 2017 Microsoft Corporation
    Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 18363: )



---------------
а что касается ошибки у твоего АДО-коннекта, то вот тут https://www.connectionstrings.com/oracle/#oracle-in-oraclient11g_home1
для параметра Server задается какой-то serverSID, а не IP или имя
Код: vbnet
1.
Driver={Oracle in OraClient11g_home1};Server=serverSID;Uid=myUsername; Pwd=myPassword;


а через имя, видимо так
Код: vbnet
1.
Driver={Oracle in OraClient11g_home1};Dbq=myTNSServiceName;Uid=myUsername;Pwd=myPassword;
...
Рейтинг: 0 / 0
Подключение Access к СУБД Oracle, выполнение хранимой процедуры Oracle.
    #39968492
mozgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studieren,

studierenКогда просто отрываете таблицу Access ругается?
Неа, все нормально открывается и никаких проблем с этим нет (почти никаких, но это совсем другая тема оставшаяся без ответа =)).

studierenКогда открываете любую таблицу (линкованную к Oracle) или запрос к серверу
Не уверен что правильно понял. Таблицы присоединены к текущей базе Access через диспетчер связанных таблиц. Соответственно что здесь есть "запрос к серверу"? Просто запрос в Access к присоединенным таблицам?

studierenПосле этого вы можете в VBA ссылаться на запрос или таблицу через DAO (объект CurrentDB например работает через DAO).
Ну да, через CurrentDB я могу обратиться к уже прилинкованным к Access таблицам, но как мне использовать это же подключение для вызова хранимой процедуры? Я же не могу ее присоединить так же как и таблицу, а значит и в CurrentDB ее нет. Таким образом мне нужно как-то получить имеющееся соединение с базой в новый объект, и уже из него пытаться ее вызвать. Я же правильно понимаю?
...
Рейтинг: 0 / 0
Подключение Access к СУБД Oracle, выполнение хранимой процедуры Oracle.
    #39968494
mozgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,

Oracle SID - это в приближенном виде имя базы. TNS - сетевое имя. В моем случае одно и то же. А IP-адрес указан для того, что бы ODAC "понимал" к какому серверу обращаться. Без адреса эта строка подключения будет работать в двух случаях - либо подключение выполняется на той же машине где и поднята сама база, либо если такой TNS в сети один, он находится в прямой видимости, и вообще, чтоб такого добиться нужно выполнить очень много приседаний, так что ну его нафиг, проще указать адрес нужного сервера =)

А вот это
Код: vbnet
1.
qd.Connect = db.TableDefs("MyLinkedTab").Connect


уже интересно, не знал что так можно.

courtКаждая одбц-линкованная таблица - это отдельное подключение.
Так что "одним больше - одним меньше", погоды не делает.
Ага, понял. спасибо за разъяснение.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Подключение Access к СУБД Oracle, выполнение хранимой процедуры Oracle.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]