Option compare database в access что это
Применяется на уровне модуля для задания используемого по умолчанию способа сравнения строковых данных.
Option Compare
Замечания
Инструкция Option Compare при ее использовании должна находиться в модуле перед любой процедурой. Инструкция Option Compare указывает способ сравнения строк (Binary, Text или Database) для модуля. Если модуль не содержит инструкцию Option Compare, по умолчанию используется способ сравнения Binary.
Инструкция Option Compare Binary задает сравнение строк на основе порядка сортировки, определяемого внутренним двоичным представлением символов. В Microsoft Windows порядок сортировки определяется кодовой страницей символов. В следующем примере представлен типичный результат двоичного порядка сортировки:
Инструкция Option Compare Text задает сравнение строк без учета регистра символов на основе системной национальной настройки. Тем же символам, что и выше, при сортировке с инструкцией Option Compare Text соответствует следующий порядок:
Инструкция Option Compare Database может использоваться только в Microsoft Access. При этом задает сравнение строк на основе порядка сортировки, определяемого национальной настройкой базы данных, в которой производится сравнение строк.
Пример
В данном примере инструкция Option Compare используется для задания метода сравнения строковых данных, используемого по умолчанию. Инструкция Option Compare используется только на уровне модуля.
' Устанавливает метод сравнения строковых данных Binary. Option compare Binary ' Т.е. "AAA" < "aaa" ' Устанавливает метод сравнения строковых данных Text. Option compare Text ' Т. е. "AAA" = "aaa".
Окно приложения MS Access — Работа со свойствами (внешним видом)
Использование
В модуль ЛЮБОЙ стартовой формы пишем что то вроде:
Private Sub Form_Load() 'Загрузка СТАРТОВОЙ формы Dim s As String, sCap As String Dim bShowHide As Boolean s = CurrentDb.Name 'Полный Путь к аппликации 'Проверяем расширение аппликации что не *.mde и не *.accde s = Right(s, 3) Select Case s Case "mde", "cde" 'Работает ПОЛЬЗОВАТЕЛЬ bShowHide = False 'Скрыть sCap = " (Работает ПОЛЬЗОВАТЕЛЬ)" Case Else 'Работает РАЗРАБОТЧИК bShowHide = True sCap = " (Работает РАЗРАБОТЧИК)" End Select SetAppOptions bShowHide Me.Caption = Me.Caption & sCap End Sub
Я решил оформить ЭТО отдельным модулем, но можно разместить где угодно
Модуль:
'-------------------------------------------------------------------- ' Module : modAppProperties ' Author : es ' Date : 09.01.2013 ' Purpose : Работа со свойствами (внешним видом) приложения MS Access '-------------------------------------------------------------------- Option Compare Database Option Explicit Public Sub SetAppOptions_And_Reload(strStartUpForm As String, strAppName As String, strIconFile As String) 'es - 09.01.2013 ' Заготовка под изменение всевозможных свойств текущей БД ' Исполняем ЭТУ процедуру единожды для конкретной базы ' ПОСЛЕ ВЫПОЛНЕНИЯ этой процедуры требуеться перегрузить базу 'АРГУМЕНТЫ: ' strStartUpForm = Стартовая форма приложения ' strAppName = Заголовок Приложения ' strIconFile = Файл Иконки в папке приложения (без полн. пути) '-------------------------------------------------------------------- Dim str As String On Error GoTo SetAppOptions_And_Reload_Err '01 'Иконка аппликации: str = CurrentProject.Path & "\" & strIconFile If Dir(str) <> "" Then 'Проверка физического наличия файла ChangeProperty "AppIcon", dbText, strIconFile Application.RefreshTitleBar End If '02 'Заголовок ChangeProperty "AppTitle", dbText, strAppName Application.RefreshTitleBar '03 'Назначаем форму запускаемую на старте приложения ChangeProperty "StartupForm", dbText, strStartUpForm 'ChangeProperty "StartupMenuBar", dbText, "Главное меню" 'ChangeProperty "AllowBuiltinToolbars", dbBoolean, False 'ChangeProperty "AllowFullMenus", dbBoolean, False 'ChangeProperty "AllowBreakIntoCode", dbBoolean, False '-------------------------------------------------------------------- 'ТУТ - Не трогаем (ПОКА), без особой надобности 'ChangeProperty "AllowSpecialKeys", dbBoolean, False ' Спец комбинацци (F11, CTRL+BREAK, . ) 'ChangeProperty "AllowBypassKey", dbBoolean, False ' Запуск с шифтом [Shift] '-------------------------------------------------------------------- '04 'Отменить отслеживание изменения имён вместе с их автокоррекцией ChangeProperty "Track name AutoCorrect info", dbBoolean, False 'ChangeProperty "Perform name AutoCorrect", dbBoolean, False 'ChangeProperty "Log name AutoCorrect changes", dbBoolean, False '05 ' Не показывать окно базы на старте = Display Navigation Pane ChangeProperty "StartUpShowDBWindow", dbBoolean, False ' Статус бар можно туда же . НО! - если собираетесь его использовать - тогда оставьте ' ChangeProperty "StartupShowStatusBar", dbBoolean, False '06 'Отключаем окна в панели задач (свойство MSA 2003) ' ChangeProperty "ShowWindowsInTaskbar", dbBoolean, False '07 'Использовать перекрывающиеся окна (Overlapping Windows) = ON ChangeProperty "UseMDIMode", dbInteger, 1 ' Если СВОЙСТВО = Использовать перекрывающиеся окна (Overlapping Windows) = Off То: ' ChangeProperty "ShowDocumentTabs", dbBoolean, True 'Табы документов '08 'Использовать иконку приложения для Форм и Отчётов ChangeProperty "UseAppIconForFrmRpt", dbBoolean, True '09 - Остальное With Application ' Статус бар '.SetOption "Show Status Bar", False '.SetOption "Show Startup dialog box", False '.SetOption "Show New object shortcuts", False 'Поля отчётов '.SetOption "Left Margin", 0.5 '.SetOption "Right Margin", 0.5 '.SetOption "Top Margin", 1 '.SetOption "Bottom Margin", 1 'Только если установлены звуки MSO '.SetOption "Provide Feedback with sound", True 'Отменить отслеживание изменения имён вместе с их автокоррекцией '.SetOption "Track name AutoCorrect info", False '.SetOption "Perform name AutoCorrect", False '.SetOption "Log name AutoCorrect changes", False '.SetOption "Default find/replace behavior", 1 '.SetOption "Confirm Record changes", False '.SetOption "Confirm Document deletions", False '.SetOption "Confirm Action Queries", False '.SetOption "Show Values Limit", 1000 '= 1000 по умолч '.SetOption "Move after enter", False '.SetOption "Behavior entering field", 0 '.SetOption "Arrow Key Behavior", 0 '.SetOption "Cursor Stops At First/Last Field", True '.SetOption "Enable DDE Refresh", True '.SetOption "Refresh Interval (Sec)", 60 '.SetOption "Default Open Mode for Databases", 1 '.SetOption "Default Record Locking", 2 '.SetOption "Use Row Level Locking", True End With '10 'Дальше - Свойство CustomRibbonID = "StartUpRibbon" ' если USysRibbons заполнена ' ChangeProperty "CustomRibbonID", dbText, "StartUpRibbon" 'Перезагрузка базы If MsgBox("Изменения вступят в силу только после перезагрузки БАЗЫ ДАННЫХ!" & vbCrLf & _ "Выйти из приложения?", vbInformation + vbOKCancel) = vbOK Then Application.Quit End If SetAppOptions_And_Reload_Bye: Exit Sub SetAppOptions_And_Reload_Err: MsgBox "Error " & Err.Number & vbCrLf & Err.Description & vbCrLf & _ "in procedure SetAppOptions_And_Reload", vbCritical, "Error!" Resume SetAppOptions_And_Reload_Bye End Sub Public Sub SetAppOptions(Optional bShow As Boolean = False) ' es - 09.01.2013 ' Убирает или показывает на экране "Ненужности" в зависимости от параметра ' с учётом версии приложения '-------------------------------------------------------------------- ' АРГУМЕНТЫ: ' bShow = Показать (True) или Скрыть элементы '-------------------------------------------------------------------- Dim iAppVer As Integer Dim iToolbarYesNo As Integer '-------------------------------------------------------------------- On Error GoTo SetAppOptions_Err 'Версия MS Access iAppVer = CCur(Mid(Application.Version, 1, 2)) '-------------------------------------------------------------------- ' Скрываем - показываем Toolbar-ы ' Syntax: DoCmd.ShowToolbar(ToolbarName, Show) ' Где Show: ' acToolbarNo (2) Скрыть. ' acToolbarWhereApprop (1) Display the toolbar while in the appropriate view. ' acToolbarYes (0) Показать. '-------------------------------------------------------------------- If bShow = False Then iToolbarYesNo = acToolbarNo '=2 - Скрываем Else iToolbarYesNo = acToolbarYes '=0 - Отображаем End If 'Для версий MSA 2003 - 2007 и выше If iAppVer > 11 Then 'Версия MS Access 2007 и выше (не 2003) 'Скрываем - Отображаем ленту "Ribbon" DoCmd.ShowToolbar "Ribbon", iToolbarYesNo Else 'Версия MS Access = 2003 или ниже 'Скрываем тулбары CommandBars.Item("Menu Bar").Enabled = bShow DoCmd.ShowToolbar "Menu Bar", iToolbarYesNo DoCmd.ShowToolbar "Database", iToolbarYesNo DoCmd.ShowToolbar "Web", acToolbarNo 'или acToolbarWhereApprop 'БАР печати можно и оставить . 'DoCmd.ShowToolbar "Formatting (Form/Report)", iToolbarYesNo DoCmd.ShowToolbar "Form View", iToolbarYesNo End If 'Строка состояния: ' - Можно показать в любой момент: Application.SetOption "Show Status Bar", True Application.SetOption "Show Status Bar", bShow ' откл/вкл строку состояния SetAppOptions_Bye: Exit Sub SetAppOptions_Err: MsgBox "Error " & Err.Number & vbCrLf & Err.Description & vbCrLf & _ "in procedure SetAppOptions", vbCritical, "Error!" Resume SetAppOptions_Bye End Sub Private Function ChangeProperty(strPropName As String, iPropType As Integer, varPropValue As Variant) As Integer 'Просто замена свойства базы данных. 'Если заданное свойство отсутствует - функция создаст его '-------------------------------------------------------------------- Dim dbs As Database, prp As Property Const conPropNotFoundError = 3270 Set dbs = CurrentDb If Len(varPropValue & "") = 0 Then On Error Resume Next dbs.Properties.Delete strPropName Err.Clear GoTo ChangeProperty_Bye End If On Error GoTo ChangeProperty_Err dbs.Properties(strPropName) = varPropValue ChangeProperty = True Change_Bye: Exit Function Change_Err: If Err = conPropNotFoundError Then ' Свойство не найдено. Set prp = dbs.CreateProperty(strPropName, iPropType, varPropValue) dbs.Properties.Append prp Resume Next Else ' Неизвестная ошибка. ChangeProperty = False Resume Change_Bye End If End Function Private Sub Print_In_Immediate_CurrentDB_Properties() 'es - 27.12.2012 'Вывод в Immediate Window списка всех свойств (Properties) теущей БД ' Показать Immediate Window: [Ctrl + G] '-------------------------------------------------------------------- Dim dbs As Database, prp As Property Dim v As Variant Debug.Print "---------------------------------------------------" Set dbs = CurrentDb For Each prp In dbs.Properties v = Null On Error Resume Next v = prp.Value Err.Clear Debug.Print prp.Name & " = " & v Next Debug.Print "---------------------------------------------------" Set prp = Nothing Set dbs = Nothing End Sub
В примере кнопка:
«Задать Базовые Параметры (+ Перегруз Базы)»
Выполняет следующий код:
Const strStartUpForm As String = "00OnStart" 'Имя аппликации: Const strAppName As String = "Пример v001" Const strIconFile As String = "Application.ico" 'Устанавливаем: SetAppOptions_And_Reload strStartUpForm, strAppName, strIconFile
После перезапуска базы увидим:
— Появилась Иконка и Заголовок
— Экран за формой чист .

