MyTetra Share
Делитесь знаниями!
Учимся работать с базами данных Access из макросов Excel
Время создания: 16.03.2019 23:43
Текстовые метки: Excel-Access, VBA, DAO
Раздел: !Закладки - VBA - Access - Excel->Access
Запись: xintrea/mytetra_db_adgaver_new/master/base/1513050511nkm76rjg3s/text.html на raw.githubusercontent.com

Учимся работать с базами данных Access из макросов Excel

Кратко о структуре базы данных. База состоит из таблиц. Таблица - из строк. Строка - из полей. В полях могут храниться данные разных форматов. Форматы определяются в момент создания таблицы. Создать базу и таблицы в ней можно в Access, а можно и средствами макроса прямо из Excel.

Чтобы Access смог обращаться к базам Access, нужно подключить библиотеку DAO. Для этого в редакторе Visual Basic выбираем меню "Tools->References", открывается окошко, в котором нужно поставить галочку напротив Microsoft DAO 3.6 Object Library.

Теперь делаем так:

'Объявляем переменные
Dim dbs As DAO.Database 'База данных
Dim rs As DAO.Recordset 'Запрос к базе данных

'Открываем базу
Set dbs = DAO.OpenDatabase("c:\database.mdb")
'Выполняем запрос к базе данных
Set rs = dbs.OpenRecordset("SELECT * FROM тбл_тов WHERE ID_тов>2")

Тут объясню подробнее. Запросы к базе выполняются на языке SQL. Пока рассмотрим только одну команду этого языка - SELECT. Эта команда выбирает из таблицы строки, удовлетворяющие заданному условию. Там, где у нас стоит звездочка, можно указать названия полей, которые будут присутствовать в ответе. В нашем случае будет возвращаться вся строка полностью. После слова FROM идет название таблицы, из которой идет выбор строк. Таблиц в базе может быть много. В нашем случае это тбл_тов - таблица товаров. После слова WHERE указывается условие, по которому отбираются строки. У нас условие такое: если поле ID_тов > 2, то строка включается в ответ. Ответ получается в переменной rs, которая имеет тип Recordset. Recordset - это временная таблица, сформированная из строк, удовлетворяющих условию запроса.

'Если ничего не найдено - выдаем сообщение и выходим

If RS.RecordCount = 0 Then

    MsgBox ("По вашему запросу ничего не найдено")

    Exit Sub

End If

Do While Not RS.EOF    'цикл выполняется пока не достигнута последняя строка в таблице ответа

    'Присваиваем ячейкам таблицы значения из базы

    Cells(i, 2).Value = RS.Fields("назв_тов")

    Cells(i, 1).Value = RS.Fields("ID_тов")

    i = i + 1

    'переходим к следующей строке во временной таблице ответа

    RS.MoveNext

Loop

'Закрываем временную таблицу

RS.Close

'Очищаем память. Если этого не сделать, то таблица так и останется в памяти до закрытия рабочей книги.

Set RS = Nothing

'Закрываем базу

dbs.Close

'Очищаем память

Set dbs = Nothing

 

Скачать пример работы с базой данных

Прикрепленные файлы:
Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования