А.Ю. Гончаров Access 2003 (960524), страница 25
Текст из файла (страница 25)
Назовем это поле СообДОК. Никакихдополнительных свойств пока задавать не будем, но сделаем это поле достаточнодлинным, чтобы в нем уместилась фраза. Теперь для поля надо создать функцию,которая будет управлять значением поля. Вот ее листинг:Function SoobData(PoleDat As String, PoleFlag As String, PoleSoob As String)As StringDimDimDimSetPData As ControlFlag As CheckBoxSoob As TextBoxPData = Forms!Форма1.Controls(PoleDat)Формы139Set Flag - Forms!<k)pMa1.Controls(PoleFlag)Set Soob = Forms!Формат.Controls(PoleSoob)SoobData Soob.ForeColor ~ vbBlackIf (Mot Flag) And PData > tt1/1/198Qtt ThenSelect Case Date - PDataCase 1 To 3SoobData = "Меньше З дней"Soob,ForeColor = RGB(0, 80, 0)Case 0SoobData = "Сегодня"Soob.ForeColor = vbBlueCase Is < 0SoobData - "Просрочено"Soob. ForeColor = vbReciCase ElseSoobData =Soob.ForeColor = vbBlackEnd SelectEnd IfEnd FunctionУ этой функции три аргумента, которыми являются имена созданных полей.Поэтому функцию можно использовать и для д р у г и х трех полей такого типа.С помощью операторов Dim и Set происходит передача аргументов функции.Предполагается, что функция будет использоваться в форме с именем Форма!.Оператор If позволяет функции работать, если флажок сброшен и дата введена.Сама функция реализована с помощью блока Select .,.
End Select (стандартнаяконструкция Visual Basic). В зависимости от разницы в днях между указанной датой и текущей датой (Select Case Date - Pdata) функция возвращает одну из фраз.NBDate — это системная переменная, хранящая текущую дату. Разностьмежду текущей и указанной датой положительна, если указанная дата предшествует текущей.Одновременно меняется цвет шрифта (свойство ForeColor) поля, которое соответствует объектной переменной Soob.Глава 6Функцию надо поместить в модуль. Выберите команду Сервис => Макрос ^>Редактор Visual Basic.
Щелкните название базы данных на левой панели редактора и выберите из контекстного меню команду Insert Module. Появится окномодуля (имя первого модуля обычно Модуль!), в котором и надо вставить тексттакой функции.Теперь для поля СообДОК можно определить источник данных. В окнесвойств в строке Данные надо вписать следующее выражение:=ЗооЬОаГа("ДатаОкончания";"ДОК";"СообДОК")В принципе форма уже будет работать, и это можно проверить, но реакция наизменение данных в полях окажется недостаточно быстрой.
Необходимы ещекоманды обновления формы. Например, в окне свойств поля ДОК на вкладкеСобытия надо определить такие события, как После обновления и Нажатиекнопки. Для этого необходимо воспользоваться кнопкой с тремя точками и выбрать опцию «Программы». В заготовку подпрограммы надо вписать единственную команду Me.Refresh (обновить текущую форму). Например, для первогособытия функция будет выглядеть так:Private Sub flOK_AfterUpdate(}Me.RefreshEnd SubДля поля ДатаОконнания можно определить свойства После обновления и Потеря фокуса.На этом создание компьютерного «узелка на память» заканчивается.
Созданные поля являются «свободными» (unbound), поэтому данный пример будет работать, если ввести в поле дату и щелкнуть флажок. После закрытия формыданные не сохранятся. В реальном проекте эти поля должны быть привязанык данным из таблицы. Вид полей показан на рис. 6.13.Выполнено IДата:23-ЯНВ-20СМРис. 6.13. Поля в формеfjменьше 3 днейФормы14)СпискиВ Access существует две разновидности списков как элементов управления:«Список» и «Поле со списком». Рассмотрим работу с ними на примере поля сосписком в базе данных «Борей». Для создания этого элемента в форме надо выполнить следующую последовательность действий:1.В режиме конструктора формы нажмите кнопку Поле со списком и нарисуйтемышью прямоугольник - место будущего списка.
Запустится мастер полей сосписком.2. На первом шаге мастера установите переключатель в положение «поле со списком будет использовать значения из таблицы или запроса»;3. На втором шаге мастера укажите необходимую таблицу или запрос. Выберемтаблицу Поставщики.4. На третьем шаге мастера задайте поля таблицы. Выберем поля: КодПоставщика,Должность и ОбращатьсяК. Порядок выбора полей определяет порядок следования их в списке, когда последний раскрывается в форме.5.
На четвертом шаге мастера можно выбрать режим сортировки. Выберем КодПоставщика.6. На пятом шаге мастера настройте ширину колонок списка. Мастер предложитскрыть ключевой столбец (КодПоставщика). Это разумное решение, согласимсяс мастером.7. На шестом шаге мастера необходимо задать подпись для поля со списком.Я выбрал подпись «Поставщик».8.
После того как мастер закончит работу, необходимо задать обязательные свойства списка. Высоту рамки списка целесообразно выбрать равной высоте строки в форме. На рис. 6.14 показана форма со списком в режиме конструктора.Г"орма2 : форма, , . , . , .2 , i . j . i . 4 • i - 5 • i • e • i • 7 • i • e • i • э • i •* Область данныхТоВШИС^Посi «Cec бодиь»V"•1Рис.
6.14. Поле со списком в режиме конструктора142Глава 6Раскрыв контекстное меню, относящееся к списку, выберем команду Свойства и посмотрим, какое имя программа дала списку. Имена назначаются гак, чтобы избежать повторений. Например, у меня список был назван ПолеСоСпискомО.Затем на вкладке Макет найдем свойство Заглавия столбцов. По умолчаниютам стоит «Нет», то есть заголовки не выводятся. Установим это свойство как«Да», потому что списки, состоящие из нескольких столбцов, лучше смотрятся,когда у последних есть заголовки.
Затем выберем вкладку События. Она предназначена для создания подпрограмм, которые позволят списку нормально функционировать. Выберем строку Нажатие кнопки. Ясно, что в приложениидолжно что-нибудь происходить, когда пользователь раскроет список и щелкнетмышью один из его элементов. Поэтому для такого события надо предусмотретьреакцию системы. Справа от строки свойства имеется кнопка с тремя точками,которая позволяет раскрыть окно модуля (окно построителя) для редактированияподпрограмм. Щелкнем эту кнопку и выберем опцию «Программы».
Доработаемпроцедуру обработки события так, чтобы она приняла следующий вид:Private Sub ПолеСоСпискомО_СПс1<()MsgBox "Из списка выбрано:" & ПолеСоСпискомОEna SubВ дальнейшем при выборе элемента списка будет раскрываться окно сообщения. Далее закройте окно, в котором вы вводили код.Форма с раскрытым списком показана на рис. 6.15. Напомню, что для реальной работы с формой вы должны выйти из режима конструктора. Поработав сосписком, можно убедиться в том^ что полю списка и переменной ПолеСоСпискомОприсваивается значение поля КодПоставщика, соответствующее выбранному элементу списка.
В реальной программе в качестве элементов списка лучше использовать текстовые поля — с ними удобнее работать.Л Форма? ': форма.,,ПоставщикЗапись: Q-Г] 1 |ДельностьМенеджер по скупкамКоординаторПредставительГлавный менеджер"" Специалист по экспортуГлавный менеджер53Э@_ _^(Обращаться клВероника Кудрявцев;Shell в у BurkeRegda MurphyYcshi MagaseAntonio del Valle SeavsIan De'i'lingРис. 6.15.
Поле со списком в режиме просмотраvФормы143Есть несколько способов организовать выбор данных в списке. Во-первых, можно отредактировать свойство списка Источник строк (на вкладке Данные) Оносодержит инструкцию SQL для отбора записей. В нашем примере она такова:SELECT Поставщики.КодПоставщика, Поставщики,Должность, Поставщики.ОбращатьсяКFROM Поставщики ORDER BY [КодПоставщика];Изменить указанное свойство удобнее всего, запустив построитель запросовпри помощи кнопки, расположенной прямо в строке.
Допустим, мы хотим отбирать строки для списка по значению поля Должность. Для этого в запросе, в колонке, соответствующей этому полю, надо указать критерий в строке «Условияотбора». Например, чтобы в поле показывались только должности, в название которых входит слово «менеджер»:Like "•'менеджер*"Окно построителя запросов с введенным условием показано на рис.
6.16- В результате инструкция SQL приобретет следующий вид:SELECT Поставщики.КодПоставщика, Поставщики Должность, Поставщики.Обраща~ьсяКFROM Поставщики WHERE (((Поставщики.Должность) Like "«менеджер*")) ORDER BYПоставщики.КодПоставщика;Как видим, в инструкцию, определяющую источник строк, для списка добавилась опция WHERE, которая определяет условие отбора записей из таблицы:.J^ Инструкция SQl- : построитель запросови,..i*• !* :U'[ЮмЛостаещ.НазваниеОбращаться); Должность v-V;<; -^ПопеИмя таблицыСортировкаВывод на s к panУсловие отбораКодПоставщикаПоставщикипо возрастаниюJДолжностьПоставщики-<\»_{ОбращатьсяКПоставщики'.,J\Like "Менеджер"илиV< !Рис.
6.16. Построитель запросов для списка>]144Глава 6У этого способа есть недостаток - отсутствие универсальности. Можно заменить в запросе указанное выражение (Like...) на значение параметра:[Название должности]Квадратные скобки обязательны, иначе программа воспримет слово как текстовую константу.
Имя параметра не должно совпадать с именем какого-либо поля. Кроме того, это имя должно быть достаточно понятным пользователю.потому что оно будет играть роль подсказки. Теперь при попытке раскрыть список программа будет выводить на экран окно для ввода параметра, показанное нарис. 6.17. Задав то или иное значение (в нашем случае «Директор»), пользовательобеспечит выполнение фильтрации в списке.