|
Подключение Access к СУБД Oracle, выполнение хранимой процедуры Oracle.
|
|||
---|---|---|---|
#18+
Доброго времени суток! Да, знаю, тема множество раз поднималась и есть решения, но я бы хотел прояснить вот какой момент: Имеется 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.
При любом из представленных значений connectionString , на Open ругается " [Oracle][ODBC][ORA]ORA-12560: TNS:protocol adapter error ". При том, что TNS настроен верно, TNS ping проходит, из SQLplus проблем с подключением по имени инстанса нет, виндовый ODBC прекрасно к базе подключается, а второй вариант строки подключения используется мной в другом решении (уже на C#), с подключенной (этот же ODAC) Oracle.DataAccess.dll ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2020, 09:25 |
|
Подключение Access к СУБД Oracle, выполнение хранимой процедуры Oracle.
|
|||
---|---|---|---|
#18+
mozgen, Когда открываете любую таблицу (линкованную к Oracle) или запрос к серверу, то программа 1 раз спрашивает логин и пароль пользователя. После этого вы можете в VBA ссылаться на запрос или таблицу через DAO (объект CurrentDB например работает через DAO). В этом случае программа не будет повторно спрашивать ни логина, ни пароля. Это удобно во многих случаях. Когда просто отрываете таблицу Access ругается? Если да, то Вы скорее всего не настроили DSN. А в случае ADODB по моему каждый раз приходиться как бы переподключаться. Стало быть каждый раз строку подключения приходится подсововать. А это не всегда удобно. Есть конечно ещё 1 вариант: создаёте FileDSN, где внутри текста файла указываете логин и пароль пользователя (с точки зрения безопасности не самое лучшее решение) и потом в строке подключения будете указывать этот FileDSN. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2020, 09:54 |
|
Подключение Access к СУБД Oracle, выполнение хранимой процедуры Oracle.
|
|||
---|---|---|---|
#18+
mozgen Таким образом, имеется постоянное подключение к Oracle'у которое бы и хотелось использовать для выполнения из программного кода запросов к базе, а так же вызовов Ora Stored Procedure. Есть ли такая возможность, или обязательно создавать новое подключение? Так что "одним больше - одним меньше", погоды не делает. Но для ДАО, как минимум, можно использовать табличную строку коннекта, а не составлять её каждый раз Типа такого: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: vbnet 1. 2. 3. 4. 5.
--------------- а что касается ошибки у твоего АДО-коннекта, то вот тут https://www.connectionstrings.com/oracle/#oracle-in-oraclient11g_home1 для параметра Server задается какой-то serverSID, а не IP или имя Код: vbnet 1.
а через имя, видимо так Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2020, 10:53 |
|
Подключение Access к СУБД Oracle, выполнение хранимой процедуры Oracle.
|
|||
---|---|---|---|
#18+
studieren, studierenКогда просто отрываете таблицу Access ругается? Неа, все нормально открывается и никаких проблем с этим нет (почти никаких, но это совсем другая тема оставшаяся без ответа =)). studierenКогда открываете любую таблицу (линкованную к Oracle) или запрос к серверу Не уверен что правильно понял. Таблицы присоединены к текущей базе Access через диспетчер связанных таблиц. Соответственно что здесь есть "запрос к серверу"? Просто запрос в Access к присоединенным таблицам? studierenПосле этого вы можете в VBA ссылаться на запрос или таблицу через DAO (объект CurrentDB например работает через DAO). Ну да, через CurrentDB я могу обратиться к уже прилинкованным к Access таблицам, но как мне использовать это же подключение для вызова хранимой процедуры? Я же не могу ее присоединить так же как и таблицу, а значит и в CurrentDB ее нет. Таким образом мне нужно как-то получить имеющееся соединение с базой в новый объект, и уже из него пытаться ее вызвать. Я же правильно понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2020, 10:59 |
|
Подключение Access к СУБД Oracle, выполнение хранимой процедуры Oracle.
|
|||
---|---|---|---|
#18+
court, Oracle SID - это в приближенном виде имя базы. TNS - сетевое имя. В моем случае одно и то же. А IP-адрес указан для того, что бы ODAC "понимал" к какому серверу обращаться. Без адреса эта строка подключения будет работать в двух случаях - либо подключение выполняется на той же машине где и поднята сама база, либо если такой TNS в сети один, он находится в прямой видимости, и вообще, чтоб такого добиться нужно выполнить очень много приседаний, так что ну его нафиг, проще указать адрес нужного сервера =) А вот это Код: vbnet 1.
уже интересно, не знал что так можно. courtКаждая одбц-линкованная таблица - это отдельное подключение. Так что "одним больше - одним меньше", погоды не делает. Ага, понял. спасибо за разъяснение. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2020, 11:13 |
|
|
start [/forum/topic.php?fid=45&gotonew=1&tid=1610060]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
83ms |
get topic data: |
11ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 318ms |
total: | 504ms |
0 / 0 |