Access vba sql запросы: Вложенные запросы SQL (Microsoft Access SQL)

SQL VBA Excel



Работа с внешними источниками данных

Материалы по работе с внешними источниками данных на примере Excel и SQL.

Рассмотрим способы передачи данных между Excel и внешней базой данной на SQL сервере с помощью ADO.

Задача первая. Подключаемся к внешней базе данных.


Для начала надо подключиться к внешней базе данных. Подключение возможно если на компьютере установлен драйвер. Список установленных драйверов для подключения к базам данных на компьютере под управлением Windows:

Панель управления\Все элементы панели управления\Администрирование\Источники данных (ODBC)


Проверить подключение к базе данных можно простым способом. Создаем пустой файл (например, «текстовый документ.txt»), затем изменяем имя и расширение на .udl (например, «connect.udl»). Двойной клик мышкой по новому файлу, далее приступаете к настройке и проверке подключения к базе данных. После того, как удалось настроить корректное подключение к базе данных, сохраняем файл «connect.udl». Открываем файл «connect.udl» обычным текстовым редактором (например, блокнотом), и видим в строке подключения все необходимые параметры. Про подключение к внешним базам данных можно посмотреть на ресурсе ConnectionStrings .

Теперь возвращаемся к нашему VBA для Excel. В редакторе VBA подключаем последнюю версию библиотеки:

 Microsoft ActiveX Data Objects Library


Пример кода:

Sub TestConnection()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.ConnectionString = "" 'Параметры строки подключения
cn.Open   'Открываем подключение
cn.Close   'Закрываем подключение
Set cn = Nothing   'Стираем объект из памяти
End Sub
Задача вторая. Загружаем данные из внешней базы данных на SQL сервере в Excel.


После того, как мы установили подключение к внешней базе данных можно приступать к чтению данных и выводу в Excel. Здесь потребуется знание языка запросов SQL. В результате выполнения SQL запроса к нам возвращается некая таблица с данными в объект RecordSet. Далее из объекта RecordSet можно выгружать данные непосредственно на лист или в сводную таблицу.

Пример кода простой процедуры:

Sub LoadData()

Dim cn As ADODB.Connection
Dim rst As ADODB.Recordset

Set cn = New ADODB.Connection
Set rst = New ADODB.Recordset

cn.ConnectionString = "" 'Параметры строки подключения
cn.Open

rst.Open "SELECT TOP 10 * FROM <таблица>", cn 'SQL-запрос, подключение

ActiveSheet.Range("A1").CopyFromRecordset rst 'Извлекаем данные на лист

rst.Close
cn.Close

Set rst = Nothing
Set cn = Nothing

End Sub


Для удобства работы. Предлагаю создать собственный класс «tSQL» для работы с базой данных.  У класса будет одно свойство:

Public ConnectionSring As String


Для чтения данных напишем метод SelectFrom с параметрами TableName и ws. TableName — это имя таблицы, откуда будем считывать данные и ws — лист Excel, куда будем записывать данные.

Public Sub SelectFrom(TableName As String, ws As Worksheet)

Dim cn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim SQLstring As String
Dim i As Long

Set cn = New ADODB.Connection
Set rst = New ADODB.Recordset
SQLstring = "SELECT * FROM " & TableName
ws.Cells.Clear

cn.ConnectionString = ConnectionSring
cn.Open

rst.Open SQLstring, cn

For i = 1 To rst.Fields.Count
 ws.Cells(1, i) = rst.Fields(i - 1).Name
Next i
ws.Range("A2").CopyFromRecordset rst

rst.Close
cn.Close

Set rst = Nothing
Set cn = Nothing
SQLstring = Empty
i = Empty

End Sub


Пример использования класса tSQL в процедуре

Sub mySQL()
Dim ts As tSQL
Set ts = New tSQL

ts.ConnectionSring = '<Строка подключения>
ts. SelectFrom "Название таблицы", ActiveSheet

Set ts = Nothing
End Sub
Задача третья. Загружаем данные из Excel во внешнюю базу данных.


