Vba access запросы sql: Выполнение SQL запросов к текущей базе данных в среде VBA (Access)
Содержание
Резюме Специалист по SQL-запросам, VBA (MS Access, MS Excel), Москва, 85 000 руб. в месяц
№ 3223672Обновлено 1 июняБыл(а) больше месяца назад
Показать контакты
Пригласить
Отправить письмо специалисту
Добавить в избранное
Поделиться
45 лет (родился 12 июня 1977), высшее образование, cостоит в браке, детей нет
Москва, не готов к командировкам
Имя, телефон и почта доступны только авторизованным работодателям
Показать контакты
Полная занятость
85 000 ₽
Образование
- Высшее образование
- Вечерняя
- 2006
Московский авиационный институт (Национальный исследовательский университет)
Факультет: Экономики и менеджмента
Специальность: Инженер-экономист
- Неполное высшее образование
- Дневная/Очная
- 1997
Московский авиационный институт (Национальный исследовательский университет)
Факультет: Прикладная математика и физика
Специальность: Программист
Обо мне
Профессиональные навыки:
Компьютерные навыки:
MS Access, MS office язык VBA,
SQL-запросы
Дополнительные сведения:
Запросы SQL, MS Office (VBA)
Иностранные языки
- Английский язык — технический
Похожие резюмеВсе 15 похожих резюме
Обновлено 9 декабря
Программист-разработчик T-SQL / Специалист по настройке и администрированию WMSз/п не указана
Последнее место
работы
(
3 мес.
)Ведущий разработчикНоябрь 2021 – февраль 2022
Показать контакты
Добавить в избранное
Обновлено 21 мая 2021
Freelancer access, VBAз/п не указана
Последнее место
работы
(
14 лет и 8 мес.
)Специалист по автоматизации деятельности предприятийМай 2008 – работает сейчас
Показать контакты
Добавить в избранное
Обновлено 25 октября 2020
Специалист SQL80 000 ₽
Последнее место
работы
(
11 лет и 1 мес.
)Менеджер по продажамНоябрь 2011 – работает сейчас
Показать контакты
Добавить в избранное
Обновлено 10 октября 2020
Программист MS SQL Server, MS Access, MS Excel, VBAз/п не указана
Последнее место
работы
(
8 мес.
)Программист-разработчик баз данных MS SQL Server, MS AccessАпрель 2017 – декабрь 2017
Показать контакты
Добавить в избранное
Обновлено 13 июля 2020
Программист VBAз/п не указана
Последнее место
работы
(
2 года и 10 мес.
)Аналитик информационно-аналитического отделаФевраль 2020 – работает сейчас
Показать контакты
Добавить в избранное
Обновлено 16 августа 2018
Старший инженер / менеджер ИТ / Специалист PL / SQLз/п не указана
Последнее место
работы
(
8 лет и 6 мес.
)Старший инженер единого центра управления сетьюИюль 2014 – работает сейчас
Показать контакты
Добавить в избранное
Обновлено 23 января 2018
Аналитик / VBAз/п не указана
Последнее место
работы
(
10 лет и 3 мес.
)Аналитик, Разработчик ПО, Администратор БДСентябрь 2012 – работает сейчас
Показать контакты
Добавить в избранное
Обновлено 20 апреля 2016
Программист-разработчик VB, VBA80 000 ₽
Последнее место
работы
(
12 лет
)Системный программистФевраль 2003 – февраль 2015
Показать контакты
Добавить в избранное
Обновлено 25 сентября 2015
Специалист по технологическим разработкам VBA, Excel, ActionScript, Flash85 000 ₽
Последнее место
работы
(
10 лет и 8 мес.
)Главный специалист по технологическим разработкамМай 2012 – работает сейчас
Показать контакты
Добавить в избранное
Обновлено 12 сентября 2015
ИТ специалист, инженер биллинга, программист SQL, VBA менеджер ведения договоровз/п не указана
Последнее место
работы
(
12 лет
)Ведущий инженер биллингаАвгуст 2003 – август 2015
Показать контакты
Добавить в избранное
Работа в Москве / Резюме / IT, Интернет, связь, телеком / Администрирование баз данных / Специалист
Смотрите также резюме
Администрирование баз данных
Разработка, программирование
Мы используем cookies, чтобы улучшить сайт для вас. Подробнее
Использование «Запроса к серверу» MS Access для извлечения данных с нескольких серверов SQL Server / Хабр
На нашем предприятии несколько десятков удаленных территориально от головного офиса представительств, в каждом из которых имеется база с данными о клиентах каждого представительства. Исторические данные есть и в центральном офисе, но актуальные находятся только в представительстве. Каждая БД на MS SQL Server 2005. Изредка возникает необходимость получить актуальную информацию по всем представительствам в виде таблицы Excel. Например, получить что-то вроде:
select territory, count(customerid) from customer where managerid = 1000
До недавнего момента я тупо в MS SQL Server Management Studio менял вручную connect, прогонял скрипт на выборку данных для каждого удаленного офиса и копировал результаты на лист Экселя. Но как-то выдалась свободное время, и я решил автоматизировать процесс сбора данных с удаленных БД, используя старый добрый MS Access.
MS Access имеет такой интересный инструмент, как “Запрос к серверу”, который отправляет sql-инструкцию напрямую серверу базы данных ODBC. Таким образом для любого сервера БД, — SQL Server, Progress OpenEdge, Oracle, — к которому у нас имеется ODBC-драйвер, мы можем создать в Акцессе “Запрос к серверу” на родном для этого сервера диалекте sql.
Таким образом мне осталось в цикле по числу удаленных офисов сменить настройки ODBC-подключения, запустить запрос и вернуть результат в табличку Акцесса. Что для этого было сделано.
Я создал в MS Access табличку с реквизитами подключения для каждого офиса t_ServerList, табличку t0 – приемник результатов запроса для каждого офиса и написал на VBA проход по объекту ADO Recordset для сбора строки ODBC-подключения и “складированию” данных из “Запрос к серверу”с именем queryName в табличку Access t0. В случае возникновения ошибки (не факт, что каждый локальный сервер будет работать во время прогона), в таблицу t_ServerList пишется код ошибки и описание.
Ниже, собственно, сам код:
Option Compare Database Public Const queryName As String = "q0" Public Connection As ADODB.Connection, Recordset As ADODB.Recordset Sub MkPassTruQueryDefSel() 'Руками поменять в свойствах запроса Возврат записей - ДА 'В цикле по таблице серверов t_ServerList создается pass-thtough запрос и данные с выбранного сервера/базы, используя строку запроса strSql 'инсертятся в заранее созданную таблицу акцесс соотв-й корректной структуры 'Таблица с именем t0 должна быть создана заранее 'Пишется дата прохода в таблицу со списком серверов Dim strSql As String, strCon As String, serverListTableName As String, strServer As String, strDB As String Dim errAdo As ADODB.Error, strErrAdoMsg As String Dim qrdef As Dao.QueryDef, db As Dao.Database 'Текст запроса к серверу вбит руками в конструкторе запроса Set db = CurrentDb On Error Resume Next Set qrdef = db.QueryDefs(queryName) Dim strSQLFillTable As String strSQLFillTable = "insert into t0 select * from " & queryName 'Запрос на заполнение таблицы очередной порцией Set Connection = CurrentProject. Connection Set Recordset = New ADODB.Recordset serverListTableName = "t_ServerList" With Recordset 'Каждый проход из рекордсета берутся атрибуты соединения для pass-thtough запроса 'Запрос к исходной таблице со списком серверов src = "select * from " & serverListTableName & " where use=-1" .Open src, Connection, adOpenDynamic, adLockOptimistic .MoveFirst Do While (.EOF = False) strServer = .Fields("ip"): strDB = .Fields("DB") qrdef.Connect = GetTPQConString(strServer, strDB) CurrentDb.QueryDefs.Refresh CurrentProject.Connection.Execute strSQLFillTable .Fields("UseDateTime") = Now 'Запись метки времени использования .Fields("errNumber") = Err.Number : .Fields("errString") = Err.Description: Err.Clear .MoveNext Loop .Close End With Set Recordset = Nothing : Connection.Close : Set Connection = Nothing Call ShowOkMessage End Sub Public Function GetTPQConString(myServerAddress As String, myDataBase As String) As String 'Строка подключения для "запроса к серверу" GetTPQConString = "ODBC; DRIVER=SQL Server; Server=" & myServerAddress & _ ";Database=" & myDataBase & _ ";UID=odmin;PWD=pwd;" End Function
SQL-запрос MS Access в коде VBA
Задай вопрос
спросил
Изменено
6 лет назад
Просмотрено
997 раз
Мне нужно еще раз взглянуть на этот SQL-запрос, встроенный в код VBA. Я делаю приложение MS Access, которое возвращает набор данных на основе критериев даты и даты, установленных пользователем в определенных полях выбора даты. SQL-запрос, который вы видите, на самом деле был протестирован статически в представлении дизайна запроса MS Access. Я протестировал его с реальными датами, где вы видите Me.from_filter и Me.to_filter. Это сработало отлично! Если вы выбрали что-то вроде с 01.01.2015 по 01.05.2015, он вернет столбцы всех месяцев, которые вам нужны. Идеальный. Теперь, когда я вставляю его в код VBA и назначаю управляющей переменной, я получаю «Ошибка времени выполнения« 2342 »: действие RunSQL требует аргумента, состоящего из оператора SQL». Может кто-нибудь посмотреть на это и сказать мне, что может быть не так?
База данных сравнения параметров Опция явная Dim strSQL как строка Частная подкоманда Command0_Click() Если IsNull(Me.from_filter) или IsNull(Me.to_filter), то MsgBox "Вы не ввели дату начала или дату окончания" Еще strSQL = "ПРЕОБРАЗОВАТЬ СУММУ (dbo_ASSET_HISTORY. MARKET_VALUE) AS SumOfMARKET_VALUE" _ & "ВЫБЕРИТЕ [dbo_FIRM]![ИМЯ] КАК [ИМЯ ФИРМЫ], dbo_FUND.CUSIP, dbo_FUND.FUND_NAME, dbo_FUND.PRODUCT_NAME" _ & "FROM (dbo_ASSET_HISTORY INNER JOIN dbo_FIRM ON dbo_ASSET_HISTORY.FIRM_ID = dbo_FIRM.FIRM_ID) INNER JOIN dbo_FUND ON dbo_ASSET_HISTORY.FUND = dbo_FUND.FUND " _ & "ГДЕ (((dbo_FIRM.Name) Like 'Voya F*') And ((dbo_ASSET_HISTORY.PROCESS_DATE) >= #" & Me.from_filter & "# And (dbo_ASSET_HISTORY.PROCESS_DATE) <= #" & Me.to_filter & "#))" _ & "ГРУППИРОВАТЬ ПО [dbo_FIRM]![ИМЯ], dbo_FUND.CUSIP, dbo_FUND.FUND_NAME, dbo_FUND.PRODUCT_NAME" _ & "PIVOT [dbo_ASSET_HISTORY]![ASSET_YEAR] & '-' & [dbo_ASSET_HISTORY]![ASSET_MONTH];" DoCmd.RunSQL (strSQL) Конец, если Конец сабвуфера
- vba
- мс-доступ
0
RunSQL предназначен для выполнения запросов действий, таких как обновление, вставка, выбор, удаление и т. д., в соответствии с определением Microsoft https://msdn.microsoft.com/en-us/library/office/ff194626.aspx, вам, вероятно, следует использовать OpenQuery или аналогичный для запуска вашего запроса.
1
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Использование Access VBA для запроса к базе данных SQL Server
Автор mandy. doward
Теги:
SQL Server, Access, VBA, Функция 0 комментариев
Хотя мы можем создавать связанные таблицы в Access, которые извлекают информацию из SQL База данных сервера бывают случаи, когда вы хотите проверить значение или найти значение в базовой базе данных SQL Server непосредственно из запроса доступа.
С помощью VBA мы можем сделать это!
Мы рассмотрим пример, который позволяет нам искать общее значение дохода клиента из запроса доступа.
VBA для запроса базы данных SQL Server
Следующая функция VBA может использоваться из проекта Access VBA. Однако сначала вам потребуется добавить в проект библиотеку ADODB.
Открытая функция LookupAWCustomerRevenue(intID As Long) как валюта Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim strConnString как строка Если intID = 0 Тогда LookupAWCustomerRevenue = 0 Еще strConnString = "Поставщик = SQLOLEDB; Источник данных = W10NBMJD\SQL2014;" _ & "Исходный каталог=AdventureWorks2014;Интегрированная безопасность=SSPI;" Установить conn = новый ADODB. Connection conn.Open strConnString Установите rs = conn.Execute («ВЫБЕРИТЕ СУММУ (TotalDue) AS CustRev FROM Sales.SalesOrderHeader WHERE CustomerID = « & intID) Если Не ЯвляетсяЧисловым(rs.Fields("CustRev").Value) Then LookupAWCustomerRevenue = 0 Еще LookupAWCustomerRevenue = rs.Fields("CustRev").Value rs.Закрыть Конец, если Конец, если Завершить функцию
В этом примере мы используем соединение ADO для подключения к экземпляру SQL Server (DBSRV\SQL2014):
strConnString = "Provider=SQLOLEDB;Data Source=DBSRV\SQL2014;" _ & "Исходный каталог=AdventureWorks2014;Интегрированная безопасность=SSPI;"
- Параметр Provider указывает, что будет установлено соединение OLDEB, а параметр Data Source указывает на экземпляр SQL Server.
- Параметр Initial Catalog идентифицирует запрашиваемую базу данных (AdventureWorks2014)
- Параметр встроенной безопасности указывает, что для проверки подлинности с помощью SQL Server будет использоваться проверка подлинности Windows.
Объект RecordSet (rs) используется для создания набора записей из оператора SELECT:
Set rs = conn.Execute("SELECT SUM(TotalDue) AS CustRev FROM Sales.SalesOrderHeader WHERE CustomerID = " & intID)
Оператор SELECT состоит из буквальной строки и значения переменной intID, которое передается в функцию при ее вызове.
Оператор If в начале проверяет значение intID, равное 0. Целочисленные переменные по умолчанию имеют нулевое значение, если они не инициализированы (другими словами, если при вызове функции не указано значение). Если в функцию не передается значение, в качестве значения дохода возвращается значение 0 .
Если intID = 0 Тогда LookupAWCustomerRevenue = 0
Второй оператор If проверяет нечисловое значение, возвращаемое оператором SELECT. Если идентификатор клиента, переданный в функцию, действителен, но они не разместили ни одного заказа, выражение SUM(TotalDue) вернет значение 9.0096 Значение NULL . Если это произойдет, функция вместо этого вернет значение 0.
Если НеЧисло(rs.Fields("CustRev").Значение) Тогда LookupAWCustomerRevenue = 0
Сценарий со значением NULL показан на следующем снимке экрана.
Я поставил точку останова на строку кода VBA, содержащую оператор If, и открыл окно Locals , чтобы увидеть все значения переменных в этот момент выполнения.
Я протестировал функцию, выполнив ее из Immediate Window в редакторе VBA:
?LookupAWCustomerRevenue(1)
С установленной точкой останова выполнение кода автоматически останавливается на отмеченной строке и позволяет нам просматривать среду в этой точке. исполнения.
Окно Locals на приведенном выше снимке экрана показывает объектную переменную Recordset rs и, в частности, значение первого поля из rs, «CustRev». Мы видим, что он установлен на Нуль . Это связано с тем, что клиент со значением CustomerID, равным 1, не разместил ни одного заказа и, следовательно, не имеет результирующего значения дохода.
На следующем снимке экрана показано, что запрос возвращает NULL при выполнении непосредственно на экземпляре SQL Server:
Если предположить, что в функцию передан допустимый идентификатор клиента, а оператор SELECT возвращает значение, отличное от NULL, функция будет вернуть общий доход от продаж для этого клиента в виде валюты.
LookupAWCustomerRevenue = rs.Fields("CustRev").Value
Вызов функции VBA из запроса доступа
Вызов функции VBA из запроса доступа прост. При создании запроса доступа вы можете создавать выражения из встроенной библиотеки функций доступа. Любые функции VBA, которые вы создали в проекте Access, также доступны для этих выражений. На следующем снимке экрана это показано:
В четвертом столбце показано выражение для получения общего показателя дохода клиента — оно вызывает функцию VBA с именем LookupAWCustomerRevenue .
В следующем примере показаны результаты этого запроса:
Сводка
функции из запроса Access.