Федеральное агентство по образованию
федеральное государственное образовательное учреждение
Тольяттинский политехнический колледж
МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ
К практической работе №21
по дисциплине «Пакеты прикладных программ»
2008
“Утверждаю”
Заместитель директора по
учебной работе ТПК _________________
“__”_______________ 200__ г.
Одобрено ПЦК по
специальности «Информатика и ВТ»
Зав. ПЦК_________
Методические указания составлены в соответствии с рабочей программой по дисциплине «Пакеты прикладных программ» Специальности 230105 «Программное обеспечение вычислительной техники и АС», утвержденной зам. Директора по учебной работе
Составитель: .
Преподаватель специальных и общеобразовательных дисциплин Тольяттинского политехнического колледжа.
Рецензент:
Методические указания к выполнению практической работы
Работа с простыми и комбинированными списками.
Краткие теоретические сведения
Access обладает возможностью формирования списков и поддерживает различные способы их заполнения. Однако, во многих случаях, такой подход ограничивает содержимое списков. Иногда требуется большая гибкость, позволяющая при необходимости изменять содержимое списков «на лету».
Списковые элементы имеют два общих свойства, которыми можно манипулировать программным способом и управлять содержимым списков.
Тип источника строк (Row Source Type).
В этом свойстве определяется, что будет служить источником данных списка: таблица, запрос и пр.
Источник строк(Row Source)
@ Если тип установлен в значение Таблица или Запрос, в свойстве Источник строк следует задать имя таблицы или запроса либо выражение SQL.
@ Если тип установлен в значение Cписок значений, в параметре Источник строк в явном виде этот список должен быть указан.
@ Если тип установлен в значение Список полей, Источник строк снова должен быть таблицей, запросом или выражением SQL.
Простой элемент с фильтрованным списком
1. Открыть форму Employees в режиме конструктора
2. Перейти к заголовку формы и вставить в него элемент комбинированного списка (Рис. 1)
3. Присвойте ему имя cboFilter и задайте имя - Искать

Рис 1. Форма Employees в режиме конструктора
4. После этого откройте модуль формы и для события Открытие формы введите следующий фрагмент:
Private Sub Form_Open(Cancel As Integer)
cboFilter. RowSourceType = "Table/Query"
cboFilter. RowSource = "Employees"
End Sub
5. Перейдите в режим формы и откройте список нового элемента (Рис.2). По умолчанию в комбинированном списке отображается только один столбец из источника данных - первый

Рис.2 Комбинированный список
6. Для отображения нужного количества столбцов следует добавить строки:
Private Sub Form_Open(Cancel As Integer)
cboFilter. RowSourceType = "Table/Query"
cboFilter. RowSource = "Employees"
cboFilter. ColumnCount = 3
cboFilter. ColumnWidths = "0"
End Sub
7. Снова перейдите в режим формы (рис. 3). Теперь при обращении к элементу откроется список сотрудников.

Рис. 3 Комбинированный список с нужными данными
8. Для вывода информации о выбранном сотруднике нужно добавить процедуру обработки события выбора элемента в списке, т. е. обратиться к событию Нажатие кнопки(Click).
9. В модуле формы выберите cboFilter, а в списке процедур пункт Click (Рис. 4)