Для записи данных напишем метод InsertInto с параметрами TableName. rHead и rData. TableName — это имя таблицы, куда будем добавлять данные;  rHead — диапазон ячеек, с указанием полей; rData — диапазон ячеек с данными, которые будем добавлять.

Public Sub InsertInto(TableName As String, rHead As Range, rData As Range)

Dim cn As ADODB.Connection
Dim SQLstring As String
Dim SQLstringH As String
Dim SQLstringV As String
Dim i As Long
Dim j As Long

Dim arrHead()
Dim arrData()

arrHead = rHead.Value
arrData = rData.Value
Set cn = New ADODB.Connection
cn.ConnectionString = ConnectionSring
cn.Open

SQLstringH = "INSERT INTO " & TableName & "("
For j = LBound(arrHead, 2) To UBound(arrHead, 2)
 SQLstringH = SQLstringH & " " & arrHead(1, j)
 If j < UBound(arrHead, 2) Then
 SQLstringH = SQLstringH & ","
 Else
 SQLstringH = SQLstringH & ")"
 End If
Next j
SQLstringH = SQLstringH & " VALUES("

For i = LBound(arrData, 1) To UBound(arrData, 1)
 For j = LBound(arrData, 2) To UBound(arrData, 2)
 SQLstringV = SQLstringV & " " & arrData(i, j)
 If j < UBound(arrHead, 2) Then
 SQLstringV = SQLstringV & ","
 Else
 SQLstringV = SQLstringV & ") "
 End If
 Next j
 SQLstring = SQLstringH & SQLstringV
 SQLstringV = Empty
 cn. Execute SQLstring
Next i
cn.Close

Set cn = Nothing
SQLstring = Empty
i = Empty
j = Empty
SQLstring = Empty
SQLstringH = Empty
SQLstringV = Empty
Erase arrHead
Erase arrData

End Sub


Пример использования класса tSQL в процедуре

Sub mySQL()
Dim ts As tSQL
Set ts = New tSQL

ts.ConnectionSring = '<Строка подключения>
ts.InsertInto "Название таблицы", Range("B1:D1"), Range("B8:D300")

Set ts = Nothing
End Sub


 

Задача четвертая. Управляем внешней базой данных из Excel


Рекомендую использовать запросы в основном для чтения данных из внешней БД. Можно записывать данные в таблицы внешней БД.
Но крайне не желательно использовать Excel для управления внешней базой данных, лучше использовать стандартные средства разработки.


Полезные ссылки:

Data from Excel to SQL 

 http://www.excel-sql-server.com/excel-sql-server-import-export-using-vba.htm

Excel подключение к oracle

Подключение к базе данных Oracle (Power Query)

​Смотрите также​​: И так с​mrzv​ строке подключения Set​: Здравствуйте, раньше не​ осталась последняя проблема​ ‘Password=пароль;’ ‘Получаем данные​ строку подключения.​ сотрудники умеют считать​ спеца, в крутой​B.Key​ Хочу в дальнейшем​ экспортный файл из​ Буду осень признательна​ вас! К сожалению,​.​ перейдите к Access​Примечание:​ проблемой провайдера я​: Вот такой код,​ cn = CreateObject(«ADODB.Connection»)​ имел дела с​

​ — это runtime​ из БД через​Elhust​ деньги.​ конторе, стоит 200$,​

