Vba access примеры
12. Программирование в Access
Создание приложений VBA в Access, типичные ситуации
Программирование в Access сильно отличается от программирования в Word, Excel и других приложениях Office. Главное принципиальное отличие заключается в том, что Word, Excel, PowerPoint, Project и т.п. предназначены прежде всего для непосредственной работы с ними пользователя, без какой-либо доработки со стороны разработчиков предприятия. Access иногда также используется как конечное приложение пользователями, но чаще он все-таки применяется как платформа для создания своих приложений разработчиками.
Второе отличие заключается в том, что в Access встроено свое собственное ядро для работы с данными. Фактически Access — это полноценная система управления базами данных, поэтому для полного использования его возможностей необходимы знания о принципах работы с базами данных: что такое таблицы и отношения между таблицами (система ключей), что такое нормализация данных, типы данных и ограничения целостности и т.п. Очень часто пользователи на предприятиях такими знаниями не обладают.
Кроме того, существуют разные варианты использования Access с точки зрения архитектуры приложения. Иногда Access (файл MDB) используется просто как ядро, которое управляет данными, находящимися с таблицами. Пользователи работают с этими данными через внешние приложения, созданные разработчиками, например, на Visual Basic, Delphi или C++. В других ситуациях Access, наоборот, используется только для предоставления пользовательского интерфейса для работы с данными, которые физически расположены на серверах баз данных, например, SQL Server, Oracle, IBM D2 и т.п.
В Access предусмотрен встроенный язык запросов JET SQL, который активно используется разработчиками для работы с данными в базах данных Access.
Подводя итоги, можно сказать, что программирование средствами VBA в Access, которое будет рассмотрено в этой главе — это лишь малая часть возможностей Access. Очень многие возможности работы с Access (например, его язык запросов или проектирование и создание таблиц) останутся за пределами этой книги. По этим возможностям существует отдельная литература. Заметим, что во многих книгах по Access за рамками остается как раз язык VBA и объектная модель самого Access, так что эта глава может послужить дополнением к ним.
Какие задачи на предприятии чаще всего решаются средствами автоматизации в Access?
Сразу же скажем, что поскольку Access — это система управления базами данных, то он очень часто используется как контейнер для хранения данных. Данные при этом могут быть самыми разными, например, обычные данные о заключенных договорах или клиентах нашего предприятия, или цифровые фотографии, или шаблоны Word или Excel, которые используются для генерации отчетов из баз данных. То, что в Access все это вместе с графическим интерфейсом можно «упаковать» в один файл MDB, позволяет сделать приложение очень компактным и удобным для переноса с компьютера на компьютер.
Еще одно важное назначение Access — обеспечение клиентского интерфейса для работы с данными, которые хранятся на мощных клиент-серверных системах, таких, как MS SQL Server, Oracle, IBM DB2. Согласно достаточно условной градации от Microsoft рекомендуется использовать настольные системы (такие, как Access, FoxPro, Paradox и т.п.), если к данным одновременно будут обращаться не более 10 пользователей. Если пользователей может быть больше (или, к примеру, самих данных будет очень много — гигабайты), то рекомендуется использовать более сложные, но и более функциональные клиент-серверные системы. А уже в рамках обеспечения доступа к данным (на клиент-серверных системах или прямо в базах данных Access) решаются более узкоспециализированные задачи приложений:
- создание обычных форм — программных интерфейсов для занесения/изменения/просмотра данных в базе данных и Web-форм (они называются страницами доступа к данным);
- создание отчетов к базам данных, в том числе параметризованных;
- создание программной логики приложения обычным способом — на VBA (модули) и для начинающих пользователей — макросы (макросы всегда можно преобразовать в модули);
- вспомогательные действия — печать, экспорт и преобразование данных (хотя для преобразования данных обычно удобнее использовать объектную модель DTS), загрузка данных, репликация и т.п.
Как написать функцию на VBA Access 2003
Продолжаем осваивать Access 2003, и пришло время поговорить о написании собственных функций на VBA. Мы рассмотрим немного теории, т.е. где создаются эти функции, для чего их пишут, а также как обычно попрактикуемся в этом, в принципе не сложном, деле.
Тему программирования на VBA Access 2003 мы уже немного затрагивали, например, рассматривали встроенные функции и если говорить вообще об Access 2003, то тут мы тоже преуспели, например, освоили группировку данных в отчете.
А сегодня, приступим к более интересной, как мне кажется, теме это написание своих функций на языке VBA.
Что такое пользовательские функции VBA и зачем их пишут
Это функции, которые пишет сам программист для упрощения остального кода программы.
Что здесь понимается под упрощением, и для чего вообще нужно писать такие функции, я решил объяснить по пунктам, так как это будет более понятно для начинающих, да и просто для восприятия:
- И в первом пункте сразу хотелось бы отметить это значительное сокращение кода. Например, Вам часто нужно выполнять какие-либо действия, код которых занимает, скажем, 10-20 и более строк, и вот представите, что Вы данный код будете повторять 2-3-10… раз в своем основном коде программы, другими словами количество строк основного кода возрастет в разы, а чем это грозит, рассмотрим во втором пункте;
- Если у Вас код очень большой, то его будет трудно в дальнейшем редактировать и к тому же если у Вас есть повторяющейся код, то тогда придется искать его и исправлять код во всех местах, что согласитесь первое, это очень нудно, а второе Вы можете просто забыть изменить код в каком-нибудь месте и программа не будет работать или что еще хуже, будет работать, но не правильно, за что Вас конечно начальство не похвалит;
- Про сокращение кода мы сказали, но также мы делаем его более наглядным и понятным. Другими словами, когда в коде мы встретим вызов той или иной функции, мы сразу поймем, что она делает, и будем меньше тратить время на разбор и понимание всего кода, а это принесет нам выгоду, так как мы будем более оперативно вносить изменения в функционал нашей программы, а вот за это начальство может нас похвалить.
Как и у любого языка программирования и среды программирования в VBA Access есть область видимости функции, например, мы, можем написать функцию которую можно будет вызвать только в пределах одного объекта (формы или отчета) или мы можем ее написать в области видимости всего проекта, т.е. функцию можно будет вызвать из любой формы или отчета. Мы сегодня рассмотрим оба варианта, соответственно на примерах.
Примеры написания функций VBA Access
И для начала давайте определимся, что за функцию мы будем писать, т.е. что она будет делать. Я предлагаю написать в качестве простого примера функцию, которая будет принимать один параметр с типом date и возвращать строку вида «19 Июня 2014г.». Как мне кажется достаточно простой пример, но вдруг кому-нибудь пригодится.
Пишем локальную функцию VBA
Как я уже сказал ранее, есть разные области видимости функций и сейчас мы напишем своего рода локальную функцию, которую можно будет запустить только из кода того объекта, где эта функция написана.
Для реализации нашего примера давайте создадим форму, добавим на нее кнопку, клик по которой будет вызывать нашу функцию. Думаю показывать, как создать форму не стоит, так как мы это уже неоднократно делали, единственное скажу, что я форму назвал «Тестовая форма», элемент кнопка назвал «start» с подписью «Старт»
Теперь запустим редактор кода VBA, это можно сделать путем нажатия кнопки на панели инструментом «Программа»
И вставляем код нашей функции и сразу же код ее вызова, т.е. код обработки события нажатия кнопки (весь код прокомментирован):
В итоге у Вас должно получится следующее:
То, что это функция локальная свидетельствует слово Private перед названием функции.
Теперь все сохраняем, открываем нашу форму, жмем, старт и получаем наше сообщение:
Как видите, мы получили тот результат, который хотели, т.е. мы передавали в качестве параметра дату «19.06.2014» и получили соответствующий результат.
Пишем глобальную функцию VBA
Для того чтобы написать такую функцию создадим модуль, например «test_func» а там уже напишем нашу функцию. Для того чтобы создать модуль, открываем Access и на панели объектов выбираем «Модули» и жмем «Создать».
Затем вставляем наш код, с одним изменением, перед названием функции пишем Public, и у Вас должно получится вот такая картина:
Теперь осталось изменить код вызова нашей новой глобальной функции, для этого меняем код обработки события нажатия кнопки на нашей тестовой форме, на вот такой:
Сохраняем и проверяем, результат будет таким же, но его нам вернула уже совсем другая функция.
Как видите, все нет так уж и сложно, функция конечно простая, но Вы можете писать функции для собственных нужд, которые будут более сложными. Я всем советую весь повторяющийся код выносить в функции, так как это будет намного лучше, как для работы с этим кодом, так и просто для восприятия. Надеюсь, сегодняшняя статья помогла Вам разобраться с вопросом «Как написать функции на VBA Access?». Удачи в программировании на VBA.
Access. Программирование на VBA
Это не совсем книга, скорее подборка статей с приложением необходимых примеров. Она может быть полезна не только начинающим но и опытным программистам (или пользователям) Access. В состав вошли четыре части (статьи):
— Создание объектов с помощью модулей классов;
— Отладка приложений Access;
— Профессиональная обработка ошибок;
— Оптимизация приложений.
Материал изложен кратко, но его объём вполне достаточен для того, чтобы научиться использовать язык VBA для эффективной работы в среде Microsoft Access.
Скачано: 30432 раз
Скачать книгу
Комментарии
виктор, 25.12.2010 12:40
хочу научится аботать
buratino, 05.03.2011 19:49
student, 17.04.2011 21:38
Абубакр, 11.05.2011 02:36
Я всем скажу отлична книги,
Abubakr, 11.05.2011 02:38
слушайте а кто чо создал.
Никита, 02.06.2011 11:15
Фуркат, 01.08.2011 11:37
Савсиба за книгу
света, 21.08.2011 10:41
Lord, 14.09.2011 12:57
Abubakr, имея базовые знания по Access и понятия не имя про VBA, мне удалось создать достаточно не плохую базу, которая успешно внедряется ) Но книгу обязательно прочту, давно искал что-то подобное
mr. Andersan, 23.09.2011 02:09
Реальное СПАСИБО от реальных ПАЦАНОВ;)))
Ahmad, 05.02.2012 06:02
alex, 06.04.2012 04:48
Заточаа, 17.04.2012 04:13
Ruslan, 19.04.2012 23:59
Пока не прочитал но скачал всеравно спасибо за всё
petr, 26.10.2012 10:51
хочу понять язык
Yury, 04.03.2013 07:50
надо разобраться в идентификации и динамике значений данных и полей в макросах и формах
Access, 17.04.2013 09:56
eldiyar, 20.05.2013 15:46
pasib za knigu)a narod ect kakoi nibud chat iloi sait gde vse progery kotorye rabotayut cherez VB tipa obmen opyta wto li esli ect skinte sylku pls [email protected]
Афанасий, 04.02.2014 14:00
В треде одни наркоманы!
rty, 03.09.2014 17:47
Сергей, 02.07.2015 23:30
Ural, 25.11.2015 15:55
Васисуалий, 12.12.2015 17:35
в описании наглая ложь! в книге ни слова нет про работу в Access.
grt, 14.01.2016 21:58
Коба, 27.06.2016 15:54
Лилу, 30.10.2016 15:00
Dorseysmoog, 19.02.2018 17:12
Выполнение SQL запросов к текущей базе данных в среде VBA (Access)
В Microsoft Office Access поддерживается выполнение SQL запросов к текущей базе данных из программного кода на VBA. Рассмотрим, как это можно использовать при разработке приложений баз данных.
Так как запрос выполняется к той же самой базе данный в которой выполняется модуль VBA, для выполнения SQL запроса нет необходимости работать со стандартными в подобных случаях интерфейсами ADO, ODBC и т.д. Всё можно сделать при помощи объектной модели Access.
Как известно SQL запросы можно условно разделить на две большие группы:
- Запросы, не возвращающие данных (INSERT, UPDATE, DELETE и т.д.);
- Запросы возвращающие данные (запросы на выборку (SELECT)).
Запросы, не возвращающие данных
Для выполнения запросов к текущей базе данных служит метод Execute объекта CurrentDb. Этот метод принимает в качестве параметра строку с SQL запросом, который необходимо выполнить.
Это простейший запрос. Но, как быть с запросами, которые манипулируют теми или иными данными?
Такие запросы тоже можно выполнить. Для этого нужно просто сформировать соответствующую строку.
Так, например, может быть реализовано добавление записей в таблицу:
А, так их обновление:
Выполнение другие типов запросов не возвращающих данных осуществляется по аналогичным принципам.
Запросы на выборку
Метод Execute объекта CurrentDb не поддерживает выполнение запросов на выборку. Поэтому для них нужен другой подход.
Чтобы работать с выборкой данных необходимо воспользоваться объектом RecordSet, который можно создать при помощи метода OpenRecordSet объекта CurrentDb. Этот метод также принимает в качестве параметра строку с SQL запросом.
После создания RecordSet мы можем перебрать все записи, как это показано ниже.
Помимо простого перебора доступны несколько видов поиска. Но в основном используются два.
Первый вид поиска реализован в виде методов FindFirst, FindLast, FindNext и FindPrevious объекта RecordSet.
Первые два устанавливают курсор на соответственно первую и последнюю записи, соответствующие условию поиска. Условие поиска передаётся в качестве параметра в виде строки. Само условие задаётся по аналогии с предложением WHERE в обычном SQL запросе.
Методы FindNext и FindPrevious устанавливают курсор на следующую и предыдущую записи в соответствии с условием поиска, если такие записи существуют. Условие поиска для этих методов задаётся также, как и для FindFirst и FindLast.
Обратите внимание, что эти четыре метода именно устанавливают указатель на нужную запись, а не производят фильтрацию выборки. Таким образом количество записей выбранных SQL запросом остаётся неизменным.
В следующем примере перебор записей начнётся с записи, у которой id равен 234, так как курсор был перемещён к ней до начала обхода набора записей в цикле.
Программирование на VBA в СУБД MS Access
VBA (Visual Basic for Application) играет важную роль при разработке баз данных MS Access. С помощью VBA в MS Access можно настроить формы и отчеты, запустить макросы, извлечь данные и т.д.
Модули VBA
VBA может использоваться для выполнения любых действий в ходе работы приложения. Для создания процедур VBA в MS Access используется Построитель программ. Программный код создается в Окне модуля. В зависимости от технологии создания можно различить несколько типов модулей:
1. Стандартный модуль. Для его открытия нужно распахнуть список Макрос, расположенный в группе Другие вкладки Создание ленты инструментов, и нажать кнопку Модуль.
2. Модуль формы или отчета. Для открытия модуля формы или отчета нужно открыть форму или отчет в режиме Конструктора и выбрать кнопку Просмотреть код в группе Сервис контекстного меню Инструменты конструктора форм/отчетов — Конструктор ленты инструментов. MS Access позволяет открыть одновременно и форму/отчет и ее модуль. Модули формы/отчета сохраняются одновременно с формой/отчетом и не перечисляются во вкладке Модули области переходов.
3. Независимый модуль класса. Открывается щелчком мыши по кнопке Модуль класса, появляющейся в распахивающемся списке кнопки Макрос, расположенной в группе Другие вкладки Создание ленты инструментов. После сохранения такого модуля его имя будет находиться на вкладке Модули области переходов вместе со стандартными модулями. Для обозначения стандартных модулей и независимых модулей VBA используются разные пиктограммы (рис. 10.8):
Элементы языка VBA
Коды программы VBA состоят из выражений (statements). В каждой строке кода располагается одно отдельное выражение. Но данное правило имеет исключения:
· несколько выражений могут быть расположены в одной строке и разделены двоеточием;
· использование символа продолжения строки (пробел, за которым следует символ подчеркивания) позволяет создавать выражение, занимающее несколько строк. Не допускается использовать символ продолжения строки только внутри заключенных в кавычки строк. Рекомендуется продолжение каждой строки выделять отступом.
Алфавит языка VBA составляют следующие элементы:
· прописные и строчные буквы латинского алфавита (А – Z);
· прописные и строчные буквы кириллицы (А – Я);
· цифры от 0 до 9;
· символ подчеркивания «_»;
При написании кода VBA следует знать некоторые соглашения, которых следует придерживаться, чтобы избежать ошибок выполнения кода. Первое соглашение – это соглашение по именам. В VBA именуются переменные, константы, процедуры, функции, объекты и т.д. Определим правила, которым следует следовать при выборе имен:
1. Длина имен не должна превышать 255 символов, но VBA учитывает только первые 31 символ от начала имени.
2. Имена должны начинаться с буквы и могут содержать комбинацию букв, цифр и символов.
3. Имена не должны совпадать со стандартными именами VBA.
4. Имена не должны включать точек, пробелов и следующих символов: ! @ # $ %. Символ пробела можно заменить символом подчеркивания _.
Регистр букв в именах не имеет значения. Например, имена PRICE, Price и price эквивалентны.
Типы данных языка VBA
В языке VBA типы данных делятся на простые (или базовые) и структурированные.
К простым типам относятся:
· вещественный (Single, Double, Currency, Decimal);
· логический (Boolean).
К стандартным структурированным типам относятся:
· массив;
· строка;
· тип, определяемый пользователем.
Таким образом,VBA использует 12 встроенных типов данных, представленных в таблице 10.1.