на чем написаны модули access
Джентльменский набор разработчика Access
За время работы разработчиком Access набралась куча полезностей, которую считаю своим долгом выложить на Хабр. Многие из этих сниппетов находятся в сети, а некоторые находятся с трудом или безнадежно затеряны.
1. При работе с Access во время выполнения запроса возникают предупреждающие сообщения. Они довольно полезны во время отладки приложения, но для пользователей, как правило, не нужны. Отключить/включить их можно с помощью небольшого кода VBA:
Указав в виде параметра 0 для отключения и 1 для включения.
3. Не знаю, как бы я работал (наверное, работал бы так же, но гораздо медленнее), если бы не создал себе форму с поиском текста в содержимом запросов или форм. Очень часто необходимо производить какой-то рефакторинг или определять область применения таблицы или поля.
Для поиска по запросам поможет форма с кодом, который выполняет поиск в тексте запросов:
Для поиска по формам код немного объемнее:
4. Для того, чтобы сделать нашу работу чуть более солидной с точки зрения программирования и для возможности поиска ошибок при работе в режиме production на рабочей базе данных очень желательно добавить модуль VBA (tracing модуль) для записи происходящих событий в текстовый файл лога. Простая функция записи в текстовый файл будет очень полезна при отладке.
5. Этот код (из пункта 4) вполне можно вынести в отдельный файл базы данных Access и добавить во все существующие базы данных через References/Ссылки редактора VBA.
Если у вас имеется несколько файлов баз данных Access, то любой повторяющийся код можно вынести в отдельный файл. Единственное изменение, которое может быть необходимо сделать — в случае если в коде используется объект CurrentDb, то заменить его на CodeDb, дабы обращение шло к объектам той базы, которая используется в качестве хранителя общего кода.
6. Зачастую в запросах указывают в качестве параметра значение какого-либо поля открытой формы. Например, таким образом:
Но иногда необходимо указать параметр непосредственно в самом запросе. Сделать это можно так:
И далее из кода Access задать эти параметры и выполнить запрос:
Альтернативой может быть создание модуля VBA и добавление в него глобальной переменной, а также функции, возвращающей эту переменную.
Перед запуском запроса необходимо задать значение глобальной переменной (можно задать при открытии основной формы):
И в самом запросе указать параметром название возвращающей значение функции:
6.1 Этот способ получения параметра запроса можно использовать для частичного ограничения доступа к информации таблицы (в случае использования рабочей группы). При загрузке формы в зависимости от текущего пользователя установим значение глобальной переменной:
Далее установим запрет на просмотр и изменение таблицы demotable, а на запрос установим разрешение. Но так как запрос у нас использует таблицу, на которую нет прав, то данных он нам не вернет. Для того, чтобы он вернул данные необходимо к sql запроса добавить в конце
В результате пользователь Buh сможет иметь доступ ко всем строкам таблицы, а все остальные пользователи ко всем строкам за исключением первой 1000.
7. Для того, чтобы открыть форму из кода используется код:
В качестве «WhereCondition» можно указать условие, на какой записи формы необходимо её открыть (в случае, если форма привязана к данным). Указав, например, «ZakazID=56325», можно открыть форму именно со значением данных ZakazID равным 56325.
В качестве значения «OpenArgs» можно указать какие-либо параметры, которые на открываемой форме можно будет считать
в Private Sub Form_Load() с помощью Me.OpenArgs. Если необходимо передать несколько параметров, то можно передать их в виде текстовой строки, разделив символом. И далее в Private Sub Form_Load() разбить на части:
8. Многие забывают, что Access работает не только таблицами из файлов mdb/accdb, но и с таблицами других баз данных. Для экспорта уже существующих таблиц есть бесплатная утилита SQL Server Migration Assistant, хотя можно воспользоваться и встроенным функционалом или найти стороннее решение.
И напоследок небольшой хинт из разряда «Это знает каждый ребенок, но я вот этого не знал…»:
Знаете ли вы, что для того, чтобы при открытии файла Access не срабатывали макросы и не открывалась форма по умолчанию, необходимо держать нажатой клавишу Shift?
Объект Module (Access)
Объект Module относится к стандартному или классному модулею.
Примечания
Microsoft Access включает модули классов, которые не связаны ни с любым объектом, так и модули форм и отчеты, связанные с формой или отчетом.
Чтобы определить, представляет ли объект Module стандартный модуль или классный модуль из кода, проверьте свойство Type объекта Module.
Коллекция Модулей содержит все открытые объекты модуля независимо от их типа. Модули в коллекции Modules можно компилировать или некомпилировать.
Чтобы вернуть ссылку на определенный стандартный или классный объект Module в коллекции Modules, используйте любую из следующих форм синтаксиса.
Синтаксис | Описание |
---|---|
Модули! имя модуля | Аргумент modulename — это имя объекта Module. |
Модули(«имя модуля») | Аргумент modulename — это имя объекта Module. |
Модули(индекс) | Аргумент индекса — это числовая позиция объекта в коллекции. |
В следующем примере возвращается ссылка на стандартный объект Module и назначается переменная объекта.
Обратите внимание, что скобки, включающие имя объекта Module, необходимы только в том случае, если имя объекта Module включает пробелы.
В следующем примере возвращается ссылка на объект модуль формы и назначает его переменной объекта.
Чтобы сослаться на определенный модуль формы или отчета, можно также использовать свойство Module объекта Form или Report.
В следующем примере также возвращается ссылка на объект Module, связанный с формой Employees, и назначает ее переменной объекта.
После возврата ссылки на объект Module можно установить или прочитать его свойства и применить его методы.
Методы
Свойства
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Основы программирования в СУБД MS Access. Понятие модуля. Типы и способы создания модулей
Страницы работы
Содержание работы
Кафедра «Информационные технологии»
Курс лекций по дисциплине «Базы данных» для специальности направления 1-40 01 02‑01 «Информационные системы и технологии (в проектировании и производстве)»
Основы программирования в СУБД MS Access
1. Выбор между использованием макросов и программных модулей на VBA
2. Понятие модуля. Типы и способы создания модулей.
3. Модели объектов для работы с данными.
1. Выбор между использованием макросов и программных модулей на VBA
В Access многие действия выполняются через интерфейс пользователя или с помощью макросов. В других СУБД решение тех же самых задач может потребовать программирования. Выбор между созданием макроса или разработкой программы на языке VBA (Visual Basic for Applications) обычно определяется действиями, которые требуется выполнять в приложении Access.
2. Понятие модуля. Типы и способы создания модулей.
Типы модулей в Access
Стандартные модули содержат общие процедуры, не связанные с конкретным объектом БД (формой, отчетом). В эти модули помещают процедуры Sub и Function, которые должны быть доступны для всех объектов в данном приложении. Стандартные модули могут использоваться и другими приложениями Access.
Модуль класса отличается от стандартного модуля тем, что, кроме процедур, он содержит описание объекта и используется для создания классов (объектов). Отдельные модули класса, расположенные на вкладке Модули окна БД, содержат описание класса (объекта), созданного пользователем. К этим модулям также относятся модули объектов (форм, отчетов), связанные с конкретными формами или отчетами.
Способы создания модулей Первый способ создания пустого модуля: выбрать «Да» в поле наличия модуля на вкладке «Все» в окне диалога Форма или Отчет. Окно диалога вызывается командой «Свойства» из контекстного меню, находясь в конструкторе форм или отчетов.
1-й способ создания пустого модуля
Второй способ создания модуля выполняется кнопкой «Программа» на панели инструментов в режиме конструктора форм или отчетов. При щелчке мышью на кнопке Программа запускается редактор VB, в котором вводится текст программы соответствующего модуля.
2-й способ создания модуля
2-й способ создания модуля (в MS Access 2003)
Программа с модулями класса
В Access было два типа модулей: стандартные модули и модули классов. В Access 95 модули классов существовали только совместно с формой или отчетом. В Access 97 они также существовали на вкладке Модули окна базы данных.
Создание настраиваемых объектов с модулями классов
Модуль класса можно использовать, чтобы создавать определение для настраиваемого объекта. Имя, с которым сохраняется модуль класса, становится именем настраиваемого объекта. Общедоступные процедуры Sub и Function, определяемые в модуле класса, становятся настраиваемыми методами объекта. Общедоступные процедуры Property Let, Property Get и Property Set становятся свойствами объекта.
После определения процедур в модуле класса можно создать новый объект, создав новый экземпляр класса. Чтобы создать новый экземпляр класса, объявите переменную типа, определяемую этим классом. Например, если имя класса — ABasicClass, его новый экземпляр создается указанным ниже образом:
При запуске кода с этим объявлением Visual Basic создает новый экземпляр. После этого можно применить его методы и свойства с помощью переменной. Например, если определен настраиваемый метод ListNames, можно применить его указанным ниже образом:
Создание стандартного экземпляра класса формы (Access 95)
Когда форма открывается в представлении формы из пользовательского интерфейса или из Visual Basic, создается экземпляр модуля класса этой формы. Другими словами, в памяти назначается место, где теперь существует объект, и можно вызывать его методы и устанавливать или возвращать его свойства из кода, как для любого встроенного объекта. Это же касается открытия отчета в режиме предварительного просмотра.
Когда вы ссылаетесь на форму в коде Visual Basic, обычно работа выполняется со стандартным экземпляром класса формы. У класса формы есть только один стандартный экземпляр. Можно также создать несколько экземпляров одного класса формы в Visual Basic. При создании нескольких экземпляров класса формы создаются нестандартные экземпляры.
Существует четыре способа создания стандартного экземпляра формы. Можно открыть существующую форму с помощью пользовательского интерфейса, выполнив метод OpenForm объекта DoCmd путем вызова метода CreateForm и переключения новой формы в представление формы, или с помощью Visual Basic для создания переменной типа Form для ссылки на стандартный экземпляр. В приведенном ниже примере открывается форма Employees (Сотрудники) и с ней сопоставляется переменная объекта Form:
В Access также существует легкий способ, позволяющий одним действием открыть форму и добавить ссылку на метод или свойство этой формы или на один из ее элементов управления. Укажите ссылку на модуль класса формы, как показано в приведенном ниже примере:
При запуске этого кода Access открывает форму Employees (Сотрудники) в представлении формы, если она еще не открыта, и присваивает заголовку формы значение New Employees (Новые сотрудники). Форма не отображается, пока свойству Visible не будет явным образом присвоено значение True. Когда завершится выполнение процедуры, вызывающей этот код, этот экземпляр формы уничтожается, т. е. форма закрывается.
При попытке выполнить этот код, когда форма Employees (Сотрудники) открыта в представлении конструктора, в Access возникнет ошибка времени выполнения. Эта форма должна быть открыта либо в представлении формы, либо не должна открываться.
Если вы используете этот синтаксис для изменения свойства формы или одного из ее элементов управления, это изменение будет потеряно при уничтожении экземпляра формы. Это же происходит при каждом изменении значения свойства для формы в представлении формы. Необходимо изменять свойства в представлении конструктора и сохранять изменение с формой.
Создание нескольких нестандартных экземпляров форм
Можно создать несколько нестандартных экземпляров класса формы, если нужно отобразить несколько экземпляров форм одновременно. Например, может потребоваться одновременно отобразить записи для сотрудника и руководителя. Можно создать один экземпляр класса формы Employees (Сотрудники), чтобы отобразить запись сотрудника, и один экземпляр для отображения записи руководителя.
Чтобы создать новые нестандартные экземпляры класса формы в Visual Basic, объявите переменную, для которой типом является имя модуля класса формы. В объявление переменной нужно включить ключевое слово New. Например, в приведенном ниже коде создается новый экземпляр формы Employees (Сотрудники), который присваивается переменной типа Form:
Этот нестандартный экземпляр формы не отображается, пока свойству Visible не будет явным образом присвоено значение.
Когда завершится выполнение процедуры, создающей этот экземпляр, экземпляр удаляется из памяти, если не объявлена переменная, представляющая его в виде переменной уровня модуля. Так как переменные уровня модуля хранят свои значения, пока они не будут сброшены с помощью команды Reset в меню Run или кнопки Reset на панели инструментов, форма остается открытой, если переменная была объявлена как переменная уровня модуля.
Любые установленные свойства влияют на этот экземпляр класса формы, но не сохраняются с формой. Кроме того, нельзя создать новый экземпляр класса формы, если форма открыта в представлении конструктора.
На нестандартный экземпляр класса формы нельзя сослаться по имени в коллекции Forms. Добавить на него ссылку можно только по номеру индекса. Так как можно создать несколько нестандартных экземпляров формы с одним именем, может существовать несколько форм с одним именем в коллекции Forms. Различить их можно только по номеру индекса.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.