Содержание
- SQL запрос из Excel VBA
- Sql запрос из excel в excel
- SQL запросы в Microsoft Excel
- Создание SQL запроса в Excel
- Способ 1: использование надстройки
- Способ 2: использование встроенных инструментов Excel
- Способ 3: подключение к серверу SQL Server
- Импорт данных из базы данных с помощью запроса на ее языке (Power Query)
- См. также
- SQL запрос к Oracle из Excel через ODBC
- Sql запрос из Excel в Access
- SQL запрос на добавление данных из VBA Excel в таблицу Access
- Запрос из Excel к SQL серверу (Иное/Other)
SQL запрос из Excel VBA
SQL расшифровывается как Structured Query Language (структурированный язык запросов) и является языком, который используется для получения информации из баз данных (таких как Access , SQL Server from Microsoft , Oracle , Sybase , SAP и других). Вы также можете получать данные из интернета, текстовых файлов или других Excel или CSV файлов.
Итак, нам нужно соединение с базой данных (переменная varConn в макросе ниже) и SQL запрос (переменная varSQL ), чтобы автоматизировать получение данных из базы для отчета. В примере ниже есть SQL запрос , который получает данные с малой базы данных в Access.
Нажмите скачать базу данных Access . Для корректного соединения база данных должна быть в папке «Мои документы«. Файл Access будет выглядеть:
Давайте напишем свой макрос, который будет осуществлять SQL запрос .
Меню Сервис — Макрос — Редактор Visual Basic , вставьте новый модуль (меню Insert — Module ) и скопируйте туда текст макроса:
Нажимаем сохранить и возвращаемся к Excel . Выбираем в меню Вид — Макросы (Alt + F8) название нашего макроса » SQLQuery_1 «.
Источник
Sql запрос из excel в excel
SQL запросы в Microsoft Excel
Смотрите также SQL cервер» - формы работы с 42745, 0, 42746,: Все равно, спасибо из БД через ( на базе данных. бесплатного пользования надстройкой по кнопке, которая размещена на файла, после чегоУрок: «Умные» таблицы в сам редактор SQL, стояла галочка, если«Начать пробный период»
После этого запуститсяSQL – популярный язык
ввожу имя сервера Access через VBA 2, 1, 2,
Создание SQL запроса в Excel
) запрос rsORA.Open ‘SELECT. (телосервер При запуске запроса ограничен всего двумя«Из других источников» ленте в блоке кликнуть на кнопку Экселе запросов. В нем заголовки в вашем. окно, в котором программирования, который применяется — выбираю базу Excel — согласен. ‘Кратко’, ‘Полно’)
Способ 1: использование надстройки
Кстати, все заработало, запроса)’, cnORA ‘Вставкаи на ее языке календарными неделями., которая размещается на инструментов с одноименным«OK»Существует также способ создать нужно писать программный массиве действительно присутствуют.Далее мы возвращаемся к нужно будет подтвердить при работе с данных из выпадающего Но Access используюТипы данных в когда я изменил даннных из полученого
- Da записи другим пользователем,Автор: Максим Тютюшев ленте в блоке названием.. SQL запрос к код. Наименования столбцов Затем жмите на окну лицензии. Как согласие с лицензионным базами данных (БД). списка — выбираю только для хранения Access: процедуру подключения так: набора записей ‘1-ййства базы данных вам будет предложено,Примечание: инструментов
После этого запускается окноВслед за этим запускается выбранному источнику данных выбранной таблицы там
кнопку видим, введенные вами соглашением на использование Хотя для операций интересующую таблицу - данных. Сделать полноценноеNoParent — числоWith conn .ConnectionString вариант — все
), вы увидите в чтобы убедиться, что
Мы стараемся как«Получение внешних данных» подключения к книге. окно выбора таблицы с помощью встроенных уже будут отображаться«OK» значения уже отображаются. продукции компании Microsoft
с базами данных указываю диапазон, куда приложение в AccessNoResponsible — число = ‘Provider=MSDAORA; Data полученные записи вставляются строке, чтобы запросить вы знаете, запросов, можно оперативнее обеспечивать. На этот раз В нем мы в указанной базе инструментов Эксель. автоматически. Выбор столбцов. Теперь нужно просто — NET Framework в пакете Microsoft следует вставить данные. не получилось (слишкомEosdoTask — boolean Source=var1; ‘ &
в виде талицы доступ к серверу которые будут вычисляться вас актуальными справочными из раскрывшегося списка видим наименование ранее данных. В центральнойЗапускаем программу Excel. После для обработки производитсяПосле этого весь указанный нажать на кнопку
4. Для этого Office имеется отдельноеНо при этом сложно для моихReviewer — число _ ‘User на лист Range(‘адрес или базы данных
с учетными данными. материалами на вашем выбираем вариант подключенной нами базы области следует выбрать этого перемещаемся во с помощью команды диапазон будет отформатирован,«OK» всего лишь нужно приложение — Access, получаю ЦЕЛУЮ таблицу, скромных знаний), аResponsible — число Password=var3;’ .Open End верхней левой ячейки’).CopyFromRecordset
(если сведения оPower Query позволяет задать языке. Эта страница«С сервера SQL Server» данных. Если подключенных наименование нужной таблицы вкладкуSELECT как таблица, что. кликнуть по кнопке но программа Excel а мне нужен если оставить наборGroupSub — текст With rsORA ‘2-й вариант запросе доступа указан запрос языке базы переведена автоматически, поэтому. БД несколько, то
(если их несколько),«Данные». Нужно оставить в повлияет как наПосле того, как вы«Принимаю» тоже может работать только лишь один таблиц — точноDateStart — Date/timepauletto — вставляются определенные в Power BI данных в поле ее текст можетПроисходит открытие окна подключения выбираем нужную и а потом нажать. перечне только те его свойства (например, проделаете вышеуказанные манипуляции,внизу окошка. с БД, делая столбец с конкретным какой-нибудь пользователь своими
DateEndPlan — date/time: Как сделать связь поля в заданную для источника данных).Инструкцию SQL содержать неточности и к серверу баз выделяем её. После на кнопкуВ блоке инструментов колонки, которые вы растягивание), так и в вашем экземпляреПосле этого установщик производит SQL запросы. Давайте названием. кривыми ручонками влезетTime — число с базой данных ячейку While Not Дополнительные сведения о, при подключении к грамматические ошибки. Для данных. В поле этого щелкаем по«Далее»«Получение внешних данных»
желаете, чтобы указанная на визуальное отображение. Эксель появится новая загрузку обязательных файлов узнаем, как различнымиЗаранее благодарен! в запрос илиDeadline — date/time через ADO ,чтобы
rsORA.EOF . Range(‘адрес запросе доступа к базе данных. В нас важно, чтобы«Имя сервера» кнопке.
, который расположен на команда обрабатывала. Указанной таблице будет вкладка – и начинает процесс способами можно сформировать
SLAVICK таблицу и что-тоImportance — число результат какого-то запроса ячейки’)=rsORA.Fields(номер поля из источнику данных читайте приведенном ниже примере эта статья была
указываем наименование того«Свойства…»После этого открывается окно ленте, жмем наДалее пишется текст команды, присвоено имя. Чтобы«XLTools» их установки. подобный запрос.: А если так: поменяет, а работаяStatus — число в БД выводился запроса — начинается Запросов на доступ мы Импорт данных вам полезна. Просим сервера, к которому
в правой части сохранения файла подключения значок которую вы хотите его узнать и. Но не спешимДалее откроется окно, в
- Скачать последнюю версию»Данные» — «Из
- в Excel -DateEndFact — date/time
- в ячейку Excel с 0).Value .
- к внутренним источникам из базы данных
- вас уделить пару выполняем подключение. В
окна. данных. Тут указаны«Из других источников» применить к выбранным по желанию изменить, переходить в неё. котором вы должны Excel других источников» — врятли куда-то полезет,TaskShortText — текстAlex77755 rsORA.MoveNext Wend ‘Закрываем
данных. SQL Server, с секунд и сообщить, группе параметровЗапускается окно свойств подключения. основные сведения о. Открывается список дальнейших объектам. Команды составляются клацаем по любому Прежде, чем создавать подтвердить свое согласиеЧитайте также: Как создать «Из Microsoft Query»
нажал на кнопочкуTaskFullText — текст: А стандартный метод переменные rsORA.Close cnORA.CloseЕсли установить подключение данных помощью запроса на помогла ли она«Учетные сведения» Перемещаемся в нем
подключении, которое мы вариантов действий. Выбираем
Способ 2: использование встроенных инструментов Excel
при помощи специальных элементу массива. На запрос, нужно преобразовать на установку этой базу данных в
- Если нет подключения и выгрузил наУже всю голову не устраивает?Sinister
результат возвращается в ее языке. Процедура вам, с помощьюнужно определиться, как во вкладку настроили. В данном в нем пункт операторов. Вот основные ленте появляется дополнительная табличный массив, с надстройки. Для этого
Экселе в списке, то: лист данные, нажал сломал. Все значенияДанные — Импорт: У меня наРедакторе запросов работает аналогично всех кнопок внизу страницы.
именно будет происходить«Определение» окне достаточно нажать«Из мастера подключения данных» операторы SQL: группа вкладок – которым мы будем нужно щелкнуть поЯзык запросов SQL отличается «новый источник данных»
на кнопочку - текстовые — в внешних данных - выражении ‘cnORA As. баз данных, поддерживаемые Для удобства также подключение: с использованием. В поле на кнопку.ORDER BY«Работа с таблицами» работать, в так кнопке от аналогов тем, — — и добавил или изменил. кавычках (апострофах), других создать запрос. ADODB.Connection’ возникает ошибкаФигуры данных как Power Query. приводим ссылку на проверки подлинности Windows«Текст команды»«Готово»Запускается– сортировка значений;
. Перемещаемся во вкладку называемую, «умную» таблицу«Установить» что с ним создать Плюс формат Excel типов данных -указать путь, выбрать компиляции. Для выполнение вы предпочитаете, затемПодключение к базе данных
оригинал (на английском или путем введения, находящееся внизу текущего.Мастер подключения данныхJOIN«Конструктор» и присвоить ей. работают практически все
- языке) . имени пользователя и
- окна, записываем SQLНа листе Excel запускается
- . В перечне типов– объединение таблиц;
, размещенную в ней. имя.Затем начинается процедура установки современные системы управления столбец, любой таблицы пользователя, не надо перевел из форматаpauletto требуется что-то дополнительноПрименить и закрыть помощью Power Query.Примечание: пароля. Выставляем переключатель команду в соответствии окошко импорта данных. источников данных выбираем
GROUP BY На ленте вДля этого выделяем непосредственно самой надстройки. БД. Поэтому вовсе
Далее—Далее ничего объяснять. представления даты (ДД.ММ.ГГГГ): устанавливать кроме Офисадля сохранения изменений На вкладке ленты согласно принятому решению. с синтаксисом данного В нем можно«ODBC DSN»
– группировка значений; блоке инструментов указанный массив илиПосле её завершения откроется не удивительно, чтоЕсли нужно дополнительноКстати, «2» - в числовое представление..Alex77755 2000, в котором и импортировать данныеPOWER QUERYPower Query Если вы выбрали
языка, о котором указать, в каком. После этого щелкаемSUM«Свойства» любой его элемент. окно, в котором такой продвинутый табличный подправить запрос, то это дата 01.01.1900.snipe, а не могли я предполагаю его листа.щелкнитеизвестна как второй вариант, то мы вкратце говорили
Способ 3: подключение к серверу SQL Server
кроме того в при рассмотрении хотите, чтобы данные«Далее»DISTINCT«Имя таблицы»«Главная» инсталляция успешно выполнена. обладающий многими дополнительными изменение данных в даты, например, нет2
- Alex77755meja источников>в Excel 2016. соответствующие поля придетсяСпособа 1 были представлены:.– удаление дубликатов.будет указано наименованиещелкаем по значку В указанном окне функциями, тоже умеет «Microsoft Query», если
— Импорт внешних Objects 2.x Library как написать макрос,. Подробнее об этом того, как все«OK»Отчёт сводной таблицы, в котором нужно операторыПри желании это наименование ленте в блоке«Закрыть» языком SQL, используя в Microsoft Excel» — не такая все-таки как дату данных — создать в Tools/Refrences который по даннымВо всплывающем окне читайте в статье настройки проведены, жмем
Импорт данных из базы данных с помощью запроса на ее языке (Power Query)
; выбрать тип источника.MAX пользователь может изменить инструментов. Excel, могут упорядочить и ГОТОВО ровная дата получается (возможно надо учесть запрос.Sinister запроса к базеБаза данных Microsoft SQL Получение и преобразование на кнопкуПосле этого производится автоматическийСводная диаграмма Выбираем наименование, на более информативное,«Стили»
Надстройка установлена и теперь множество различных разрозненныхТут можно править ) что формат америкоскийAlex77755: Все очень хорошо данных Oracle устанавливал: в Excel 2016.«Далее» возврат к окну
.«MS Access Database»MIN просто вписав в. После этого открывается можно запускать файл табличных данных. SQL запрос.Kontugenyi мм.дд.гггг) #12.31.2016#: Показаны не попорядку скомпилировалось, спасибо Только бы значения переменныхУкажитеPower Query обеспечивает гибкость,. После выполнения этого подключения к книге.Выбираем нужный вариант. Чуть. Затем щелкаем по, поле с клавиатуры
список выбора различных Excel, в которомНо для начала давайтеПосле того как, очевидная ошибка влично мое мнение1=последний осталась последняя проблема или ячеек рабочегосервер чтобы импортировать данные действия происходит подключение Нам остается только ниже требуется указать, кнопкеAVG желаемый вариант и
стилей. Выбираем тот нужно организовать SQL рассмотрим вариант, когда создали нужный запрос: использовании зарезервированного слова что делать формуKontugenyi — это runtime листа? Очень хотелосьи из самых разных к указанному серверу. кликнуть по кнопке куда именно следует«Далее»
, нажав на клавишу стиль, который вы запрос. Вместе с из Экселя можноФайл — вернутьTime в Excel для: Добрый день, форумчане! error -2147217843 (80040e4d) бы пример соединения
базу данных видов баз данных, Дальнейшие действия по
«Обновить» поместить данные: на.COUNTEnter считаете нужным. На листом Эксель открывается создать SQL запрос данные в Microsoft
. Если уж так передачи инфы в Столкнулся с ошибкой ‘Automation error’. Возникает с базой через, из которой вы которые он поддерживает организации запроса к
в нем. Происходит новый лист илиОткрывается небольшое окошко навигации,,. функциональность таблицы указанный окно для ввода не с помощью Excel
назвали поле, хотя Акс это полное запроса на добавление при выполнении Open. ODBC и строку хотите импортировать данные (не содержит Microsoft базе данных аналогичны обращение к базе на текущем листе. в котором следуетLEFTПосле этого таблица готова выбор никак не кода лицензии XLTools. стандартного инструментария, аЯнек это и не извращение при попытке передать Единственное подозрение у выполнения запроса и
с помощью запросов Access). Запуск запросов тем, которые мы данных с запросом,
В последнем случае перейти в директориюи др. и можно переходить повлияет, так что Если у вас воспользовавшись сторонней надстройкой.
См. также
: SLAVICK, Вах! Дорогой! лучший вариант, то
SQL запрос к Oracle из Excel через ODBC
проще сделать форму данные из формы меня на то, считывания значений разультата на языке базы языке базы данных, описывали в предыдущем после чего БД предоставляется также возможность расположения базы данныхВ нижней части окна непосредственно к организации основывайте свой выбор имеется код, то Одной из лучших
Еще не знаю,
его имя надо в аксе и в Excel в что неправильно указан его выполнения.
данных. которые можно сэкономить способе. возвращает результаты его выбора координат размещения. в формате mdb следует указать, куда запроса. Перемещаемся во исключительно на основе нужно ввести его надстроек, выполняющих эту как эта хрень брать в прямые напрямую вводить инфу таблицы Access. Ошибка параметр Data Source.Заранее благодарен!Разверните поле время, необходимое дляКак видим, в Экселе обработки назад на По умолчанию данные или accdb и именно будет выводиться вкладку предпочтений визуального отображения. в соответствующее поле задачу, является комплекс работает, но ведь скобкиKontugenyi — ошибка синтаксиса Каким его задавать?meja
Инструкцию SQL создания запросов с SQL запрос можно лист Excel, в размещаются на текущем выбрать нужный файл результат обработки. Это«XLTools»Вслед за этим запускается и нажать на инструментов XLTools, который
она работает. В[Time]: Спасибо откликнувшимся.. столько в инструкции INSERT В OrantNETWORKADMINTnsnames.ora записано
: Один из варианти вставьте или помощью интерфейса Power организовать, как встроенными ранее перенесенную нами листе. Левый верхний БД. Навигация между может быть новый. небольшое окошко. В кнопку кроме указанной возможности, свойствах подключения вАппаздал ошибок сделал - INTO. Уже перелистал имя, которое я — подключиться, используя введите запрос на
Query. Эта функция инструментами программы, так таблицу. угол импортируемого объекта логическими дисками при лист книги (поПосле перехода на ленте нем указываются координаты«OK» предоставляет массу других определении в тексте
Янек даже не ожидал. форум и никак
пытался использовать в ADO. Ниже представлены языке базы данных,
особенно полезна для и при помощиКроме того, посредством инструментов размещается в ячейке этом производится в умолчанию) или определенный
Sql запрос из Excel в Access
в блоке инструментов таблицы. Как правило,. Если вы желаете функций. Правда, нужно команды ввел SELECT: Добрый день, друзья. Список ошибок, может
не могу понять качестве Data Source. узловые моменты кода.
а затем нажмите работы с сложных сторонних надстроек. Каждый
Excel существует возможностьA1
специальном поле диапазон на текущем«SQL запросы» программа сама «подхватывает» использовать бесплатную версию
заметить, что бесплатный ‘нужный мне столбец’ Может, кто знает: кому пригодиться: в чем ошибка. Должно быть это
’Объявляем вначале переменныекнопку ОК
запросов, которые уже
SQL запрос на добавление данных из VBA Excel в таблицу Access
пользователь может выбрать соединения с сервером.«Диски» листе. В последнемщелкаем по значку полный адрес массива, на 14 дней, период пользования инструментом FROM ‘имя нужной1. Имеем Excel1) Дату нужно Раньше аналогичный код неправильно? Dim cnORA As.
существуют — и тот вариант, который
SQL Server иПосле того, как все. Между каталогами производится случае нужно переставить«Выполнить SQL» даже если вы то следует просто составляет всего 14 мне таблицы’ и 2010 заключать в символы работал.
meja ADODB.Connection ‘для соединения
Если вы подключаетесь к
могут хотите или
удобнее для него
посыла к нему
настройки импорта указаны,
переход в центральной
переключатель в соответствующую
.
выделили только одну
нажать на кнопку
дней, а потом
усё заработало.
2. Имеем сервер
#
Запрос на добавление
: Может быть и Dim rsORA As серверу в первый не знаете, как и является более запросов. Построение запроса жмем на кнопку области окна под позицию и указать
Запускается окно выполнения SQL ячейку в нем.
«Пробная лицензия»
придется покупать лицензию.СПАСИБО. А ведь
с базами данных2) Разделители в выглядит следующим образом в этом ошибка, ADODB.Recordset ‘для получения
раз, вы увидите перестроить с помощью подходящим для решения не отличается от«OK» названием
координаты этого диапазона. запроса. В левой Но на всякий
.После того, как вы через «Данные» - и именами таблиц дате не «.»,INSERT INTO TBLtask (NoParent,
но скорее всего записей ‘Устанавливаем соединение запрос на выберите
интерфейса Power Query. конкретно поставленной задачи. предыдущего варианта, но
.«Каталоги»После того, как запрос
его области следует случай не мешает
При выборе пробной лицензии
скачали файл надстройки «Из других источников»3. Необходимо создать а «/» NoResponsible, EosdoTask, Reviewer, в другом: нужно с БД Set режим проверки подлинностиПримечание по безопасности: Хотя, возможности надстройки прежде всего, нужноКак видим, таблица из. В левой области составлен и соответствующие указать лист документа проверить ту информацию, открывается ещё одноxltools.exe — «С сервера динамическую ссылку на3) Использовал резервированную Responsible, GroupSub, DateStart, еще дописать Set cnORA = New для подключения к Один цели запросов на XLTools, в целом, установить само подключение. базы данных перемещена
окна отображаются файлы, настройки произведены, жмем и таблицу на которая находится в небольшое окошко, где, следует приступить к SQL cервер» редактирование один (!) из переменную «Time» в DateEndPlan, Time, Deadline,
rsORA = New ADODB.Connection cnORA.Open ‘Provider=msdaora;’ базе данных. Выберите языке базы данных все-таки несколько более Посмотрим, как это на лист. Затем расположенные в текущем на кнопку древе данных, к поле нужно указать своё
его установке. Для
Запрос из Excel к SQL серверу (Иное/Other)
поля «текст команды» столбцов известной таблицы. качестве имени поля.
Importance, Status, DateEndFact, as ADODB.Recordset, чтобы
+ _ ‘Data режим проверки подлинности — не стороне
продвинутые, чем у сделать. перемещаемся во вкладку каталоге, если они
«Выполнить» которой будет формироваться«Укажите расположение данных таблицы» имя и фамилию запуска инсталлятора нужно было доступно, но4. Что делаю:4) Формат даты TaskShortText, TaskFullText) values инициализировать переменную. Я Source=имя базы;’ + и продолжить.
действием. Тем не встроенных инструментов Excel.Запускаем программу Excel и«Данные» имеют расширение mdbв нижней части
запрос.
. Также нужно обратить (можно псевдоним) и
произвести двойной щелчок после нажатия кнопки Раздел «Данные» -
американский «mm.dd.yy» (0, 1, False, просто забыл это _ ‘User > менее Power Query Главный же недостаток
переходим во вкладку
и щелкаем по или accdb. Именно окна. После этогоВ правой области окна, внимание, чтобы около электронную почту. После левой кнопки мыши «Ок» показывало средний «Из других источников»
Проблема решена. 16, 17, ‘ПФА
указать, сорри :-) пользователя;’ + _
Если не имеет доступа не гарантирует, что XLTools заключается в
«Данные» кнопке в этой области введенная операция будет которая занимает его пункта этого жмите на по установочному файлу. палец. — «С сервераПо поводу убогости и прогноз’, 42744,Sinister ‘Password=пароль;’ ‘Получаем данные к источнику данных запрос не влияет том, что срок. После этого щелкаем«Подключения» нужно выбрать наименование произведена. большую часть, располагается«Таблица с заголовками»
Источник
Содержание
- Создание SQL запроса в Excel
- Способ 1: использование надстройки
- Способ 2: использование встроенных инструментов Excel
- Способ 3: подключение к серверу SQL Server
- Вопросы и ответы
SQL – популярный язык программирования, который применяется при работе с базами данных (БД). Хотя для операций с базами данных в пакете Microsoft Office имеется отдельное приложение — Access, но программа Excel тоже может работать с БД, делая SQL запросы. Давайте узнаем, как различными способами можно сформировать подобный запрос.
Читайте также: Как создать базу данных в Экселе
Язык запросов SQL отличается от аналогов тем, что с ним работают практически все современные системы управления БД. Поэтому вовсе не удивительно, что такой продвинутый табличный процессор, как Эксель, обладающий многими дополнительными функциями, тоже умеет работать с этим языком. Пользователи, владеющие языком SQL, используя Excel, могут упорядочить множество различных разрозненных табличных данных.
Способ 1: использование надстройки
Но для начала давайте рассмотрим вариант, когда из Экселя можно создать SQL запрос не с помощью стандартного инструментария, а воспользовавшись сторонней надстройкой. Одной из лучших надстроек, выполняющих эту задачу, является комплекс инструментов XLTools, который кроме указанной возможности, предоставляет массу других функций. Правда, нужно заметить, что бесплатный период пользования инструментом составляет всего 14 дней, а потом придется покупать лицензию.
Скачать надстройку XLTools
- После того, как вы скачали файл надстройки xltools.exe, следует приступить к его установке. Для запуска инсталлятора нужно произвести двойной щелчок левой кнопки мыши по установочному файлу. После этого запустится окно, в котором нужно будет подтвердить согласие с лицензионным соглашением на использование продукции компании Microsoft — NET Framework 4. Для этого всего лишь нужно кликнуть по кнопке «Принимаю» внизу окошка.
- После этого установщик производит загрузку обязательных файлов и начинает процесс их установки.
- Далее откроется окно, в котором вы должны подтвердить свое согласие на установку этой надстройки. Для этого нужно щелкнуть по кнопке «Установить».
- Затем начинается процедура установки непосредственно самой надстройки.
- После её завершения откроется окно, в котором будет сообщаться, что инсталляция успешно выполнена. В указанном окне достаточно нажать на кнопку «Закрыть».
- Надстройка установлена и теперь можно запускать файл Excel, в котором нужно организовать SQL запрос. Вместе с листом Эксель открывается окно для ввода кода лицензии XLTools. Если у вас имеется код, то нужно ввести его в соответствующее поле и нажать на кнопку «OK». Если вы желаете использовать бесплатную версию на 14 дней, то следует просто нажать на кнопку «Пробная лицензия».
- При выборе пробной лицензии открывается ещё одно небольшое окошко, где нужно указать своё имя и фамилию (можно псевдоним) и электронную почту. После этого жмите на кнопку «Начать пробный период».
- Далее мы возвращаемся к окну лицензии. Как видим, введенные вами значения уже отображаются. Теперь нужно просто нажать на кнопку «OK».
- После того, как вы проделаете вышеуказанные манипуляции, в вашем экземпляре Эксель появится новая вкладка – «XLTools». Но не спешим переходить в неё. Прежде, чем создавать запрос, нужно преобразовать табличный массив, с которым мы будем работать, в так называемую, «умную» таблицу и присвоить ей имя.
Для этого выделяем указанный массив или любой его элемент. Находясь во вкладке «Главная» щелкаем по значку «Форматировать как таблицу». Он размещен на ленте в блоке инструментов «Стили». После этого открывается список выбора различных стилей. Выбираем тот стиль, который вы считаете нужным. На функциональность таблицы указанный выбор никак не повлияет, так что основывайте свой выбор исключительно на основе предпочтений визуального отображения. - Вслед за этим запускается небольшое окошко. В нем указываются координаты таблицы. Как правило, программа сама «подхватывает» полный адрес массива, даже если вы выделили только одну ячейку в нем. Но на всякий случай не мешает проверить ту информацию, которая находится в поле «Укажите расположение данных таблицы». Также нужно обратить внимание, чтобы около пункта «Таблица с заголовками», стояла галочка, если заголовки в вашем массиве действительно присутствуют. Затем жмите на кнопку «OK».
- После этого весь указанный диапазон будет отформатирован, как таблица, что повлияет как на его свойства (например, растягивание), так и на визуальное отображение. Указанной таблице будет присвоено имя. Чтобы его узнать и по желанию изменить, клацаем по любому элементу массива. На ленте появляется дополнительная группа вкладок – «Работа с таблицами». Перемещаемся во вкладку «Конструктор», размещенную в ней. На ленте в блоке инструментов «Свойства» в поле «Имя таблицы» будет указано наименование массива, которое ему присвоила программа автоматически.
- При желании это наименование пользователь может изменить на более информативное, просто вписав в поле с клавиатуры желаемый вариант и нажав на клавишу Enter.
- После этого таблица готова и можно переходить непосредственно к организации запроса. Перемещаемся во вкладку «XLTools».
- После перехода на ленте в блоке инструментов «SQL запросы» щелкаем по значку «Выполнить SQL».
- Запускается окно выполнения SQL запроса. В левой его области следует указать лист документа и таблицу на древе данных, к которой будет формироваться запрос.
В правой области окна, которая занимает его большую часть, располагается сам редактор SQL запросов. В нем нужно писать программный код. Наименования столбцов выбранной таблицы там уже будут отображаться автоматически. Выбор столбцов для обработки производится с помощью команды SELECT. Нужно оставить в перечне только те колонки, которые вы желаете, чтобы указанная команда обрабатывала.
Далее пишется текст команды, которую вы хотите применить к выбранным объектам. Команды составляются при помощи специальных операторов. Вот основные операторы SQL:
- ORDER BY – сортировка значений;
- JOIN – объединение таблиц;
- GROUP BY – группировка значений;
- SUM – суммирование значений;
- DISTINCT – удаление дубликатов.
Кроме того, в построении запроса можно использовать операторы MAX, MIN, AVG, COUNT, LEFT и др.
В нижней части окна следует указать, куда именно будет выводиться результат обработки. Это может быть новый лист книги (по умолчанию) или определенный диапазон на текущем листе. В последнем случае нужно переставить переключатель в соответствующую позицию и указать координаты этого диапазона.
После того, как запрос составлен и соответствующие настройки произведены, жмем на кнопку «Выполнить» в нижней части окна. После этого введенная операция будет произведена.
Урок: «Умные» таблицы в Экселе
Способ 2: использование встроенных инструментов Excel
Существует также способ создать SQL запрос к выбранному источнику данных с помощью встроенных инструментов Эксель.
- Запускаем программу Excel. После этого перемещаемся во вкладку «Данные».
- В блоке инструментов «Получение внешних данных», который расположен на ленте, жмем на значок «Из других источников». Открывается список дальнейших вариантов действий. Выбираем в нем пункт «Из мастера подключения данных».
- Запускается Мастер подключения данных. В перечне типов источников данных выбираем «ODBC DSN». После этого щелкаем по кнопке «Далее».
- Открывается окно Мастера подключения данных, в котором нужно выбрать тип источника. Выбираем наименование «MS Access Database». Затем щелкаем по кнопке «Далее».
- Открывается небольшое окошко навигации, в котором следует перейти в директорию расположения базы данных в формате mdb или accdb и выбрать нужный файл БД. Навигация между логическими дисками при этом производится в специальном поле «Диски». Между каталогами производится переход в центральной области окна под названием «Каталоги». В левой области окна отображаются файлы, расположенные в текущем каталоге, если они имеют расширение mdb или accdb. Именно в этой области нужно выбрать наименование файла, после чего кликнуть на кнопку «OK».
- Вслед за этим запускается окно выбора таблицы в указанной базе данных. В центральной области следует выбрать наименование нужной таблицы (если их несколько), а потом нажать на кнопку «Далее».
- После этого открывается окно сохранения файла подключения данных. Тут указаны основные сведения о подключении, которое мы настроили. В данном окне достаточно нажать на кнопку «Готово».
- На листе Excel запускается окошко импорта данных. В нем можно указать, в каком именно виде вы хотите, чтобы данные были представлены:
- Таблица;
- Отчёт сводной таблицы;
- Сводная диаграмма.
Выбираем нужный вариант. Чуть ниже требуется указать, куда именно следует поместить данные: на новый лист или на текущем листе. В последнем случае предоставляется также возможность выбора координат размещения. По умолчанию данные размещаются на текущем листе. Левый верхний угол импортируемого объекта размещается в ячейке A1.
После того, как все настройки импорта указаны, жмем на кнопку «OK».
- Как видим, таблица из базы данных перемещена на лист. Затем перемещаемся во вкладку «Данные» и щелкаем по кнопке «Подключения», которая размещена на ленте в блоке инструментов с одноименным названием.
- После этого запускается окно подключения к книге. В нем мы видим наименование ранее подключенной нами базы данных. Если подключенных БД несколько, то выбираем нужную и выделяем её. После этого щелкаем по кнопке «Свойства…» в правой части окна.
- Запускается окно свойств подключения. Перемещаемся в нем во вкладку «Определение». В поле «Текст команды», находящееся внизу текущего окна, записываем SQL команду в соответствии с синтаксисом данного языка, о котором мы вкратце говорили при рассмотрении Способа 1. Затем жмем на кнопку «OK».
- После этого производится автоматический возврат к окну подключения к книге. Нам остается только кликнуть по кнопке «Обновить» в нем. Происходит обращение к базе данных с запросом, после чего БД возвращает результаты его обработки назад на лист Excel, в ранее перенесенную нами таблицу.
Способ 3: подключение к серверу SQL Server
Кроме того, посредством инструментов Excel существует возможность соединения с сервером SQL Server и посыла к нему запросов. Построение запроса не отличается от предыдущего варианта, но прежде всего, нужно установить само подключение. Посмотрим, как это сделать.
- Запускаем программу Excel и переходим во вкладку «Данные». После этого щелкаем по кнопке «Из других источников», которая размещается на ленте в блоке инструментов «Получение внешних данных». На этот раз из раскрывшегося списка выбираем вариант «С сервера SQL Server».
- Происходит открытие окна подключения к серверу баз данных. В поле «Имя сервера» указываем наименование того сервера, к которому выполняем подключение. В группе параметров «Учетные сведения» нужно определиться, как именно будет происходить подключение: с использованием проверки подлинности Windows или путем введения имени пользователя и пароля. Выставляем переключатель согласно принятому решению. Если вы выбрали второй вариант, то кроме того в соответствующие поля придется ввести имя пользователя и пароль. После того, как все настройки проведены, жмем на кнопку «Далее». После выполнения этого действия происходит подключение к указанному серверу. Дальнейшие действия по организации запроса к базе данных аналогичны тем, которые мы описывали в предыдущем способе.
Как видим, в Экселе SQL запрос можно организовать, как встроенными инструментами программы, так и при помощи сторонних надстроек. Каждый пользователь может выбрать тот вариант, который удобнее для него и является более подходящим для решения конкретно поставленной задачи. Хотя, возможности надстройки XLTools, в целом, все-таки несколько более продвинутые, чем у встроенных инструментов Excel. Главный же недостаток XLTools заключается в том, что срок бесплатного пользования надстройкой ограничен всего двумя календарными неделями.
Еще статьи по данной теме:
Помогла ли Вам статья?
Microsoft Access: Use ADO to Execute SQL statements
Microsoft Access: ActiveX Data Objects (ADO), Connect with Access Databases from Excel using VBA.
Part 2 of 4
Microsoft Access: ActiveX Data Objects (ADO), Connect with Access Databases from Excel using VBA:
1. Microsoft Access: ActiveX Data Objects Library (ADO).
2. Microsoft Access: Use ADO to Execute SQL statements.
3. Import or Export Data from Access to Excel using ADO.
4. Microsoft Access: ActiveX Data Objects Extensions (ADOX).
—————
Also Read:
Microsoft Access: Data Access Objects Library (DAO), Connect with Access Databases from Excel using VBA.
—————————————————————————————————————-
Contents:
Use ADO to Execute SQL statements to Manage your Database
SQL Commands explained
Using the ADO connection Execute method to execute the specified query and SQL statements
Use the OpenSchema Method to access information about database tables and columns
Create a database table using ADO, with SQL statements
ADO Find Method — Find or Locate a specific Record
ADO Filter Property to FilterRecords
—————————————————————————————————————
Use ADO to Execute SQL statements to Manage your Database
You can use ADO to execute SQL commands to manipulate data and manage your database. Using SQL requires that the data should be entered as per the table structure, the columns sequence and their data type. SQL, stands for Structured Query Language, is a computer language, and SQL statements are used to store, retrieve and manipulate data in a relational database ex. Access Database.
A relational database has multiple tables, each table comprising of columns (fields) and rows wherein data can be grouped using common attributes, and from which data can be easily retrieved. The multiple tables relate to and work with each other through certain key fields (like unique «ID Nos») viz. a separate table is created for vendor-details and another table for purchase-orders wherein vendor details are not repeated each time a purchase order is made and they are related with each other through a unique «Vendor ID» column which is present in both tables. Whereas flat file databases contain a single table of data with fields representing all parameters viz. a single table will contain details of vendors and purchase orders made, and with each purchase order the vendor details also get repeated resulting in duplication. Flat file databases though easier to maintain, are far less robust and flexible.
A Database Management System (DBMS) is a program which manages data in databases, the manner in which data is created, stored, modified and accessed. A Relational Database Management System (RDBMS) is the DBMS in respect of a relational database. Microsoft Access is a popular RDBMS which supports creating relational databases.
Other examples of DBMS are MySQL, Microsoft SQL Server, Oracle, etc.
In SQL, you can use DDL or DML statements. DDL (stands for Data Definition Language) statements are used to make structural changes, to define the database structure and objects like tables and columns. Examples of some often used DDL commands are CREATE TABLE, DROP TABLE and ALTER TABLE. DML statements are used to managing and manipulating data within the database structure and deal with inserting, updating, deleteing and retrieving database information like records in tables. Examples of often used DML commands are include INSERT, SELECT, UPDATE and DELETE.
SQL Commands explained:
The SQL SELECT Statement (the most commonly used SQL command) selects data from a database, specifying column(s) headings, table(s) from which columns are to be selected, and the criteria for selection. SELECT * is used to select all columns from a table. The FROM clause in a SELECT statement specifies the Table from which columns are to be selected. The WHERE clause in a SELECT statement specifies the criteria for selection. Syntax: SELECT column_name FROM table_name [WHERE clause]. You can also add other optional clauses, viz. GROUP BY, HAVING and ORDER BY.
Use the INSERT command to insert a new row/record at the end of a table.
DELETE removes a specified row(s) from a table (in the DELETE statement, FROM clause is required and WHERE clause is optional).
TRUNCATE TABLE deletes all the rows from the table (does not have the WHERE clause), and the table structure remains.
UPDATE modifies values of records in a table.
CREATE TABLE creates a table with the specified fields.
DROP TABLE deletes all rows and the table structure is removed from the database.
ALTER TABLE is used to add, remove or modify columns in a table.
Using the ADO connection Execute method to execute the specified query and SQL statements
Execute Method (ADO Connection): The Execute method on the specified ADO connection object, executes the SQL statement passed in the CommandText argument. Note that Recordset object returned by the method is a read-only, forward-only cursor. Syntax: Set recordset = connection.Execute (CommandText, RecordsAffected, Options).
CommandText is a string value, and is an SQL statement, stored procedure, or provider-specific text. RecordsAffected is an optional Long variable which indicates the number of records affected by the method. Options is an optional Long value which determines how the CommandText argument is evaluated: adCmdUnspecified — indicates that the CommandText property is unspecified; adCmdText — evaluates CommandText as a textual definition of a command or stored procedure call; adCmdTable — evaluates CommandText as a table name whose columns are all returned by an SQL query; adCmdStoredProc — evaluates CommandText as a stored procedure name; adCmdUnknown (default) — type of command in the CommandText argument is not known; Values of adCmdFile or adCmdTableDirect are not to be used with the Execute Method.
Example 2: Use ADO with SQL statements.
Refer to Images 3a & 3b, as mentioned in the code.
Sub automateAccessADO_2()
‘In this example we show how to use ADO with SQL statements:
‘1. Add and delete records using the ADO connection Execute method to execute SQL statements;
‘2. Select Records/Fields conditionally, using the ADO Recordset Open Method with SQL statements.
‘To use ADO in your VBA project, you must add a reference to the ADO Object Library in Excel (your host application) by clicking Tools-References in VBE, and then choose an appropriate version of Microsoft ActiveX Data Objects x.x Library from the list.
‘—————
‘DIM STATEMENTS
Dim strMyPath As String, strDBName As String, strDB As String
Dim strSQL As String
‘instantiate an ADO object using Dim with the New keyword:
Dim adoRecSet As New ADODB.Recordset
Dim connDB As New ADODB.Connection
‘—————
‘THE CONNECTION OBJECT
strDBName = «SalesReport.accdb»
strMyPath = ThisWorkbook.Path
strDB = strMyPath & «» & strDBName
‘Connect to a data source:
‘For pre — MS Access 2007, .mdb files (viz. MS Access 97 up to MS Access 2003), use the Jet provider: «Microsoft.Jet.OLEDB.4.0». For Access 2007 (.accdb database) use the ACE Provider: «Microsoft.ACE.OLEDB.12.0». The ACE Provider can be used for both the Access .mdb & .accdb files.
connDB.Open ConnectionString:=«Provider = Microsoft.ACE.OLEDB.12.0; data source=» & strDB
‘———————
‘CREATE AND DELETE RECORDS
‘Besides using ADO by itself for entering data (viz. using the AddNew method of the Recordset object) as shown earlier, you can also use ADO with SQL statements.
‘Refer Image 3a for SalesManager Table in MS Access file SalesReport.accdb; Image 3b shows the SalesManager Table after adding new record (before it is deleted).
‘add new records in the SalesManager Table using SQL INSERT INTO statements, by specifying both the column names and the values to be inserted. The Execute method on the specified ADO connection object, executes the SQL statement passed in the CommandText argument:
connDB.Execute «INSERT INTO SalesManager (EmployeeId, FirstName, Surname, JoinDate) VALUES (2, ‘Mary’, ‘Smith’, ‘6/20/2009’)»
‘alternatively add a new record by specifying only the column values to be inserted:
‘connDB.Execute «INSERT INTO SalesManager VALUES (2, ‘Mary’, ‘Smith’, ‘6/20/2009’)»
‘delete records in the SalesManager Table:
strSQL = «DELETE FROM SalesManager WHERE FirstName = ‘Mary’«
connDB.Execute CommandText:=strSQL
‘Value of 0 will be returned which indicates that the recordset is closed, because it was never opened (value of 1 indicates that the recordset is open):
MsgBox adoRecSet.State
‘———————
‘SELECT RECORDS / FIELDS CONDITIONALLY
‘Refer Image 3a for SalesManager Table in MS Access file SalesReport.accdb, for below codes.
‘select a specific field (FirstName), basis numeric reference:
strSQL = «SELECT FirstName FROM SalesManager WHERE EmployeeId = 18″
adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB, CursorType:=adOpenDynamic, LockType:=adLockOptimistic
‘returns «Tracy»:
MsgBox adoRecSet.Fields(«FirstName»)
adoRecSet.Close
‘select a specific field (FirstName), basis text reference:
strSQL = «SELECT FirstName FROM SalesManager WHERE SurName = ‘Green’«
adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB, CursorType:=adOpenDynamic, LockType:=adLockOptimistic
‘returns «Sam»:
MsgBox adoRecSet.Fields(«FirstName»)
adoRecSet.Close
‘select multiple fields, basis numeric reference:
strSQL = «SELECT FirstName, SurName, JoinDate FROM SalesManager WHERE EmployeeId = 18″
adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB, CursorType:=adOpenDynamic, LockType:=adLockOptimistic
‘returns «Tracy Murray 7/16/2011»:
MsgBox adoRecSet.Fields(«FirstName») & » » & adoRecSet.Fields(«SurName») & » » & adoRecSet.Fields(«JoinDate»)
adoRecSet.Close
‘select a specific field, basis multiple criteria (delimit date values by the datetime delimiter «#»):
‘to select a range between two dates, the BETWEEN operator has been used in the WHERE clause.
strSQL = «SELECT EmployeeId FROM SalesManager WHERE SurName = ‘Green’ and JoinDate between #08/3/2012# and #10/3/2013#»
adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB, CursorType:=adOpenDynamic, LockType:=adLockOptimistic
‘returns «56»:
MsgBox adoRecSet.Fields(«EmployeeId»)
adoRecSet.Close
‘select all fields, basis text reference:
strSQL = «SELECT * FROM SalesManager WHERE SurName = ‘Kelly’«
adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB, CursorType:=adOpenDynamic, LockType:=adLockOptimistic
‘returns «35 David Kelly 1/24/2010»:
MsgBox adoRecSet.Fields(«EmployeeId») & » » & adoRecSet.Fields(«FirstName») & » » & adoRecSet.Fields(«SurName») & » » & adoRecSet.Fields(«JoinDate»)
adoRecSet.Close
‘select all fields, basis criteria specified using the Like operator:
‘The Like operator compares two strings, if the value in the string matches the pattern, it returns True. The percent sign (%) indicates zero or more characters after J ie. the criteria is if the first name starts with J:
‘Note that in the WHERE clause of SQL statement, percent (%) is used as a wild character instead of an asterisk (*), indicating zero or more characters after J. In the WHERE clause of SQL statement, use underscore (_) to indicate a single character.
strSQL = «SELECT * FROM SalesManager WHERE FirstName Like ‘J%'»
adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB, CursorType:=adOpenDynamic, LockType:=adLockOptimistic
‘return all instances where criteria (WHERE FirstName Like ‘J%’) is met — «Mason» & «Davis»:
Do While Not adoRecSet.EOF
MsgBox adoRecSet.Fields(«Surname»)
adoRecSet.MoveNext
Loop
adoRecSet.Close
‘——————
‘close the objects
connDB.Close
‘destroy the variables
Set adoRecSet = Nothing
Set connDB = Nothing
End Sub
Example 3: Edit Records, using ADO with SQL statements.
Refer to Images 4a & 4b, as mentioned in the code.
Sub automateAccessADO_3()
‘In this example we show how to Edit Records, using ADO with SQL statements:
‘Refer Image 4a for SalesManager Table in MS Access file SalesReport.accdb before edit, and Refer Image 4b after edit.
‘To use ADO in your VBA project, you must add a reference to the ADO Object Library in Excel (your host application) by clicking Tools-References in VBE, and then choose an appropriate version of Microsoft ActiveX Data Objects x.x Library from the list.
‘—————
‘DIM STATEMENTS
Dim strMyPath As String, strDBName As String, strDB As String
Dim strSQL As String
‘instantiate an ADO object using Dim with the New keyword:
Dim adoRecSet As New ADODB.Recordset
Dim connDB As New ADODB.Connection
‘—————
‘THE CONNECTION OBJECT
strDBName = «SalesReport.accdb»
strMyPath = ThisWorkbook.Path
strDB = strMyPath & «» & strDBName
‘Connect to a data source:
‘For pre — MS Access 2007, .mdb files (viz. MS Access 97 up to MS Access 2003), use the Jet provider: «Microsoft.Jet.OLEDB.4.0». For Access 2007 (.accdb database) use the ACE Provider: «Microsoft.ACE.OLEDB.12.0». The ACE Provider can be used for both the Access .mdb & .accdb files.
connDB.Open ConnectionString:=«Provider = Microsoft.ACE.OLEDB.12.0; data source=» & strDB
‘—————
‘SEARCH RECORDS BASIS SPECIFIED CRITERIA AND EDIT THEM
‘select all fields, basis JoinDate criteria:
strSQL = «SELECT * FROM SalesManager WHERE JoinDate >= #01/01/2010#»
adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB, CursorType:=adOpenDynamic, LockType:=adLockOptimistic
‘return all instances where criteria (WHERE JoinDate >= #01/01/2010#) is met, and marks their FirstName & Surname with «M»:
Do While Not adoRecSet.EOF
adoRecSet.Fields(«FirstName») = adoRecSet.Fields(«FirstName») & » — M»
adoRecSet.Fields(«Surname») = adoRecSet.Fields(«Surname») & » — M»
adoRecSet.MoveNext
Loop
‘——————
‘close the objects
adoRecSet.Close
connDB.Close
‘destroy the variables
Set adoRecSet = Nothing
Set connDB = Nothing
End Sub
Use the OpenSchema Method to access information about database tables and columns
The OpenSchema Method returns a Recordset object containing schema (structure) information about the database, like the tables and columns in the database and the supported data types. Syntax: Set recordset = connection.OpenSchema(QueryType, Criteria, SchemaID).
The first argument in the OpenSchema Method which is a must, is the type of schema required which is a SchemaEnum value (ie. an enumerated value) which specifies the type of Recordset returned by the method. Examples include adSchemaTables which returns the tables defined in the catalog, and adSchemaColumns which returns the columns of tables defined in the catalog.
To limit the results of the schema query, use the Criteria argument (this is the second parameter in the OpenSchema Method, and is optional) which specifies an array of values (ie. query constraints).
Query constraints (ie. criteria) in the SchemaEnum of adSchemaTables are: TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE.
Query constraints (ie. criteria) in the SchemaEnum of adSchemaColumns are: TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME.
The third argument of SchemaID is used only if the first argument is set to adSchemaProviderSpecific.
Example 4: Use the OpenSchema Method to access information about the database tables and columns.
Refer to Image 5, as mentioned in the code.
Sub automateAccessADO_4()
‘Use the OpenSchema Method to access information about the database tables and columns.
‘To use ADO in your VBA project, you must add a reference to the ADO Object Library in Excel (your host application) by clicking Tools-References in VBE, and then choose an appropriate version of Microsoft ActiveX Data Objects x.x Library from the list.
‘—————
‘DIM STATEMENTS
Dim strMyPath As String, strDBName As String, strDB As String
‘instantiate an ADO object using Dim with the New keyword:
Dim adoRecSet As New ADODB.Recordset
Dim connDB As New ADODB.Connection
‘—————
‘THE CONNECTION OBJECT
strDBName = «SalesReport.accdb»
strMyPath = ThisWorkbook.Path
strDB = strMyPath & «» & strDBName
‘Connect to a data source:
‘For pre — MS Access 2007, .mdb files (viz. MS Access 97 up to MS Access 2003), use the Jet provider: «Microsoft.Jet.OLEDB.4.0». For Access 2007 (.accdb database) use the ACE Provider: «Microsoft.ACE.OLEDB.12.0». The ACE Provider can be used for both the Access .mdb & .accdb files.
connDB.Open ConnectionString:=«Provider = Microsoft.ACE.OLEDB.12.0; data source=» & strDB
‘—————
‘ACCESS INFORMATION ABOUT THE DATABASE TABLES AND COLUMNS
‘Refer Image 5 for SalesManager Table in MS Access file SalesReport.accdb which also contains another Table named Performance.
‘code to get names of all tables in a database — returns table names ‘Performance’ & ‘SalesManager’:
‘query constraint of TABLE_TYPE is specified as «TABLE»
Set adoRecSet = connDB.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, «TABLE»))
Do While Not adoRecSet.EOF
MsgBox adoRecSet.Fields(«TABLE_NAME»).Value
adoRecSet.MoveNext
Loop
adoRecSet.Close
‘alternate code to get names of all tables in a database — returns table names ‘Performance’ & ‘SalesManager’:
Set adoRecSet = connDB.OpenSchema(adSchemaTables)
Do While Not adoRecSet.EOF
If adoRecSet.Fields(«TABLE_TYPE») = «TABLE» Then
MsgBox adoRecSet.Fields(«TABLE_NAME»).Value
End If
adoRecSet.MoveNext
Loop
adoRecSet.Close
‘to get names of all fields of a specified table («SalesManager»):
‘Field Names returned are: EmployeeId, FirstName, Surname & JoinDate.
Set adoRecSet = connDB.OpenSchema(adSchemaColumns, Array(Empty, Empty, «SalesManager», Empty))
Do While Not adoRecSet.EOF
MsgBox adoRecSet.Fields(«COLUMN_NAME»).Value
adoRecSet.MoveNext
Loop
adoRecSet.Close
‘—————
‘close the objects
connDB.Close
‘destroy the variables
Set adoRecSet = Nothing
Set connDB = Nothing
End Sub
Create a database table using ADO, with SQL statements
Note that ADO does not by itself support creating database tables, which is actually done with ADOX. However, you can create a database table in ADO using SQL.
SQL CREATE TABLE statement creates a table with the specified fields. SQL INSERT INTO statement inserts a new row/record at the end of the table.
While using the SQL CREATE TABLE statement, you specify the Table Name, Field Names and their Data Types. Commonly used data types for fields include: TEXT (SIZE) for Text Field; CHAR (SIZE) for Text Field; SHORT for Numbers-Integer; LONG for Numbers-Long; SINGLE for Numbers-Single; DOUBLE for Numbers-Double; CURRENCY for Currency; DATE for Date/Time; DATETIME for Date/Time; YESNO for Boolean values; and so on.
Use the CONSTRAINT clause in SQL statements, to create a constraint on one or more fields:
Specifying the PRIMARY KEY (can be only one in a Table) reserved word designates a field(s) as a primary field whose values will be unique and cannot be Null.
Specifying NOT NULL for a field will necessitate the new record to have valid data in that field. A table column, by default, can have a NULL value ie. a field can contain no value.
Specifying the UNIQUE reserved word will not allow a same value in that field, for two records in the table.
Example 5: Create a New Database Table using ADO, with SQL statements.
Refer to Image 6, as mentioned in the code.
Sub automateAccessADO_5()
‘Create a new database table using ADO with SQL statements.
‘To use ADO in your VBA project, you must add a reference to the ADO Object Library in Excel (your host application) by clicking Tools-References in VBE, and then choose an appropriate version of Microsoft ActiveX Data Objects x.x Library from the list.
‘—————
‘DIM STATEMENTS
Dim strMyPath As String, strDBName As String, strDB As String
‘instantiate an ADO object using Dim with the New keyword:
Dim adoRecSet As New ADODB.Recordset
Dim connDB As New ADODB.Connection
‘—————
‘THE CONNECTION OBJECT
strDBName = «SalesReport.accdb»
strMyPath = ThisWorkbook.Path
strDB = strMyPath & «» & strDBName
‘Connect to a data source:
‘For pre — MS Access 2007, .mdb files (viz. MS Access 97 up to MS Access 2003), use the Jet provider: «Microsoft.Jet.OLEDB.4.0». For Access 2007 (.accdb database) use the ACE Provider: «Microsoft.ACE.OLEDB.12.0». The ACE Provider can be used for both the Access .mdb & .accdb files.
connDB.Open ConnectionString:=«Provider = Microsoft.ACE.OLEDB.12.0; data source=» & strDB
‘—————
‘CHECK IF THE NEW TABLE NAME IS PRE-EXISTING IN DATABASE, AND DELETE IF FOUND
‘check if the table named SalesManager exists in database, and delete if found:
Set adoRecSet = connDB.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, «TABLE»))
Do While Not adoRecSet.EOF
If adoRecSet.Fields(«TABLE_NAME»).Value = «SalesManager» Then
connDB.Execute «DROP TABLE SalesManager»
End If
adoRecSet.MoveNext
Loop
adoRecSet.Close
‘—————
‘CREATE A NEW TABLE IN DATABASE
‘Refer Image 6
‘Create a table named SalesManager, with field names and their data types (viz. the field named FirstName is of Text data type and can hold 40 characters).
‘add a PRIMARY KEY CONSTRAINT named ‘pk_EI’ for the column ‘EmployeeID’ of the ‘SalesManager’ table; also add a UNIQUE CONSTRAINT named ‘un_FN’ for the column ‘FirstName’ of the ‘SalesManager’ table.
connDB.Execute «CREATE TABLE SalesManager(EmployeeId LONG, FirstName Text(40), Surname Char(50) NOT NULL, JoinDate Date, Sales Double, CONSTRAINT pk_EI PRIMARY KEY (EmployeeID), CONSTRAINT un_FN UNIQUE (FirstName))»
‘Populate the table using SQL INSERT INTO statements, without specifying the column names but only their values:
connDB.Execute «INSERT INTO SalesManager VALUES (256, ‘Mary’, ‘Lange’, ‘7/24/2008’, 15678.58)»
connDB.Execute «INSERT INTO SalesManager VALUES (587, ‘Harry’, ‘Davis’, ‘7/16/2011’, 14673.26)»
connDB.Execute «INSERT INTO SalesManager VALUES (01, ‘James’, ‘Bond’, ‘3/11/2009’, 12589)»
‘Populate the table using SQL INSERT INTO statements, by specifying both the column names and the values to be inserted:
connDB.Execute «INSERT INTO SalesManager (EmployeeId, FirstName, Surname, JoinDate, Sales) VALUES (445, ‘John’, ‘Morgan’, ‘1/24/2010’, 12432.20)»
connDB.Execute «INSERT INTO SalesManager (EmployeeId, FirstName, Surname, JoinDate, Sales) VALUES (25, ‘Dane’, ‘Large’, ’10/3/2012′, 9876.5)»
‘—————
‘close the objects
connDB.Close
‘destroy the variables
Set adoRecSet = Nothing
Set connDB = Nothing
End Sub
ADO Find Method — Find or Locate a specific Record
Find Method (ADO) searches for a row, in a set of records, basis specified criteria. Syntax: Find (Criteria, SkipRows, SearchDirection, Start).
Criteria specifies the criteria for finding the record. This argument is rquired whle all others are optional. Note that only one criteria is supported by the ADO Find method.
SkipRows specifies the number of records to be skipped, where the deafult value is 0 wherein the current record is not skipped.
Use the default SearchDirection value of adSearchForward to search forward from the current record, and if a match is not found the position of the record pointer is at EOF ie. after the last record in the set of records. To search backward, use the value of adSearchBackward and if a match is not found the position of the record pointer is at BOF ie. before the first record in the set of records.
Start argument sets a current row position before starting a search. Default value of adBookmarkCurrent indicates the current record, value of adBookmarkFirst indicates the first record and value of adBookmarkLast indicates the last record.
Note: On a match being found, the found record becomes the the current row position, and because the search starts from the current row, you must either skip a record OR move to the next record to do a new find for the next match.
Example 6: Using the Find method to find or locate a specific record(s).
Refer to Image 7, as mentioned in the code.
Sub automateAccessADO_6()
‘Using the Find method to find or locate a specific record(s).
‘To use ADO in your VBA project, you must add a reference to the ADO Object Library in Excel (your host application) by clicking Tools-References in VBE, and then choose an appropriate version of Microsoft ActiveX Data Objects x.x Library from the list.
‘—————
‘DIM STATEMENTS
Dim strMyPath As String, strDBName As String, strDB As String
‘instantiate an ADO object using Dim with the New keyword:
Dim adoRecSet As New ADODB.Recordset
Dim connDB As New ADODB.Connection
‘—————
‘THE CONNECTION OBJECT
strDBName = «SalesReport.accdb»
strMyPath = ThisWorkbook.Path
strDB = strMyPath & «» & strDBName
‘Connect to a data source:
‘For pre — MS Access 2007, .mdb files (viz. MS Access 97 up to MS Access 2003), use the Jet provider: «Microsoft.Jet.OLEDB.4.0». For Access 2007 (.accdb database) use the ACE Provider: «Microsoft.ACE.OLEDB.12.0». The ACE Provider can be used for both the Access .mdb & .accdb files.
connDB.Open ConnectionString:=«Provider = Microsoft.ACE.OLEDB.12.0; data source=» & strDB
‘—————
‘USE FIND METHOD
‘Refer Image 7 to view the SalesManager Table in MS Access file «SalesReport.accdb»
‘open Recordset ie. SalesManager Table:
adoRecSet.Open Source:=«SalesManager», ActiveConnection:=connDB, CursorType:=adOpenKeyset, LockType:=adLockOptimistic
‘note that only one criteria is supported by the ADO Find method:
adoRecSet.Find «EmployeeID > 8», , adSearchForward
Do While Not adoRecSet.EOF
‘using an IF statement, for search with an additional criteria of FirstName starting with J within the Search criteria of EmployeeID > 8:
‘Note that the J* indicates all words starting with the letter J followed by zero or more characters in the IF statement, but in the WHERE clause of an SQL statement it will be used as J% (percent is used as a wild character instead of an asterisk, indicating zero or more characters after J) viz. «FirstName LIKE ‘J%'».
If adoRecSet.Fields(«FirstName») Like «J*» Then
‘2 records are found using the Find Method: John Mason, Employee Id:12; Jim Davis, Employee Id:21.
MsgBox adoRecSet.Fields(«FirstName») & » » & adoRecSet.Fields(«Surname») & «, Employee Id:» & adoRecSet.Fields(«EmployeeId»)
i = i + 1
End If
‘on a match being found, the found record becomes the the current row position, and because the search starts from the current row, you must either skip a record OR move to the next record to do a new find for the next match:
adoRecSet.MoveNext
adoRecSet.Find «EmployeeID > 8», , adSearchForward
‘OR skip 1 row:
‘adoRecSet.Find «EmployeeID > 8», 1, adSearchForward
Loop
‘2 records are found
MsgBox «Records found: » & i
‘—————
‘close the objects
connDB.Close
‘destroy the variables
Set adoRecSet = Nothing
Set connDB = Nothing
End Sub
ADO Filter Property to FilterRecords
Filter database table records, using the Filter Property (ADO) on a recordset. Use a filter when you want to screen out selective records in a table. Syntax: recordset.Filter = Criteria.
The Criteria string contains clauses in the format of «FirstName = ‘Jim’» where FirstName is the Column or Field Name, = is the Operator, and Jim is the Field Value. The Criteria string can have multiple conditions or clauses.
The following operators can be used: <, >, <=, >=, <>, =, or LIKE.
For field values: use single quotes for strings; «#» for date values; you can use wild cards asterisk (*) and percent (%), provided they are the last character in the string, for the LIKE operator.
Example 7: Filter Records using the ADO Filter Property.
Refer to Image 7, as mentioned in the code.
Sub automateAccessADO_7()
‘Filter database table records, using the Filter Property (ADO) on a recordset. Use a filter when you want to screen out selective records in a table.
‘To use ADO in your VBA project, you must add a reference to the ADO Object Library in Excel (your host application) by clicking Tools-References in VBE, and then choose an appropriate version of Microsoft ActiveX Data Objects x.x Library from the list.
‘—————
‘DIM STATEMENTS
Dim strMyPath As String, strDBName As String, strDB As String
‘instantiate an ADO object using Dim with the New keyword:
Dim adoRecSet As New ADODB.Recordset
Dim connDB As New ADODB.Connection
‘—————
‘THE CONNECTION OBJECT
strDBName = «SalesReport.accdb»
strMyPath = ThisWorkbook.Path
strDB = strMyPath & «» & strDBName
‘Connect to a data source:
‘For pre — MS Access 2007, .mdb files (viz. MS Access 97 up to MS Access 2003), use the Jet provider: «Microsoft.Jet.OLEDB.4.0». For Access 2007 (.accdb database) use the ACE Provider: «Microsoft.ACE.OLEDB.12.0». The ACE Provider can be used for both the Access .mdb & .accdb files.
connDB.Open ConnectionString:=«Provider = Microsoft.ACE.OLEDB.12.0; data source=» & strDB
‘—————
‘FILTER RECORDS
‘Refer Image 7 to view the SalesManager Table in MS Access file «SalesReport.accdb», used for below filter criteria.
‘Place the filter BEFORE opening the recordset.
‘You can use wild cards asterisk (*) and percent (%), provided they are the last character in the string, for the LIKE operator.
‘Examples of 5 valid filter criteria have been given below.
‘adoRecSet.Filter = «FirstName = ‘Jim’ OR EmployeeID > 35″
‘adoRecSet.Filter = «FirstName LIKE ‘J*'»
‘adoRecSet.Filter = «Surname LIKE ‘%a%'»
‘adoRecSet.Filter = «(FirstName = ‘Jim’ AND EmployeeID > 18) OR (Surname = ‘Green’ AND EmployeeID > 35)»
adoRecSet.Filter = «(FirstName = ‘Jim’) OR (Surname = ‘Green’ AND EmployeeID > 35)»
‘Incorrect use of OR: you are not allowed to group clauses by the OR operator and then group these to another clause with the AND operator, in the following manner:
‘adoRecSet.Filter = «(FirstName = ‘Sam’) AND (FirstName = ‘Jim’ OR EmployeeID > 35)»
adoRecSet.Open Source:=«SalesManager», ActiveConnection:=connDB, CursorType:=adOpenKeyset, LockType:=adLockOptimistic
Do While Not adoRecSet.EOF
MsgBox adoRecSet.Fields(«FirstName») & » » & adoRecSet.Fields(«Surname») & «, Employee Id:» & adoRecSet.Fields(«EmployeeId»)
i = i + 1
‘on a match being found, the found record becomes the the current row position, and because the search starts from the current row, you must move to the next record to find the next match:
adoRecSet.MoveNext
Loop
MsgBox «Records found: » & i
‘—————
‘close the objects
connDB.Close
‘destroy the variables
Set adoRecSet = Nothing
Set connDB = Nothing
End Sub
Example 8: Using ADO with SQL Statements to: Add, Delete and Modify Columns in an Existing Table; Add and Delete Constraints on Columns.
Refer to Images 8a & 8b, as mentioned in the code.
Sub automateAccessADO_8()
‘Using ADO with SQL Statements to: Add, Delete and Modify Columns in an Existing Table; Add and Delete Constraints on Columns.
‘To use ADO in your VBA project, you must add a reference to the ADO Object Library in Excel (your host application) by clicking Tools-References in VBE, and then choose an appropriate version of Microsoft ActiveX Data Objects x.x Library from the list.
‘—————
‘DIM STATEMENTS
Dim strMyPath As String, strDBName As String, strDB As String
Dim strSQL As String
‘instantiate an ADO object using Dim with the New keyword:
Dim adoRecSet As New ADODB.Recordset
Dim connDB As New ADODB.Connection
‘—————
‘THE CONNECTION OBJECT
strDBName = «SalesReport.accdb»
strMyPath = ThisWorkbook.Path
strDB = strMyPath & «» & strDBName
‘Connect to a data source:
‘For pre — MS Access 2007, .mdb files (viz. MS Access 97 up to MS Access 2003), use the Jet provider: «Microsoft.Jet.OLEDB.4.0». For Access 2007 (.accdb database) use the ACE Provider: «Microsoft.ACE.OLEDB.12.0». The ACE Provider can be used for both the Access .mdb & .accdb files.
connDB.Open ConnectionString:=«Provider = Microsoft.ACE.OLEDB.12.0; data source=» & strDB
‘—————
‘ADD, DELETE OR MODIFY COLUMNS IN AN EXISTING TABLE USING THE SQL ‘ALTER TABLE’ STATEMENT.
‘Refer Image 8a to view the SalesManager Table in MS Access file «SalesReport.accdb» before running below code
‘Run the ADO connection Execute method, to ALTER TABLE, without opening the recordset. SQL command ADD COLUMN adds a new column at the end of the existing columns — in below code we are adding 3 columns named Telephone, City & ZipCode.
strSQL = «ALTER TABLE SalesManager ADD COLUMN Telephone char(15), COLUMN City Text(30), COLUMN ZipCode char(6)»
connDB.Execute CommandText:=strSQL
‘modify/enter column values after opening recordset — refer Image 8b which shows table after entering values as below:
strSQL = «SELECT * FROM SalesManager WHERE EmployeeId = 12″
adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB, CursorType:=adOpenDynamic, LockType:=adLockOptimistic
With adoRecSet
.Fields(«Telephone») = «421-1234567»
.Fields(«City») = «New York»
.Fields(«ZipCode») = «10453»
.Update
End With
adoRecSet.Close
‘Run the ADO connection Execute method, to ALTER TABLE, without opening the recordset.
‘delete the Telephone column in the SalesManager Table:
strSQL = «ALTER TABLE SalesManager DROP COLUMN Telephone»
connDB.Execute CommandText:=strSQL
‘change the data type of the ZipCode column in the SalesManager Table:
strSQL = «ALTER TABLE SalesManager ALTER COLUMN ZipCode Long»
connDB.Execute CommandText:=strSQL
‘delete the City & ZipCode columns in the SalesManager Table:
strSQL = «ALTER TABLE SalesManager DROP COLUMN City, ZipCode»
connDB.Execute CommandText:=strSQL
‘————-
‘ADD AND DELETE CONSTRAINTS ON COLUMNS
‘add a PRIMARY KEY CONSTRAINT named ‘pk_EI’ for the column ‘EmployeeID’ of the ‘SalesManager’ table:
strSQL = «ALTER TABLE SalesManager ADD CONSTRAINT pk_EI PRIMARY KEY (EmployeeID)»
connDB.Execute CommandText:=strSQL
‘drop the existing PRIMARY KEY CONSTRAINT named ‘pk_EI’ from the ‘SalesManager’ table:
strSQL = «ALTER TABLE SalesManager DROP CONSTRAINT pk_EI»
connDB.Execute CommandText:=strSQL
‘add a UNIQUE CONSTRAINT named ‘un_FN’ for the column ‘FirstName’ of the ‘SalesManager’ table:
strSQL = «ALTER TABLE SalesManager ADD CONSTRAINT un_FN UNIQUE (FirstName)»
connDB.Execute CommandText:=strSQL
‘drop the existing CONSTRAINT named ‘un_FN’ from the ‘SalesManager’ table:
strSQL = «ALTER TABLE SalesManager DROP CONSTRAINT un_FN»
connDB.Execute CommandText:=strSQL
‘—————
‘close the objects
connDB.Close
‘destroy the variables
Set adoRecSet = Nothing
Set connDB = Nothing
End Sub
Ram-zes Пользователь Сообщений: 46 |
Есть таблица Excel, данные которой загружаются в запрос на выборку Access Нужен третий вариант: загрузка данных именованного диапазона или заданного диапазона, например A3:K20. Подскажите, можно ли загружать напрямую из Excel в ЗАПРОС Access данные диапазона? Если да, то как? Изменено: Ram-zes — 12.01.2015 17:58:10 |
B.Key Пользователь Сообщений: 633 |
попробуйте просто указать имя именованного диапазона …….С:База данныхФайл.xlsx].[tbl] |
Ram-zes Пользователь Сообщений: 46 |
B.Key, так не получается… 2. Данные заданных полей (поля должны стоять в первой строке) 3. Данные по заданному диапазону 4. Данные по именованному диапазону Изменено: Ram-zes — 15.01.2015 16:34:17 |
LVL Пользователь Сообщений: 903 |
Загрузка в запрос — не правильная постановка задачи (формулировка). Если я правильно понял, то вам нужно использовать значения из именованного диапазона в запросе на выборку в базе Access. Тогда я бы сделал так: |
Ram-zes Пользователь Сообщений: 46 |
Да, использовать значения… LVL, обмен данными идет постоянно — это не разовая акция. Поэтому, как я понимаю, при удалении связанной таблицы, данные перестанут загружаться в запрос. |
LVL Пользователь Сообщений: 903 |
#6 15.01.2015 14:19:58
В чем проблема, не удаляйте связанную таблицу
Доля правды в этом есть, вернее даже не так… Варианта 2: Лично я предпочту первый вариант, он более прозрачен и его проще поддерживать, что касается производительности, то да, в теории второй вариант быстрее, но это только в теории, на практике время выполнения запроса врятле будет отличаться значительно. На самом деле вопрос несколько в ином, насколько сложно сформировать запрос сразу со всеми ограничениями? + Нужно ли будет его корректировать и как часто… Поэтому, как я уже сказал, я предпочту первый вариант. |
||||
LVL Пользователь Сообщений: 903 |
Перечитал ещё раз тему… Хочу уточнить — где находятся данные и куда их нужно вернуть? Я предполагал, что данные находятся в базе Access и вы хотите получать их с помощью запроса в файл Excel, при этом в тексте запроса использовать ограничения указанные в файле Excel… Я правильно вас понял? |
Antubas Пользователь Сообщений: 50 |
#8 15.01.2015 14:28:51
DAO.Recordset не спасет? Если в него записать SQL запрос условием отбора, после обнулить и закрыть. |
||
Ram-zes Пользователь Сообщений: 46 |
Вообще коммуникация очень сложная… Но если коротко то примерно так: Изменено: Ram-zes — 15.01.2015 14:36:16 |
LVL Пользователь Сообщений: 903 |
Задумчивая схема… |
Ram-zes Пользователь Сообщений: 46 |
Antubas, может DAO.Recordset и спасет… Но мне об этом не ведомо. Я не профессиональный IT и к сожалению об DAO.Recordset пока ничего не знаю. Можете показать пример кода, я попробую |
Ram-zes Пользователь Сообщений: 46 |
LVL, ну сейчас с запросами и получением (обменом) информации между файлами проблем нет. Есть другая проблема: Почему при обновлении данных в файле Excel открывается другой файл, связанный с ним через запрос Access? Есть файл данные_1.xlsx. Он связан с файлом данные_2.xlsx через запрос Access. Все файлы находятся в локальной сети. Подключение к базе данных Access в Excel идет по ссылке на сетевой диск Data Source=P:База… Можно ли решить эту проблему через настройку свойств подключения в Excel? В частности в настройке прав доступа: Изменено: Ram-zes — 15.01.2015 14:43:28 |
Ram-zes Пользователь Сообщений: 46 |
Когда я создавал эту тему, то хотел упростить (упорядочить) работу в Access, обнаружил в интернете информацию про прямое обращение к файлам Excel с помощью запросов из Access, но там не было информации о том, как делать такие запросы на диапазоны. Пока ждал помощи, сам разобрался с этими запросами, но вот появилась новая проблемы с обновлением данных (описал выше) |
Antubas Пользователь Сообщений: 50 |
#14 15.01.2015 14:51:53
Примерно так |
||||
Ram-zes Пользователь Сообщений: 46 |
Да, совсем забыл, есть еще одно огромное преимущество у SQL запросов перед связанными таблицами. Вы знаете, что Access не берет более 255 столбцов… |
Ram-zes Пользователь Сообщений: 46 |
Antubas, а вставляем этот код в SQL запрос? Я правильно понимаю, что вместо моего кода нужно вставить ваш? |
Antubas Пользователь Сообщений: 50 |
Может выложите примерчик с Excel и Access файлом, или сходите на http://www.cyberforum.ru/ms-access/ там помогут с Access. |
Antubas Пользователь Сообщений: 50 |
#18 15.01.2015 15:03:51
В VBA, лучше всего дайте файлы с примерами ) |
||
LVL Пользователь Сообщений: 903 |
#19 15.01.2015 15:04:20
Вы создаете таблицы в Access с таким количеством полей? |
||
Ram-zes Пользователь Сообщений: 46 |
LVL, а куда деваться? Если нужно такое количество полей: 01.01 | 02.01 | 03.01 и т.д. Antubas, с VBA не работаю, к сожалению… Изменено: Ram-zes — 15.01.2015 15:08:07 |
Antubas Пользователь Сообщений: 50 |
У Вас база Access типа «Клиент»-«Сервер», или же Вы Access используете просто для операции БД? Изменено: Antubas — 15.01.2015 15:08:14 |
Ram-zes Пользователь Сообщений: 46 |
видимо просто для операции БД |
Ram-zes Пользователь Сообщений: 46 |
В принципе, выложить можно, но мне нужно ее подготовить для этого, только завтра |
Antubas Пользователь Сообщений: 50 |
#24 15.01.2015 15:11:44
А почему бы тогда Вам не тратить время на Access и сделать все эти деления и обновления в самом Excel?
no problem Изменено: Antubas — 15.01.2015 15:21:55 |
||||
Ram-zes Пользователь Сообщений: 46 |
Вопрос в совместном доступе в Excel — не просто это сделать (ну мне не просто). Потребуется VBA. Ну или я не знаю адекватного способа Изменено: Ram-zes — 15.01.2015 15:21:11 |
Ram-zes Пользователь Сообщений: 46 |
В общем решение оказалось простым. Нужен офис 2010 на всех компах и в свойствах подключения в правах доступа нужно указать: Share Deny None |
zin-renat Пользователь Сообщений: 1 |
#27 24.07.2015 11:37:14 Добрый день. Ситуация такая. Имеется запрос из внешней базы данных MS SQL Server 2012, результат которого выводится в книгу Excel.
Как вместо цифры 10 подставить значение из ячейки листа Excel без использования VBA? |
||
JeyCi Пользователь Сообщений: 3357 |
#28 24.07.2015 12:05:22 попробуйте так — при обновлении запроса должно выскочить окно — там и указать ячейку или др (см вроде бы в свойствах выходной таблицы — параметры)…
или заново сформируйте параметрический (!) запрос через ms query… см пост№23 здесь p.s. и все запросы сваливать в эту ветку, наверно, не надо — лучше см. Правила форума — чуть что, я вас предупредила… Изменено: JeyCi — 24.07.2015 12:10:08 чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах) |
||
Представьте себе ситуацию, Вы получили целевую выборку из одной базы данных, но для полноты картины, как всегда, нужны дополнительные данные. Проблема может быть в том, что нужная информация хранится в другой базе данных и возможности создать на ней свою таблицу нет, подключиться используя link тоже нельзя, да и количество элементов, по которым нужно получить данные, несколько больше, чем допустимое на данном источнике. Вот и получается, что возможность написать SQL запрос и получить нужные данные есть, но написать придется не один запрос, а потом потратить время на объединение полученных данных.
Выйти из подобной ситуации поможет Excel.
Уверен, что ни для кого не секрет, что MS Excel имеет встроенный модуль VBA и надстройки, позволяющие подключаться к внешним источникам данных, то есть по сути является мощным инструментом для аналитики, а значит идеально подходит для решения подобных задач.
Для того чтобы обойти проблему, нам потребуется таблица с целевой выборкой, в которой содержатся идентификаторы, по которым можно достаточно корректно получить недостающую информацию (это может быть уникальный идентификатор, назовем его ID, или набор из данных, находящихся в разных столбцах), ПК с установленным MS Excel, и доступом к БД с недостающей информацией и, конечно, желание получить ту самую информацию.
Создаем в MS Excel книгу, на листе которой размещаем таблицу с идентификаторами, по которым будем в дальнейшем формировать запрос (если у нас есть уникальный идентификатор, для обеспечения максимальной скорости обработки таблицу лучше представить в виде одного столбца), сохраняем книгу в формате *.xlsm, после чего приступаем к созданию макроса.
Через меню «Разработчик» открываем встроенный VBA редактор и начинаем творить.
Sub job_sql() — Пусть наш макрос называется job_sql.
Пропишем переменные для подключения к БД, записи данных и запроса:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Опишем параметры подключения:
sql = «Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=Storoge.company.ru Storoge.»
Объявим процедуру свойства, для присвоения значения:
Set cn = New ADODB.Connection
cn.Provider = » SQLOLEDB.1″
cn.ConnectionString = sql
cn.ConnectionTimeout = 0
cn.Open
Вот теперь можно приступать непосредственно к делу.
Организуем цикл:
For i = 2 To 1000
Как вы уже поняли конечное значение i=1000 здесь только для примера, а в реальности конечное значение соответствует количеству строк в Вашей таблице. В целях унификации можно использовать автоматический способ подсчета количества строк, например, вот такую конструкцию:
Dim LastRow As Long
LastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count
Тогда открытие цикла будет выглядеть так:
For i = 2 To LastRow
Как я уже говорил выше MS Excel является мощным инструментом для аналитики, и возможности Excel VBA не заканчиваются на простом переборе значений или комбинаций значений. При наличии известных Вам закономерностей можно ограничить объем выгружаемой из БД информации путем добавления в макрос простых условий, например:
If Cells(i, 2) = «Ваше условие» Then
Итак, мы определились с объемом и условиями выборки, организовали подключение к БД и готовы формировать запрос. Предположим, что нам нужно получить информацию о размере ежемесячного платежа [Ежемесячный платеж] из таблицы [payments].[refinans_credit], но только по тем случаям, когда размер ежемесячного платежа больше 0
sql = «select [Ежемесячный платеж] from [PAYMENTS].[refinans_credit] » & _
«where [Ежемесячный платеж]>0 and [Номер заявки] ='» & Cells(i, 1) & «‘ «
Если значений для формирования запроса несколько, соответственно прописываем их в запросе:
«where [Ежемесячный платеж]>0 and [Номер заявки] = ‘» & Cells(i, 1) & «‘ » & _
» and [Дата платежа]='» & Cells(i, 2) & «‘»
В целях самоконтроля я обычно записываю сформированный макросом запрос, чтобы иметь возможность проверить его корректность и работоспособность, для этого добавим вот такую строчку:
Cells(i, 3) = sql
в третьем столбце записываются запросы.
Выполняем SQL запрос:
Set rs = cn.Execute(sql)
А чтобы хоть как-то наблюдать за выполнением макроса выведем изменение i в статус-бар
Application.StatusBar = «Execute script …» & i
Application.ScreenUpdating = False
Теперь нам нужно записать полученные результаты. Для этого будем использовать оператор Do While:
j = 0
Do While Not rs.EOF
For ii = 0 To rs.Fields.Count — 1
Cells(i, 4 + j + ii) = rs.Fields(0 + ii) ‘& «;»
Указываем ячейки для вставки полученных данных (4 в примере это номер столбца с которого начинаем запись результатов)
Next ii
j = j + rs.Fields.Count
s.MoveNext
Loop
rs.Close
End If
— закрываем цикл If, если вводили дополнительные условия
Next i
cn.Close
Application.StatusBar = «Готово»
End Sub
— закрываем макрос.
В дополнение хочу отметить, что данный макрос позволяет обращаться как к БД на MS SQL так и к БД Oracle, разница будет только в параметрах подключения и собственно в синтаксисе SQL запроса.
В приведенном примере для авторизации при подключении к БД используется доменная аутентификация.
А как быть если для аутентификации необходимо ввести логин и пароль? Ничего невозможного нет. Изменим часть макроса, которая отвечает за подключение к БД следующим образом:
sql = «Provider= SQLOLEDB.1;Password=********;User ID=********;Data Source= Storoge.company.ru Storoge;APP=SFM»
Но в этом случае при использовании макроса возникает риск компрометации Ваших учетных данных. Поэтому лучше программно удалять учетные данные после выполнения макроса. Разместим поля для ввода пароля и логина на листе и изменим макрос следующим образом:
sql = «Provider= SQLOLEDB.1;Password=» & Sheets(«Лист аутентификации»).TextBox1.Value & «;User ID=» & Sheets(«Лист аутентификации «).TextBox2.Value & «;Data Source= Storoge.company.ru Storoge;APP=SFM»
Место для расположения текстовых полей не принципиально, можно расположить их на листе с таблицей в первых строках, но мне удобней размещать поля на отдельном листе. Чтобы введенные учетные данные не сохранялись вместе с результатом выполнения макроса в конце исполняемого кода дописываем:
Sheets(«Выгрузка»).TextBox1.Value = «« Sheets(»Выгрузка«).TextBox2.Value = »»
То есть просто присваиваем текстовым полям пустые значения, таким образом после выполнения макроса поля для ввода пароля и логина окажутся пустыми.
Вот такое вполне жизнеспособное решение, позволяющее сократить трудозатраты при получении и обработке данных, я использую. Надеюсь мой опыт применения SQL запросов в Excel будет полезен и вам в решении текущих задач.