​: «Некустарные», как правило​​ настроить фильтр, чтобы​ ПО, и выполнит​ за помощь.​ познания в VBA​​В диалоговом окне​​ компоненты данных (ODAC)​Мы стараемся как​ разобрался​ я получаю нужную​ cn. Open «Provider=ORAOLEDB.ORACLE;Data Source=192.168.200.253:1521/xe;Password=org;User​ подключением к БД.​ error -2147217843 (80040e4d)​ запрос rsORA.Open ‘SELECT…(тело​:​-В «серьезных» организациях​ стоимость нормочаса крутого​ не отвечают запросам​ выгружался только нужный​ то, что будет​Мотя​ очень скудны. Без​База данных Oracle​ 32-разрядная Oracle с​

​ можно оперативнее обеспечивать​Криво стояли драйвера​ мне информацию, но​

​ ID=pqw2″Run-time error 3706​​ Прошу помочь.​​ ‘Automation error’… Возникает​​ запроса)’, cnORA ‘Вставка​​anvg​​ сотрудники умеют бездумно​​ спеца excel 20$.​​ конечных пользователей​​ филиал. Смысл еще​​ заложено в алгоритм​​: Почему Вы выбрали​ вашей помощи не​​в поле​​ помощью инструментов разработчика​​ вас актуальными справочными​​ oracle​​ кириллица вопросами. Что​​Не удается найти​

​На просторах нашего​​ при выполнении Open.​​ даннных из полученого​​, Спасибо буду изучать​​ тратить деньги, даже​​Срок исполнения данной​​, либо отвечают,​

Далее

  1. ​ в том, чтобы​​ макроса.​ такой громоздкий путь?​​ обойтись. Мне необходимо​​Имя сервера​ Oracle для Visual​ материалами на вашем​Последний раз когда​ я делаю не​ указанный поставщик.Вероятно, он​

  2. ​ форума нашел вот​ Единственное подозрение у​ набора записей ‘1-й​ )​ не понимая сколько​​ задачи «oracle спеца​​ за «очень серьезные»​ максимально автоматизировать работу​Максим Зеленский​Это — из​ осуществить следующее: необходимо​укажите сервер Oracle,​

  3. ​ Studio (12.1.0.2.4) установить​​ языке. Эта страница​​ я их устанавливал​

  4. ​ так? Sub ImpOracle()​ установлен неправильно.​ такую строку подключения​

    1. ​ меня на то,​​ вариант — все​​Sinister​ это стоит на​

    2. ​ в крутой конторе»​​ деньги.​​ сотрудников, чтобы им​

support.office.com>

Подключение к Базе данных Oracle из Excel с помощью VBA

​: всякое в жизни​​ серии «Слон и​
​ написать макрос в​ к которому нужно​ 32-разрядного клиента Oracle​ переведена автоматически, поэтому​ я качал их​ Set cn =​sokol92​ Set cn =​ что неправильно указан​ полученные записи вставляются​: Люди! Подскажите, pls,​ самом деле. ​ 1 день ТЗ,​Мотя​ не пришлось ручками​ бывает.​ Моська».​ Excel. Цель такая:​ подключиться. Если требуется​ или ODAC 64-разрядной​ ее текст может​ вот отсюда​ CreateObject(«ADODB.Connection») cn.Open «ODBC;DBQ=192.168.200.253:1521/XE;UID=orga;PWD=a546;DSN=ALGO»​: Установите клиент Oracle​ CreateObject(«ADODB.Connection») cn.Open «Provider=MSDAORA.1;Data​ параметр Data Source.​ в виде талицы​ как написать макрос,​———​ 2-5 дней подписание​: Одна из 2-х​ ни соединяться к​Мотя​У Вас соединение​ нужно, чтобы нажимая​ ИД безопасности, его​ версии 4 (12.1.0.2.4)​ содержать неточности и​скачивал вот этот​ ‘======================================================================================== sSql =​ в​ Source=***;Password=***;User ID=***»но как​

​ Каким его задавать?​​ на лист Range(‘адрес​ который по данным​
​Что говорить, «совок»​ документов, 2-7(возможно и​ ситуаций:​

​ БД, ни устанавливать​: «Серьезные» организации кустарные​ прошло успешно, а​ кнопку сотрудник любого​
​ можно указать в​ Xcopy для Windows​
​ грамматические ошибки. Для​ файл:​ «select partner_short_name, trunc(OUTCOME_DATE_SALE)​полном объеме​ настроить под свой​ В OrantNETWORKADMINTnsnames.ora записано​
​ верхней левой ячейки’).CopyFromRecordset​ запроса к базе​ привык так жить.​ меньше) дней выполнение.​
​1. ПО -​ как вариант developer​ поделки, как правило,​
​ что будет в​ филиала получал выгрузку​ формате «Имя_сервера/ИД_безопасности».​ x64 12 cустановить​ нас важно, чтобы​64-bit ODAC 12.2c​ d, sum(roh.sum_w_nds) s,count(1)​. По умолчанию указанный​
​ лад не пойму.​ имя, которое я​ rsORA ‘2-й вариант​
​ данных Oracle устанавливал​B.Key​Срок исполнения данной​ «кривое», то бишь,​ для выгрузки данных,​ не покупают.​