Поле нажатия на кнопку: «Показать Ненужное»

То же самое под MSA 2010:


Кстати:
Windows 7 (и выше) — отображают в панели задач не заданную иконку аппликации, а иконку MS Access
Вот простейшее решение:
01. Создаём ярлык на аппликацию:
02. В поле «Объект» вместо:
«D:\Temp\AppProperties MSA2003\AppProperties MSA2003 v001.mdb»
Пишем всё вмете (с путём к MSACCESS.EXE) типа:
«C:\Program Files\Microsoft Office\Office14\MSACCESS.EXE» «D:\Temp\AppProperties MSA2003\AppProperties MSA2003 v001.mdb»
03. У Ярлыка задаём иконку какую надо.
04. Сохраняем и запускаем.
Иконка будет заданной.

На рисунке, обе иконки = аппликации MS Access
MSA-2007 ( 411 kB) Пример
Access 2007
Сразу под окном Project находится окно Properties (свойства), отображающее параметры выделенного в данный момент в окне Project элемента, которые можно изменять. В нижней части окна находится окно Immediate (отладка) — средство быстрого тестирования, позволяющее выполнить код до помещения его в вашу БД. Все остальное свободное пространство используется для отображения файлов с программным кодом, после того, как вы создали их. Эта область первоначально пуста. В следующих разделах вы узнаете самый простой способ создания фрагмента программногокода. 1. Сначала вы создадите новый модуль, являющийся контейнером, в который помещается код. 2. Затем в этом модуле вы напишите процедуру с простейшим кодом. 3. Наконец, вы выполните ваш код, чтобы посмотреть на него в действии. Когда с этим будет покончено, вы узнаете, как код можно включить в формы и отчеты, которые уже есть в вашей БД. (Именно здесь начнется самое интересное.) Добавление нового модуля Обычно вы будете создавать программные процедуры, которые присоединяются к формам и запускаются, когда возникают определенные события (см. разд. «Присоединение макросов к формам» главы 15). Но в этой главе не будем спешить и создадим самостоятельную процедуру, которая запускается по вашему требованию. Прежде всего, нужно добавить новый модуль для вашего кода. В меню редактора Visual Basic выберите команды Insert → Module (Вставка → Модуль). На рис. 16.2 показан результат. Когда добавляется новый модуль, редактор Visual Basic автоматически открывает окно с кодом, отображающее содержимое данного модуля. (Если в вашей БД несколько модулей, можно открыть нужный вам модуль двойным щелчком мышью его имени в окне Project.) Первоначально у новоиспеченного модуля одна строка кода, которая выглядит следующим образом:Option Compare Database Это инструкция, определяющая, как с помощью языка Visual Basic обработать операции сравнения текстовых фрагментов. Исходно у языка Visual Basic есть собственные правила обработки текста, но приведенный оператор требует вместо них использовать установочные параметры программы Access. Параметры Access зависят от локализации текущей БД (например, использует ли ваша версия ОС Windows язык Английский (США) (U.S. English) или Японский иероглифический шрифт (Japanese kanji script)). Окончательный результат приведенной строки кода — возможность для англоязычных пользователей применять сравнения без различения строчных и прописных букв. Это означает, что слово «помадка» считается равной слову «пОмАдкА», что аналогично способу обработки текста программой Access при написании вами запросов. Прежде чем вы начнете писать код, который действительно выполняет какие-то действия, следует в начало вашего кода добавить еще одну инструкцию. Сразу после (или до) строки Option Compare Database вставьте следующую строку: Option Explicit
Эта инструкция заставляет Visual Basic применять более строгую проверку ошибок, способную выявлять часто встречающиеся ошибки при использовании переменных (см. разд. «Хранение информации в переменных» главы 17). Рис. 16.2. Когда ваш проект включает хотя бы один модуль, окно Project отображает группу Modules. Программа Access присваивает новым модулям невыразительные имена, например, Module1 , Module2 и т. д. Для задания чего-то более осмысленного, выделите модуль в окне Project и в окне Properties, расположенном сразу под ним, измените свойство Name. DataCleanupCode (код очистки данных) — подходящее имя для модуля Подсказка Вы можете потребовать от Visual Basic автоматически добавлять строку Option Explicit во все новые файлы с кодом. Для этого выберите Tools → Options (Сервис → Параметры), установите флажок Require Variable Declarations (требовать объявления переменных) и затем щелкните мышью кнопку ОК. Специалисты Access всегда применяют эту установку. Как и в случае других объектов БД Access, при закрытии редактора Visual Basic программа Access напоминает о необходимости сохранить вновь созданные модули. Если вы не хотите ждать так долго, выберите последовательность команд File → Save [DatabaseName] (Файл → Сохранить [ИмяБазыДанных], где [DatabaseName] — имя файла вашей БД). Примечание После того как модуль сохранен, его можно увидеть в области переходов окна программы Access. Если используется режим отображения Таблицы и связанные представления, ваш
модуль выводится в категории Несвязанные объекты, если применяется режим вывода Тип объекта, модуль появляется в категории Модули. Если модуль в области переходов щелкнуть дважды кнопкой мыши, программа Access откроет его в редакторе Visual Basic. Написание процедуры с простейшим программным кодом Внутри всех модулей (за исключением пустых) находится одна или несколько процедур на языке Visual Basic. Процедура — это именованный блок кода, выполняющий определенную задачу. В языке VB процедуры начинаются словом Sub, за которым следует имя процедуры. Завершаются процедуры оператором End Sub. Далее приведен пример процедуры, которая названа довольно неоригинально MyCodeRoutine: Sub MyCodeRoutine () ‘ Здесь располагается ваш код EndSub Этот маленький фрагмент кода на VB иллюстрирует два важных правила. Во-первых, он показывает, как начинать и заканчивать любую процедуру (с помощью операторов Sub и End Sub). В этом коде также показано, как создавать комментарии. Комментарии — это специальные операторы, которые программа Access полностью игнорирует. Они не что иное, как заметки для вас самих (например, объяснение на обычном английском (или русском), что на самом деле делает следующая или предыдущая строка кода). Для создания комментария в начало строки вставляется знак апострофа ( ‘ ). Подсказка Редактор Visual Basic отображает все комментарии зеленым цветом, поэтому легко отличить код от комментариев. Сейчас процедура MyCodeRoutine ничего не выполняет. Для того чтобы сделать ее посообразительнее, следует добавить операторы кода между Sub и End Sub. Следующая чрезвычайно простая процедура отображает поле сообщения: Sub MyCodeRoutine ( ) ‘ Следующий оператор отображает поле сообщения MsgBox «Свидетельство силы моего кода.» End Sub Этот код действует, потому что язык Visual Basic включает команду, названную MsgBox. (См. примечание «Малоизвестная или недооцененная возможность. Справка по Visual Basic» далее в этом разделе для получения рекомендаций по применению команд, которые есть в вашем распоряжении.) Эта команда применяется для вывода на экран стандартного окна с выбранным вами сообщением. Само сообщение — это текстовый фрагмент (или строка на языке программистов), который как все текстовые значения в языке VB должен быть заключен в кавычки. Таким образом, программа Access знает, где он начинается и где заканчивается. (Access заставляет вас применять те же правила, что и при использовании текста в выражении.) Как только вы ввели эту команду (начинайте — действуйте!), вы готовы к выполнению вашей программной процедуры. Для этого поместите курсор где-нибудь внутри тела процедуры, это дает знать редактору Visual Basic, какой код вас интересует. Затем на панели
инструментов Visual Basic щелкните мышью кнопку Run (Выполнить) (которая выглядит как кнопка воспроизведения на панели управления видеомагнитофона), или в меню выберите Run → Run Sub/UserForm (Выполнить → Выполнить процедуру/пользовательскую форму). На рис. 16.3 показан результат. Рис. 16.3. Вашу первую программную процедуру нельзя назвать ужасно полезной, но она доказывает, что вы знаете достаточно для того, чтобы написать строку кода и выполнить ее Программа Access выполняет код процедуры построчно, от начала до конца. Когда вы выводите MsgBox, выполнение кода приостанавливается до тех пор, пока вы не щелкните мышью кнопку ОК в окне сообщения, в этот момент выполнение кода продолжится до завершения процедуры. П РИМЕЧАНИЕ Помните о том, что программа Access считает код VB потенциально опасным, поэтому не выполняет его в ненадежной БД. Иначе говоря, если вы увидите предупреждение системы безопасности (см. разд. «Как Access обрабатывает опасные макросы» главы 15), следует щелкнуть мышью кнопку Параметры для отображения диалогового окна Параметры безопасности Microsoft Office, выбрать переключатель Включить это содержимое и затем щелкнуть мышью кнопку ОК. Или можете создать надежное расположение для файлов вашей БД. В разд. «Задание надежного расположения» главы 15 приводится подробное описание. Малоизвестная или недооцененная возможность. Справка по Visual Basic Язык Visual Basic набит таинственными командами вроде MsgBox. Вы познакомитесь со многими из них в этой главе и следующей, но для углубленного изучения всех команд нужно запустить справку Access. Далее описано, как это сделать. 1. В меню редактора Visual Basic выберите последовательность команд Help → Справка: Microsoft Visual Basic (Справка → Справка языка Microsoft Visual Basic) 1 . 2. Вы увидите список ссылок, обещающих рассказать вам больше о языке VB. 3. Щелкните кнопкой мыши Visual Basic for Applications Language Reference (Руководство по языку Visual Basic для приложений). 4. На экране появятся дополнительные темы, касающиеся многочисленных подробностей VB. 5. Щелкните кнопкой мыши Visual Basic Language Reference (Руководство по языку Visual Basic), чтобы проникнуть глубже.
1 Справкаприводитсянаанглийском языке.— Пер.
6. Теперь вы увидите темы, касающиеся непосредственно языка VB. Эти основы относятся к версии Visual Basic в любой программе пакета Office. 7. Щелкните мышью строку Functions (Функции), чтобы увидеть команды Visual Basic, включая MsgBox. (Щелкните кнопкой мыши любую функцию для отображения страницы с подробной справкой об этой функции.) Справка программы Access — замечательный способ узнать больше о Visual Basic, но после того, как вы познакомились с основными элементами языка. Если вы углубитесь в ее изучение слишком быстро, то можете обнаружить, что объяснения так же прозрачны, как суп из протертого гороха. Но когда вы закончите работу с примерами кода, приведенными в данной книге, вы будете достаточно подготовлены к ее использованию и пополнению ваших знаний. Помещение кода в форму Непосредственное выполнение процедуры слегка неудобно. Явно запустить макрос, по крайней мере, можно из области переходов или с помощью удобной кнопки на ленте (см. разд. «Запуск макроса» главы 15). Ни один из этих вариантов не предусмотрен для кода VB. Вместо этого необходимо открыть редактор Visual Basic, выбрать подходящий модуль, перейти к нужной процедуре и затем щелкнуть кнопкой мыши команду Run (Выполнить). В реальной жизни никто так не поступает, поскольку это слишком трудоемко. К счастью, есть лучший способ. Можно поместить код в форму и затем выполнять его автоматически, когда происходит что-то важное. В следующих разделах объясняется, как это делается. Реакция на событие формы Вместо запуска программных процедур прямо из редактора, поклонники Access связывают их с событиями формы так же, как вы делали это с макросами. Далее описано, как воспользоваться этой возможностью. 1. Откройте форму в Конструкторе. Самый быстрый способ — щелкнуть форму в области переходов правой кнопкой мыши и выбрать Конструктор (Design View). 2. Добавьте новую кнопку. Для этого выберите на ленте Инструменты конструктора форм | Конструктор → Элементы управления → Кнопка (Forms Tools | Design → Controls → Button) и затем нарисуйте кнопку в рабочей области формы. 3. Когда запустится Мастер кнопок, нажмите клавишу
5. В Окне свойств выберите вкладку Другие (Other), а на ней свойство Имя (Name) для того, чтобы задать кнопке подходящее имя. Программа Access использует имя кнопки для именования процедуры для вашей кнопки. Гораздо легче запомнить, что делает кнопка CommitOrder_Click (щелчок для подтверждения заказа), чем кнопка Command42_Click (щелчок для выполнения команды42). Сейчас также подходящее время задать текст, отображаемый на кнопке (свойство Подпись (Caption)), если это еще не сделано. 6. В Окне свойств выберите вкладку События (Event) и выделите событие Нажатие кнопки (On Click). Когда вы щелкните кнопкой мыши внутри поля Событие (Event), в нем появится направленная вниз стрелка. 7. Щелкните кнопкой мыши направленную вниз стрелку, расположенную рядом с событием Нажатие кнопки, а затем выберите строку [Процедура обработки событий] ([EventProcedure]). Этот шаг сообщает программе Access о том, что вы вместо макроса предоставите код VB для обработки события. 8. В поле события Нажатие кнопки щелкните мышью кнопку с многоточием (. ) Этот шаг открывает редактор Visual Basic и создает программную процедуру для вашей кнопки. Если процедура уже создана, программа Access переходит к имеющемуся коду, и, таким образом, его можно редактировать. Когда код вставляется в форму впервые, программа Access создает для этой формы новый модуль. Этот модуль именуется с использованием имени формы и помещается в окне Project в специальную группу, называемую Microsoft Office Access Class Objects (объекты классов Microsoft Office Access) (рис. 16.4). Если в ту же форму вставляется дополнительный код независимо от того, относится он к тому же элементу управления или к другому, Access включает новую процедуру в существующий для этой формы модуль. Подсказка Модули форм не выводятся в области переходов. Если они нуждаются в редактировании, следует открыть редактор Visual Basic и затем в окне Project дважды щелкнуть кнопкой мыши нужный модуль. Или же можно открыть соответствующую форму, выбрать нужное событие и использовать кнопку с многоточием для перехода прямо в интересующую вас программную процедуру. Когда выполняются описанные действия, программа Access не создает новый модуль, а вставляет новую пустую процедуру для вашего события. Если ваша кнопка названа ButtonOfPower (кнопка запуска), вы увидите код, похожий на приведенный далее: Private Sub ButtonOfPower_Click() End Sub Эта процедура похожа на процедуру, созданную раньше, но с двумя отличиями. ■ Она начинается со слова Private. Это слово гарантирует невозможность использования данной процедуры другими модулями. Данная процедура доступна только в форме, содержащей кнопку. (Если не указать слово Private, будет применяться стандартный режим доступа, называемый Public, и ваша программная процедура станет общедоступной.)
В большинстве случаев выбор режима доступа не важен, но Private считается более предпочтительным. Ее имя соответствует формату [ИмяЭлементаУправления]_[ИмяСобытия]. Например, приведенная ранее процедура относится к событию Нажатие кнопки (On Click) кнопки с именем ButtonOfPower. Рис. 16.4. Модуль для формы всегда именуется Form_[FormName]. Вы видите модуль для формы, названной OneButtonForm (однокнопочная форма) Примечание Постойте, разве событие не называется On Click? Сохраняя все принятые соглашения в силе, язык Visual Basic, в отличие от разработчика форм в программе Access, применяет немного иное правило именования событий. Он отбрасывает предлог «On» и все имеющиеся пробелы, таким образом, событие On Click (нажатие кнопки) становится событием Click. Лучше всего не волноваться по поводу расхождения имен и предоставить возможность программе Access сформировать правильные имена для ваших процедур. Для того чтобы проверить вашу процедуру, нужно добавить в нее код. Пока вы познакомились лишь с одной командой, поэтому попробуйте применить ее для вывода сообщения: Private Sub ButtonOfPower_Click( ) MsgBox «Вы щелкнули мышью кнопку ButtonOfPower.» End Sub
Теперь вернитесь к форме и щелкните вашу кнопку мышью. Вы должны увидеть сообщение, показанное на рис. 16.5, оно означает, что ваш код уловил событие и успешно на него отреагировал. Подсказка Во время редактирования модуля нет необходимости сохранять его. Можно спокойно переходить между окном кода и формой, отображенной в окне программы Access, туда и обратно для проверки каждого вносимого в код изменения. Рис. 16.5. События обеспечивают автоматическое выполнение программного кода. В данном случае, если щелкнуть мышью кнопку ButtonOfPower, Access тут же отобразит сообщение Если позже вы уберете с формы кнопку ButtonOfPower, программа Access не удалит программный код. Он останется на прежнем месте, но будет неактивен. Это удобно, если в программном коде есть что-то полезное, что впоследствии, возможно, вы захотите применить где-нибудь еще. (В данном случае вас выручат операции вырезания и вставки.) Но если это просто фрагмент старого кода, при первой же возможности воспользуйтесь редактором Visual Basic для удаления процедуры. Для тех кто понимает. Как код связывается с событиями Все дело в имени — в имени процедуры. Когда вы открываете форму, в которой есть соответствующий программный код , программа Access ищет процедуры с определенными именами.
Если она находит процедуру, названную MyButton Click, то, прежде всего, проверяет элемент управления с именем MyButton и наличие у него события с именем Click (нажатие кнопки). Если обе детали обнаружены, эта программная процедура становится обработчиком данного события, что на своеобразном жаргоне программистов означает связывание вашего кода с событием. Когда возникает событие (например, когда кнопку щелкнули мышью), Access выполняет код из вашей процедуры. Если программа Access находит процедуру, названную MyButton_Click, а на форме нет элемента управления с именем MyButton, не стоит паниковать. Access просто предполагает, что вы создали процедуру для собственных внутренних нужд. Поскольку эта процедура не является обработчиком события, программа Access не запускает ее автоматически в ответ на возникновение события. Но она все же при необходимости может обращаться к вашему коду, как описано на этой странице. У описанной системы два возможных камня преткновения. Во-первых, не меняйте имя обработчика события по своему усмотрению — если вы сделаете это, разорвется связь между формой и программным кодом, и обработчик события не будет выполняться, когда событие произойдет. Во-вторых, не меняйте имя элемента управления с помощью Окна свойств, поскольку это действие тоже разорвет связь. Если же на самом деле нужно исправить неудачное имя, убедитесь в том, что вы изменили имя процедуры так, что оно соответствует новому имени элемента управления. В обоих случаях (при переименовании процедуры или элемента управления) Access не предупреждает о возможных последствиях. Поэтому помните эти рекомендации, чтобы избежать нежелательных неожиданностей. Вызов кода в модуле Полученные знания могут вызвать вопрос: в каких ситуациях вообще может возникнуть необходимость в создании стандартного модуля вручную? Помимо всего прочего нет удобного способа выполнения программного кода и возможности связать его с событием элемента управления на форме. Стандартные модули полезны, если создан удивительно удачный фрагмент программного кода, который хочется применять в разных местах. Скажем, вы разработали отличную процедуру поиска и хотели бы использовать ее в двух, трех или четырех десятках различных форм. Этот код можно вырезать и вставить во все процедуры, которые в нем нуждаются. Помимо того, что дублирование кода — всегда плохой выбор (как и дублирование данных). Почему? Подумайте, что произойдет, если вам придется исправлять ошибку или вносить корректировку. Из-за дублирующегося кода придется найти все его копии и повторить в них одно и то же изменение. Это надежный способ потратить свои выходные дни. Правильное решение — взять вашу полезную, многоразовую процедуру и поместить ее в модуль. Затем вы можете вызвать ее, когда понадобится, и редактировать ее только один раз, когда необходимо обновить процедуру или устранить ошибку. Для вызова программной процедуры в другом модуле используется имя модуля с последующей точкой ( . ), за которой указывается имя процедуры. Вот пример: Private Sub ButtonOfPower_Click( ) MyModule.MyCodeRoutine End Sub
Option compare database в access что это
Всем привет! В этой статье я расскажу как сделать информационное сообщение при изменении данных в базе Access.
Как сделать информационное сообщение при изменении данных в базе Access
По умолчанию, когда пользователь вводит или редактирует данные с помощью формы, программа Microsoft Access автоматически сохраняет любые внесенные изменения в таблицах, так как поля формы напрямую связаны с полями соответствующей таблицы. Если пользователь закроет форму или создаст новую запись, все внесенные ранее изменения также автоматически сохраняются. Согласитесь, было бы удобно организовать работу следующим образом: пользователь открывает форму, вносит или изменяет данные. Если он закрывает форму или переходит к новой записи, система выводит информационное сообщение: «Сохранить внесенные изменения?» Если он не вносит изменения, то, соответственно, информационное сообщение не появляется. Также для удобства работы на форме можно создать кнопку «Сохранить». Данная кнопка будет неактивна при запуске самой формы. Как только будут внесены изменения, кнопка «Сохранить» становится активной.
Как это работает?
Откроем любую форму, на которой расположены кнопки «Сохранить», «Новая запись» и «Выход». Кнопка «Сохранить» не доступна.

