Excel VBA Выполнение запроса доступа, связанного с Oracle

Позвольте мне начать с того, что я новичок как на этом сайте, так и на VBA, поэтому, пожалуйста, несите меня. Спасибо заранее за вашу помощь.

У меня есть функция VBA, которая запускает существующий запрос из Access. Некоторые из запрошенных таблиц хранятся в базе данных Oracle, для которой требуется пароль для доступа к конкретному пользователю. Прямо сейчас суб, который я написал для автоматизации отчета, вызывает эту функцию 7 раз и требует, чтобы пользователь вводил свой пароль Oracle каждый раз при вызове функции (он также останавливает суб и дает сообщение об ошибке, если они неправильно вводят пароль которые я вижу как вероятное событие, если им нужно сделать это 7 раз). Код работает, но я хотел бы найти способ, чтобы код запрашивал пароль один раз и делался с ним. Все решения, которые я нашел, связаны с непосредственным подключением и обращением к Oracle, что требует очень сложного кодирования SQL, которое я ни в коем случае не умею писать.

У меня также есть проблема, когда столбцы отображаются на листе excel в другом порядке, чем в Access для некоторых запросов. Это кажется последовательным, так что это не большая проблема, но я хотел бы знать, как предотвратить это, чтобы предотвратить любые будущие проблемы.

Вот код для функции, которую я сейчас использую. Любое понимание было бы высоко оценено!

Option Explicit 'Single Argument "qryName" as string. Runs access qry and copys recordset to active sheet. Function AccessQueryPull(qryName As String) 'Declare variables Dim rs As ADODB.Recordset Dim cn As ADODB.Connection 'open the connection to the access database Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=filePath.accdb;" 'format the command to run the query Dim cmd As New ADODB.Command cmd.CommandType = adCmdStoredProc cmd.CommandText = qryName cmd.ActiveConnection = cn 'execute the query Set rs = New ADODB.Recordset Set rs = cmd.Execute() 'copy data to excel sheet ActiveSheet.Cells(2, 1).CopyFromRecordset rs 'Cleanup rs.Close Set rs = Nothing 

Причина, по которой вы каждый раз запрашиваете учетные данные Oracle, заключается в том, что при каждом вызове функции вы создаете новое, новое соединение с MS Access.

Просто сохраняйте соединение MS Access, подключая один раз в Sub, который вызывает функцию и передает объект соединения в качестве параметра. Таким образом, любая ошибка соединения попадает в родительскую процедуру. Что касается порядка столбцов, просто объявляйте столбцы в необходимом порядке в инструкции SQL.

 Sub RunQueries() Dim rs As ADODB.Recordset Dim cn As ADODB.Connection 'open the connection to the Access database Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=filePath.accdb;" Call AccessQueryPull(cn, "SELECT Col1, Col2, Col3 FROM Qry1") ' AND OTHER 6 CALLS cn.Close Set cn = Nothing End Sub Function AccessQueryPull(accConn As ADODB.Connection, qryName As String) 'format the command to run the query Dim cmd As New ADODB.Command cmd.CommandType = adCmdStoredProc cmd.CommandText = qryName cmd.ActiveConnection = accConn 'execute the query Set rs = New ADODB.Recordset Set rs = cmd.Execute() 'copy data to excel sheet ActiveSheet.Cells(2, 1).CopyFromRecordset rs 'Cleanup rs.Close Set rs = Nothing: Set cmd = Nothing End Function 
  • Экспорт запроса из Oracle через MS Access 2003 в MS Excel
  • Репликация функции CHIDIST Excel в Oracle 11g
  • Oracle SQL Developer и Toad Excel экспорт не обновляется в процессе экспорта
  • Oracle SQL to Excel с использованием данных VBA -Dumb в разных листах в одной книге
  • Запуск SQL-запроса с параметром DateTime из Excel 2010
  • Несколько объектов появились вместе - наибольшее количество раз
  • Экспорт данных из запроса Oracle для Excel с использованием запроса
  • Вставить большой объем данных с помощью SQL
  • Запрос VBA с использованием ADODB, возвращающего разные результаты на разных компьютерах
  • Использование столбца в листе excel в качестве входного документа в операторе обновления в Oracle с использованием PL / SQL
  • Создайте файл Excel (.xlsx) с помощью PL / SQL
  • Давайте будем гением компьютера.