​ филиалах?​​ из базы данных​Если данные нужно импортировать​

​ 64-разрядную клиента Oracle.​​ эта статья была​ Release 1 (12.2.0.1.1)​ h from t_partner​

​ выше драйвер может​​ На счет Data​ пытался использовать в​
​ — вставляются определенные​

​ бы значения переменных​​: Пользуйтесь на здоровье​ задачи «крутого спеца​ кустарное. ​ чтобы выгружать нужную​Максим Зеленский​Не завидую Вашим​ одного программного обеспечения​ с использованием запроса​Более новые версии​ вам полезна. Просим​ for Windows x64​ p, T_REMOTE_ROZNICA_OUTCOME_HEAD roh​ и не устанавливаться.​ Source=***;Password=***;User ID=*** все​ качестве Data Source.​ поля в заданную​ или ячеек рабочего​ и экономьте Ваши​ excel» максимум 1​2. Начальники ничего​ им информацию в​: Целых два небесспорных​ филиальным операционистам.​ Oracle. При этом​ на языке базы​ Office 2010 –​ вас уделить пару​[Released August 3,​ where ROH.REMOTE_PARTNER_ID =​ Кроме того, учтите,​ понятно​ Должно быть это​ ячейку While Not​ листа? Очень хотелось​ средства​ час.​ слаще морковки, EXCEL,​ Excel. Помогите, пожалуйста,​ допущения ))​ПО на платформе Oracle​ нужно, чтобы макрос​ данных, укажите его​ 2013 ​

​ секунд и сообщить,​​ 2018] — 406​ p.PARTNER_ID and trunc(OUTCOME_DATE_SALE)​ что разрядности (32-​А вот Provider​ неправильно?​ rsORA.EOF …. Range(‘адрес​ бы пример соединения​Мотя​Зачем платить больше,​ не признают!​ с реализацией задуманного. ​Ну, будем надеяться​ не может быть​ подключил пользователя к​ в поле​Щелкните на вкладке «​ помогла ли она​

​ MB (426,617,132 bytes)В​​ between sysdate -​ или 64-) клиента​ какой нужно использовать?​

​meja​ ячейки’)=rsORA.Fields(номер поля из​ с базой через​

​: Почти, цитаты «от​​ если второй сделает​Цитатаhipersa пишет: Хочу​
​ Какой код VBA​hipersa​ примитивным: в нем​
​ базе. Через excel​Инструкция SQL​данные​
​ вам, с помощью​ этом архиве есть​ 3 and sysdate​ Oracle и MS​Я установил драйвер​: Может быть и​

​ запроса — начинается​ ODBC и строку​ министра финансов», когда​ лучше.​ в дальнейшем настроить​ можно было бы​: Смысл данной работы​

​ не может отсутствовать​​ осуществила подключение через​. Дополнительные сведения см.​» выберите​ кнопок внизу страницы.​ нормальный setup​ group by partner_short_name,​

​ Office должны совпадать.​​ с сайта oracl​
​ в этом ошибка,​ с 0). Value …..​ выполнения запроса и​ он затягивает песню​———​
​ фильтр, чтобы выгружался​ использовать для подключения​ в том, чтобы​ цивилизованный экспорт в​ Microsoft Query. Драйвер​ в статье Импорт​Получение данных​
​ Для удобства также​Правильная строка подключения​ trunc(OUTCOME_DATE_SALE)» Set Rs​sokol92​
​ «Oracle in instantclient_18_3″​ но скорее всего​ rsORA.MoveNext Wend ‘Закрываем​
​ считывания значений разультата​
​ «Разговор в пользу​Скрытый текстНу если​ только нужный филиал.Неужели​