Внесем изменение в поле «Цена» (350 вместо 250). Кнопка «Сохранить» становится доступной.

Если нажать кнопку «Сохранить», изменения сохранятся, кнопка «Сохранить» станет вновь недоступна. Если создать новую запись или выйти из формы, никаких информационных сообщений не появляется.

Поменяем теперь код бренда на «Красота от природы».

Нажмем кнопку «Выход».

Если нажать «Да», внесенные изменения сохранятся, форма закроется. Если нажать «Нет», код бренда снова станет «Кислородная линия», форма закроется.
Как это сделать?
Шаг 1. Создание формы
Для того, чтобы понять как сделать информационное сообщение при изменении данных в базе Access, необходимо создать простейшую форму. Я буду использовать форму, созданную в базе данных Косметическая продукция.

Если вы не знаете как создать формы в базе данных Access, то посмотрите видео ниже.

Шаг 2. Добавление кнопки «Сохранить»
Переходим в конструктор форм, на панели инструментов нам понадобится инструмент «Кнопка».

Мастер создания кнопок не нужен, нажимаем кнопку «Отмена».

Щелкаем по созданной кнопке и набираем текст «Сохранить».

Далее дважды щелкаем по кнопке, чтобы открыть окно свойств. Переходим на вкладку «Данные», пункт «Доступ» — ставим «Нет».