Рис. 4 Выбор элементов в списке объектов
10. Внутри макета процедуры введите следующие строки:
Private Sub cboFilter_Click()
Dim strSQL As String
strSQL = "SELECT * FROM Employees " & _
"WHERE EmployeeID = " & cboFilter. Column(0)
Debug. Print strSQL
Forms! Employees. RecordSource = strSQL
End Sub
11. Откройте форму и выберите фамилию в комбинированном списке. При этом в форме автоматически отобразится информация о данном сотруднике.
Добавление и не добавление в список.
Элементы комбинированных списков обладают одним свойством, которого лишены обычные списки. В прикрепленном к ним текстовом поле можно ввести некоторое значение, отсутствующее в списке.
Ввод отсутствующего в списке значения инициирует событие Отсутствие в списке(NotInList). По умолчанию в ответ на это событие ничего не происходит. Данное событие имеет два аргумента: NewData(Новые данные) и Response(Отклик), которые можно использовать для добавления значений в список программным способом.
Аргумент NewData равен введенному в текстовое поле комбинированного списка значению. Аргумент Response задает способ обработки события и может быть равен следующим встроенным константам: acDataErrAdded – введенное значение добавлено в список элемента комбинированного списка acDataErrorDisplay – значение принято по умолчанию и отображает системное сообщение об ошибке данных. Это значение следует использовать, когда вы не желаете предоставлять право пользователю право ввода дополнительных значений acDataErrorContinue – перед пользователем отображается введенное сообщение. Как правило, пользователя спрашивают, не намерен ли он добавить в список новое значение.Обновление списка значений
В качестве примера создадим свободный элемент простого списка. Откройте новую пустую форму в режиме конструктора и добавьте в нее поле со списком.
Присвойте элементу имя cboColors и измените подпись на Цвета. Установите свойство Тип источника строк в значение Список Значений. Введите в свойстве Источник строк следующую строку:Красный;Белый;Синий
Сохраните форму и откройте ее в режиме формы (Рис. 5) Теперь введите цвет Желтый в текстовой части поля со списком. Программа Access позволит вам это сделать, однако в результате этого новый цвет в список добавлен не будет
Рис. 5 Простой комбинированный список
Для добавления в список нового пункта прейдите в режим конструктора формы и измените значение свойства Ограничится списком (Limit to List) в Да(Yes) Перейдите к событию Отсутствие в списке (On not in list) и установите в нем значение [Процедура обработки событий]. Щелкните на кнопке с тремя точками в этой строке – откроется модуль формы. Дополните процедуру обработки события следующим текстом:Private Sub cboColors_NotInList(NewData As String, Response As Integer)
Dim bytResponse As Byte
bytResponse = MsgBox("Вы хотите добавить " & _
cboColors. Text & " в список?", vbYesNo)
If bytResponse = vbYes Then
Response = acDataErrAdded
cboColors. RowSource = Me! cboColors. RowSource _
& ";" & NewData
Else
Response = acDataErrContinue
Me! cboColors. Undo
End If
End Sub
Вернитесь в форму и снова попробуйте ввести слово Желтый. Список элементов поля со списком модифицируется (Рис.6). Открыв окно свойств этого элемента вы увидите, что и значение свойства Источник строк изменилось и также содержит желтый цвет.

Рис.6 Добавление элемента в список
Обновление списка при связи с таблицей или запросом.
Создайте новую таблицу с именем Colors и всего одним текстовым полем – также Colors. Создайте три записи и введите в них значения: Красный, Белый и Синий. Создайте на основе этой таблицы новую форму (Рис. 7)
Рис. 7 Образец формы
В новую форму добавьте поле со списком и присвойте ему имя cboBound Установите Источник строк в таблицу Colors Установите свойство Источник строк в следующую строку, которая является запросом на языке SQL (рис. 8)SELECT DISTINCT Colors FROM Colors ORDER BY Colors

Рис. 8 Обновление списка при связи с таблицей или с запросом
Это выражение (SELECT DISTINCT Colors FROM Colors ORDER BY Colors) извлекает из таблицы Colors уникальные значения поля Colors и присваивает их полю со списком.
Однако, новая запись не сразу будет добавлена в список, для этого снова потребуется открыть форму.
Для отслеживания момента пополнения таблицы данными потребуется процедура VBA.
Откройте форму в режиме конструктора и в событие После обновления установите значение [Процедура обработки событий]. Щелкните на кнопке с тремя точками и введите следующий фрагмент программы:Private Sub cboBound_AfterUpdate()
*****nCommand acCmdSaveRecord
cboBound. Requery
End Sub
Перейдите в режим формы и убедитесь, что новый элемент сразу добавляется в списокСписок также можно подгрузить из несвязанного источника данных. Это будет гарантией того, что исходные данные не будут изменены случайно.
Вставьте новый комбинированный список в форму первого примера. Присвойте этому элементу имя cboUnbound и подпись Свободное поле и введите в его свойстве Источник строк запрос:SELECT DISTINCT Colors FROM Colors ORDER BY Colors
После этого установите значение свойства Ограничится списком в Да Не выходя из режима конструктора, для элемента cboUnbound для события Отсутствие в списке установите значение [Процедура обработки событий] Вызовите окно модуля формы и введите следующую процедуру:Private Sub cboUnbound_NotInList(NewData As String, Response As Integer)
Dim cnn As New ADODB. Connection
Dim strSQL As String
Dim bytResponse As Byte
Set cnn = CurrentProject. Connection
bytResponse = MsgBox("Вы хотите добавить новый элемент " _
& "в список?", vbYesNo, "Обнаружен новый элемент")
If bytResponse = vbYes Then
strSQL = "INSERT INTO Colors(Colors) VALUES('" _
& NewData & "')"
Debug. Print strSQL
cnn. Execute strSQL
Response = acDataErrAdded
ElseIf bytResponse = vbNo Then
Response = acDataErrContinue
Me! cboUnbound. Undo
End If
End Sub
Перейдите в режим формы и добавьте в список новый цвет(Рис. 9). Причем, если вы откроете таблицу Colors, то там вы также найдете запись о новом цвете
Рис. 9 Обновление содержимого комбинированного списка