​ к базе? Заранее​​ начальники в филиалах​
​ EXCEL.​ указала как «Microsoft​ данных из базы​>​ приводим ссылку на​

​ выглядит вот так:​ = GetRs(sSql, cn)​: Проверить доступность провайдера​ имя его «SQORA32.DLL».​ в другом: нужно​

​ переменные rsORA.Close cnORA.Close​​ его выполнения.​ бедных».​ только заказчик откат​ ПО не определяет​
​ большое спасибо!​ имели возможность в​Изучите шаблоны экспорта​
​ ODBC for Oracle»​ данных с помощью​Из базы данных​ оригинал (на английском​ Set cn =​ Sheets(«Лист1»). [a1].CopyFromRecordset Rs Rs.Close​
​ можно через Меню/Данные/Из​
​ivanok_v2​ еще дописать Set​

​Sinister​​Заранее благодарен!​vikttur​ получит​

​ права пользователя?!​​B.Key​ любую минуту выгрузить​ Вашего ПО во​ (правильно ли именно​ запроса на ее​

​>​​ языке) .​
​ CreateObject(«ADODB.Connection») cn.Open «Provider=OraOLEDB.Oracle;Data​

planetaexcel.ru>

Как Подключиться к базе Oracle ? (Макросы/Sub)

​ Set Rs =​​ других источников/Из мастера​: ConnectionString для всех​ rsORA = New​: У меня на​meja​: Хватит флудерства.​Мотя​

​ЦитатаB.Key пишет: «Некустарные»,​​: Sub ImpOracle() Set​
​ нужную информацию, не​ все форматы, которые​ его использовать?), пользователь​ языке.​Из базы данных Oracle​С помощью Excel Get​ Source=192.168.200.253:1521/XE;User ID=***;Password=***»​

​ Nothing End Sub​​ подключений/Дополнительно (путь дан​​ языков програмирования однаковая.​​ as ADODB. Recordset, чтобы​ выражении ‘cnORA As​

excelworld.ru>

SQL запрос к Oracle из Excel через ODBC

​: Один из вариант​​Тему закрыл.​: Любопытно, однако.​ как правило не​ cn = CreateObject(«ADODB.Connection»)​ прибегая к написанию​ в нем предусмотрены.​ (допустим) Crent, Пароль​Нажмите кнопку​. Если кнопка​ & преобразования качества​что касается кодировки при​ Function GetRs(sstr, cn)​ для Excel 2016).​если вы подключаетсь​
​ инициализировать переменную. Я​

​ ADODB.Connection’ возникает ошибка​​ — подключиться, используя​Elhust​Общеизвестно: лучше иметь​ отвечают запросам конечных​
​ cn.Open «Provider=MSDAORA.1;Data Source=Chief;Password=Bercut;User​ скриптов для выгрузки​Полагаю, Вы обнаружите​ Bercut, Сервер Chief.​ОК​Получить данные​ (Power Query) для​ использовании DSN вместо​ Set rstdata =​ Имя провайдера: Oracle​ через другое ПО,​ просто забыл это​ компиляции. Для выполнение​ ADO. Ниже представлены​: Доброго времени суток​ дело с качественным​ пользователей , либо​ ID=Crent» ‘======================================================================================== sSql​ данных из базы​ не только формат​ Соединение прошло успешно. ​.​не отображается, нажмите​ подключения к базе​ Provider, то мне​ CreateObject(«ADODB.Recordset») rstdata.Open sstr,​ Provider for OLE​ значить нужные драйвера​ указать, сорри :-)​ приведенного Вами кода​ узловые моменты кода.​ уважаемые гуру Excel’ya​ ПО, чем с​ отвечают, за «очень​