Переходим на вкладку «Другие» и задаем имя кнопки «cmdSave»

Шаг 3. Вставка VBA-кода на событие «Внесены изменения»
Переходим в свойства формы, вкладка «Событие», пункт «Внесены изменения». Нажимаем кнопку с тремя точками, выбираем пункт «Программы».

VBA код:
Private Sub Form_Dirty(Cancel As Integer) Me.cmdSave.Enabled = True End Sub
При загрузке формы кнопка cmdSave недоступна (см. Шаг 2) (значение свойства Enabled равно False). Как только пользователь вносит или изменяет данные срабатывает событие формы «Внесены изменения» и кнопка cmdSave становится доступа (значение Enabled меняется на True).
Шаг 4. Создание булевой переменной
Для отслеживания статуса кнопки «Сохранить» (нажата кнопка или нет) создадим переменную Saved с помощью оператора Private. Для этого вставим строку Private Saved As Boolean под строкой Option Compare Database в самом верху экрана.

Шаг 5. Вставка VBA-кода на событие «Нажатие кнопки»
Дважды щелкаем по кнопке «Сохранить», переходим в окно свойств, вкладка «Событие», пункт «Нажатие кнопки». Нажимаем кнопку с тремя точками, выбираем пункт «Программы».

VBA код:
Private Sub cmdSave_Click() Saved = True DoCmd.RunCommand (acCmdSaveRecord) Me.cmdSave.Enabled = False Saved = False End Sub
Если мы внесли изменения, кнопка cmdSave становится доступна (шаг 3). Когда мы нажимаем кнопку «Сохранить», булевая переменная Saved (шаг 4) получает значение True (т.е. кнопка cmdSave нажата), происходит сохранение изменений, после этого кнопка cmdSave становится снова недоступной, а переменная Saved получает значение False до тех пор пока снова не будет нажать кнопка «Сохранить».
Шаг 6. Вставка VBA-кода на событие «До обновления»
Переходим в свойства формы, вкладка «Событие», пункт «До обновления». Нажимаем кнопку с тремя точками, выбираем пункт «Программы».

VBA код:
Private Sub Form_BeforeUpdate(Cancel As Integer) Dim Response As Integer If Saved = False Then Response = MsgBox("Сохранить внесенные изменения?", vbYesNo, "Сохранить изменения?") If Response = vbNo Then Me.Undo End If Me.cmdSave.Enabled = False End If End Sub
Событие До обновления (BeforeUpdate) возникает при любом изменении данных в записи или элементе управления. Если пользователь нажмет кнопки «Новая запись» или «Выход», не кликнув перед этим на кнопку «Сохранить», то появится информационное окно «Сохранить изменения?» (MsgBox(«Сохранить внесенные изменения?», vbYesNo, «Сохранить изменения?»)). Если пользователь нажмет «ДА», то все внесенные изменения сохраняются. Если пользователь нажмет «НЕТ», произойдет отмена всех изменений (Me.Undo). Далее кнопка cmdSave снова станет не доступна независимо от того, нажал пользователь «Да» или нажал «Нет» (Me.cmdSave.Enabled = False).

В данной статье мы разобрали как сделать информационное сообщение при изменении данных в базе Access.