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 в CSV / Excel с использованием командного и SQL-скриптов
  • Возьмите пароль с листа Excel
  • Написание скрипта из файла excel
  • Экспорт данных из Oracle SQL Developer в Excel .xlsx
  • есть ли способ подключения oracle db от excel vba без установленного клиента?
  • Загрузка Excel / загрузка в формах oracle не работает
  • Экспорт запроса из Oracle через MS Access 2003 в MS Excel
  • Недопустимое исключение символа при чтении с листа excel
  • Сравните данные excel с базой данных oracle c #
  • Функция Vba не запрашивает базу данных оракула
  • Power Query и Oracle Ora-12154
  • Interesting Posts

    Создание круговой диаграммы в Excel с использованием OpenXml

    Добавление файла .txt, который в формате csv как лист существующей книги в C #

    Открыть файл excel для редактирования в asp.net MVC

    Удалите листы, которые НЕ имеют определенного текста в

    SSIS: определение строкового соединения для папок для потока управления

    MS Excel (2003) Найти значение в col 2 на основе строки с col 1, имеющей значение x

    Отображение сотовой связи ComboBox в excel

    Macro для повторного выполнения предыдущего шага, если #VALUE! появляется

    Как получить диапазон выделенных ячеек с помощью VBA?

    Использование VBA для копирования нескольких подмножеств данных и вставки на разные вкладки

    Как получить среднее значение из последних N строк в таблице?

    Как получить выбранное значение в многоколоночном списке

    Поиск в Excel с использованием VBA

    ADO-запрос значения даты в Excel возвращает строку, отформатированную на листе

    VBA меняет содержимое переменной

    Давайте будем гением компьютера.