​ = «select *​​ (база программного обеспечения,​ EXCEL.​ Далее нужно, чтобы​Если для сервера Oracle​ кнопку​ данных Oracle.​ так и не​ cn Set GetRs​ DB.Там же можно​ уже есть.​

​Sinister​​ требуется что-то дополнительно​’Объявляем вначале переменные​ подскажите как к​ разного рода «крутыми»​

​ серьезные» деньги.Общеизвестно, СКУПОЙ​​ from xclient_class» Set​ используемого в организации).​Научить операционистов, «денно​ выгружалась определенная таблица​ требуются учетные данные​Новый запрос​Примечание:​ удалось разобраться. Но​ = rstdata Set​ протестировать его работоспособность.​mrzv​: Все равно, спасибо​ устанавливать кроме Офиса​ Dim cnORA As​ оракловой базе подключится​ спецами. ​ ПЛАТИТ ДВАЖДЫ!​ Rs = GetRs(sSql,​

​ С экспортом в​​ и нощно сидящих​ этой базы данных​ пользователя базы данных:​>​ Прежде чем вы можете​ на мой взгляд​ rstdata = Nothing​mrzv​: Как тогда определить​ )​

​ 2000, в котором​​ ADODB.Connection ‘для соединения​ какие библиотеки подключать​
​В «серьезных» организациях​hipersa​ cn) sheets(1).[a1].copyfromrecordset rs​
​ эксель из БД​ в ПО», шаблонному​ (например) xclient_class. Но​В диалоговом окне​Из базы данных​ подключиться к базе​

CyberForum.ru>

Подключение к Базе данных Oracle из Excel с помощью VBA

​ способ подключения через​​ End Function​: Спасибо за советЯ​ какой драйвер мне​Кстати, все заработало,​
​ я предполагаю его​ Dim rsORA As​ и что делать​ ни с какими​: , большое вам​ Rs.Close Set Rs​ проблем нет. Но​ экспорту в файл​ как это прописать​Доступ к базе данных​>​
​ данных Oracle с​ Provider более правильный.​
​весь код взял из​ создал подключение ODBC​ нужно использовать?​ когда я изменил​

​ запускать из Excel?​​ ADODB. Recordset ‘для получения​ ?​
​ «крутыми спецами» никогда​ спасибо за код,​ = Nothing end​ нужно, чтобы данные​

​ из ПО в​​ в VBA так,​введите имя пользователя​Из базы данных Oracle​

​ помощью​​Спасибо всем за помощь.​ этой статьи​

​ DNS посмотрел там​​Nordheim​

​ процедуру подключения так:​​meja​ записей ‘Устанавливаем соединение​anvg​ не будут иметь​ за вашу помощь​ sub Function GetRs(sstr,​
​ подгружались именно после​ нужный каталог в​ чтобы я могла​

​ и пароль.​​.​Power Query​​sokol92​​sokol92​ строку подключения .​: Я подключаюсь так​With conn .ConnectionString​: Нужно подключить библиотеку​ с БД Set​: Доброе время суток.​ дела.​

​ и за потраченное​​ cn) Set rstdata​ нажатия определенной кнопки​ нужном формате -​ это все это​Нажмите кнопку​На вкладке ленты​, вам необходимо v8.1.7​: Успехов!​: Вы, похоже, подключили​

​ Вставил её в​​ «Provider=msdaora»​ = ‘Provider=MSDAORA; Data​ Microsoft ActiveX Data​ cnORA = New​Да всё также​B. Key​ время! Очень вам​ = CreateObject(«ADODB.Recordset») rstdata.Open​ в Excel (кнопок​
​ элементарно.​

​ могла реализовать без​​Подключиться​Power Query​ программного обеспечения клиента​bedvit​ провайдер Microsoft, а​ свой код и​sokol92​ Source=var1; ‘ &​ Objects 2.x Library​ ADODB.Connection cnORA.Open ‘Provider=msdaora;’​ как и к​: Я не буду​ благодарна. Все работает!!!​ sstr, cn Set​ будет несколько и​Ну, а далее:​ ручной настойки непонятно.​.​щелкните​ Oracle или больше​: Владимир, работаем тоже​ не Oracle. Мы​ все получилось. Только​: Provider=ORAOLEDB.ORACLE​ _ ‘User ID=var2;​ в Tools/Refrences​ + _ ‘Data​ остальным. Поставить клиент​ вступать с Вами​B.Key​

​ GetRs = rstdata​ к каждой будет​

​ старт Вашего макросного​​ Просмотрела много литературы,​hipersa​Из базы данных​ на вашем компьютере.​ с родными драйверами​

​ всегда работали с​​ вот русские буквы​mrzv​ Password=var3;’ .Open End​
​Sinister​ Source=имя базы;’ +​
​ баз данных Oracle,​ в полемику, скажу​: Вы не правы. ​ Set rstdata =​
​ привязан скрипт на​ файла.​
​ но постоянно какие-то​: Добрый день!​>​
​ Чтобы установить клиентское​ Oracle. Microsoft не​ провайдером Oracle.​ вопросами…​: Вот такую ошибку​
​ With​: Все очень хорошо​ _ ‘User Id=имя​ если ещё не​ лишь одно:​

​Стоимость нормочаса oracle​ Nothing End Function​ выгрузку определенной информации).​Макрос сам «найдет»​ ошибки. Пожалуйста, помогите!!!​Вся надежда на​Из базы данных Oracle​ программное обеспечение Oracle,​

​ используем.​

​mrzv​​cn.Open «ODBC;DBQ=192.168.200.253:1521/XE;UID=orga;PWD=a546;DSN=ALGO»​

​ мне выдает на​​mrzv​ скомпилировалось, спасибо Только​ пользователя;’ + _​ стоит, сконфигурировать. Сформировать​

planetaexcel.ru>

​-В хороших организациях​

  • Excel скопировать содержимое ячейки в excel без формулы
  • Как преобразовать число в текст сумма прописью в excel
  • Excel не работает формула впр в excel
  • Excel 2013 сбросить настройки
  • Объединение столбцов в excel без потери данных
  • Функция в excel медиана
  • Сквозные строки excel
  • Диапазон печати в excel
  • Excel word слияние
  • Функция целое в excel
  • Excel текущая дата в ячейке
  • Как в excel сделать перенос в ячейке

SQL-запрос в Excel VBA для извлечения информации из Access

Пересмотренный вопрос: я не привык писать SQL-запросы в VBA, поэтому я использовал запись макроса для подключения к Access. Я включил код, который возвращает средство записи макросов. Я получаю сообщение об ошибке

Непредвиденная ошибка. Что-то пошло не так. Если проблема не исчезнет,
пожалуйста, перезапустите Эксель.

Если я щелкну закрыть сообщение об ошибке, электронная таблица с информацией о базе данных из Access появится в Excel, и это здорово, но я бы не хотел, чтобы сообщение об ошибке всплывало.

Вот мой код:

 Sub Contact_Search()
Dim ContactNum как строка
Запустить снова:
ContactNum = InputBox("Введите номер для запроса.", "Контактный запрос", "Введите номер здесь...")
Если ContactNum = "Введите номер здесь..." Тогда
  MsgBox "Неверный ответ, пожалуйста, введите номер для запроса."
  Перейти к перезагрузке
ИначеЕсли НомерКонтакта = "" Тогда
  MsgBox "Номер обязателен. Пожалуйста, введите номер."
  Перейти к перезагрузке
Конец, если
ActiveWorkbook.Worksheets.Добавить после:=Листы(1)
С ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(_
  "OLEDB;Provider=Microsoft. ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=C:\Users\путь\имя папки\Контакты" _
  , _
  "Database.accbd;Mode=Share Deny Write;Extended Properties="""";Jet OLEDB:Системная база данных="""";Jet OLEDB:Путь к реестру="""";Jet OLEDB:Da" _
  , _
  "tabase Password="""";Jet OLEDB:Engine Type=6;Jet OLEDB:Mod блокировки базы данных=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Globa" _
  , _
  «l Массовые транзакции = 1; JetOLEDB: новый пароль базы данных = «»»; Jet OLEDB: создать системную базу данных = False; Jet OLEDB: зашифровать базу данных = False» _
  , _
  ";Jet OLEDB:Не копировать локально на компактный=False;Jet OLEDB:Compact без восстановления реплики=False;Jet OLEDB:SFP=False;Jet OLEDB:Suppo" _
  , _
  "rt Complex Data+False;Jet OLEDB:Обход сведений о пользователе Validaton=False;Jet OLEDB:Ограниченное кэширование БД=False;Jet OLEDB;Обход ChoiceField" _
  , " Validation=False"), Destination:=Range("$A$1")).QueryTable
.CommandType = кслкмдтабле
.CommandText = Массив ("Контакты")
. PreserveFormatting = Истина
.BackgroundQuery = Истина
.RefreshStyle = кслинсертделетселлс
.СохранитьДанные = Истина
.AdjustColumnWidth = Истина
.RefreshPeriod = 0
.PreserveColumnInfo = Истина
.SourceDataFile = "C:\Users\путь\имя папки\Contacts\Database.accdb"
.ListObject.DisplayName = "Table_Database.accdb"
.Обновить BackgroundQuery:=False
Конец с
Конец сабвуфера
 

Я уверен, что многое из того, что находится в этом коде, на самом деле не нужно, это просто то, что туда вставляет средство записи макросов, но я не уверен, что можно вынуть и что там должно быть, чтобы он работа, и я не уверен, что что-то в коде вызывает сообщение об ошибке, которое я получаю. Как я уже сказал, информация все еще поступает, но я должен закрыть сообщение об ошибке, прежде чем оно появится в документе Excel.

Кроме того, на самом деле я хочу вернуть не всю таблицу, а только строки, соответствующие переменной ContactNum, введенной пользователем. Я не уверен, где в этом коде я бы поместил язык SQL, чтобы он возвращал только определенные значения, а не всю таблицу. Любые идеи по сообщению об ошибке, а также словоблудие SQL?

sql — Использование функции VBA в запросе доступа

Задавать вопрос

спросил

Изменено
1 год, 8 месяцев назад

Просмотрено
316 раз

Я хочу написать запрос SQL, используя доступ MS, который вычисляет серийный номер, используя функцию VBA.

У меня есть большая таблица «samplebasicinformation», в которой много внешних ключей, и я хочу использовать текстовые поля во внешних таблицах для создания текстового серийного номера.

Я хочу, чтобы первое поле запроса сокращало несколько текстовых полей из других таблиц, затем объединяло их и создавало этот серийный номер.

Для сокращения текстовых полей у меня есть следующая функция:

 Функция GetFirstLetters(rng As String)
Тусклый обр
Дим я пока
arr = VBA. Split(rng, "")
Если Массив(обр) Тогда
    Для I = LBound (приб.) To UBound (приб.)
        GetFirstLetters = GetFirstLetters & Left(arr(I), 1)
    Далее я
Еще
    GetFirstLetters = Слева (приб., 1)
Конец, если
Конечная функция
 

Я попытался сделать это с помощью приведенного ниже SQL, но не смог из-за синтаксической ошибки.

 ВЫБЕРИТЕ
(getfirstletters(выбрать sl.locationname из samplebasicinformation as sbi присоединиться к samplelocation как sl
на sbi.samplelocationid = sl.samplelocationid)),
SampleBasicInformationID
из SampleBasicInformation как sbi1
 

Кто-нибудь может дать совет?

  • sql
  • vba
  • ms-access

Вам нужно передать один столбец вашей функции.

Ваш запрос довольно запутан, я думаю, что это так же просто:

 SELECT
getfirstletters(sl.locationname),
sbi.samplebasicinformationid
ОТ образца базовой информации как sbi
Расположение образца INNER JOIN как sl
на sbi.samplelocationid = sl.