Лабораторные работы по СУБД
1 1 1 1 1 1 1 1 1 1 Рейтинг 0.00 (0 Голоса)

Лабораторная работа по теме: Объектная модель доступа к данным DAO.

Цель: Ознакомиться с возможностями элемента управления TreeView по представлению информации в иерархическом виде. Научиться согласовывать информацию в элементе управления TreeView и подчиненных формах.

Условие задания:

Создать форму КлиентыПоСтранам, позволяющую:

– отображать в иерархическом виде названия клиентов компании «Борей» с группировкой по странам, в которых они расположены;

– определять количество клиентов в каждой стране;

– отображать краткие сведения о клиентах в зависимости от выбранного уровня представления информации: все клиенты, клиенты из указанной страны;

– отображать полные сведения о выбранном клиенте.

Форма КлиентыПоСтранам в режиме Конструктор представлена на рис.1 и 2.

Форма в режиме Конструктор (активна вкладка tab_0)

Рис.1. Форма в режиме Конструктор (активна вкладка tab_0)

Форма в режиме Конструктор (активна вкладка tab_1)

Рис.2. Форма в режиме Конструктор (активна вкладка tab_1)

Спецификация элементов управления к рис.1 и 2


п/п

Элемент
управления

Название

Назначение

1

TreeView

TreeView1

Для представления информации в иерархическом виде

2

ImageList

ImageList1

Для хранения рисунков, использующихся в элементе управления TreeView1

3

Набор вкладок

tab_All

 

4

вкладка

tab_0

Для размещения подчиненной формы КлиентыПоСтранам_1

5

вкладка

tab_1

Для размещения подчиненной формы КлиентыПоСтранам_2

6

Подчиненная форма/отчет

КлиентыПоСтранам_1

Для отображения краткой информации о клиентах

7

Подчиненная форма/отчет

КлиентыПоСтранам_2

Для отображения полной информации о клиентах

Для программного доступа к элементам управления TreeView и ImageList необходимо подключить библиотеку C:\WINDOWS\system32\MSCOMCTL.OCX

Свойства элемента управления ImageList1 представлены на рис.3, 4

Свойства элемента управления TreeView и ImageList

Свойства элемента управления Набор вкладок tabAll представлены на рис.6

Свойства элемента управления Набор вкладок tabAllВыноска 3: Отключение
видимости
ярлыков
вкладок

Рис. 6

Форма КлиентыПоСтранам в режиме Формы представлена на рис.7, 8 и 9.

Фильтр – все клиенты

Рис.7. Фильтр – все клиенты

 Фильтр – клиенты из Германии

 Рис.8. Фильтр – клиенты из Германии

Фильтр – клиент Alfreds Futterkiste


Рис.9. Фильтр – клиент Alfreds Futterkiste

Примеры процедур обработки событий:

'-------------------------------------------------------------------------------

Option Compare Database

Option Explicit

Dim gf_strOldNodeIndex As Integer 'индекс активного узла

'-------------------------------------------------------------------------------

Private Sub Form_Open(Cancel As Integer)

If TreeView1_Output(TreeView1) Then

gf_strOldNodeIndex = 1

TreeView1_NodeClick (TreeView1.Nodes(gf_strOldNodeIndex))

Else

MsgBox "Произошла ошибка при построении списка клиентов", _

vbCritical, "Администратор"

End If

End Sub

'-------------------------------------------------------------------------------

Public Function TreeView1_Output(ctlTreeView As CustomControl) As Boolean

'пользовательская функция для построения списка клиентов

'в иерархическом виде с использованием элемента управления TreeView

On Error GoTo Err_TreeView1_Output

Dim db As Database

Dim rstRegion As DAO. Recordset

Dim rstClient As DAO. Recordset

Dim strKeyRoot As String

Dim strKey1 As String

Dim strKey2 As String

Dim nodX As Node

Set db = CurrentDb()

Set rstRegion=db. OpenRecordset("SELECT DISTINCT Страны. КодСтраны, Страны. Страна"_

& " FROM Страны" _

& " INNER JOIN Клиенты ON Страны. КодСтраны = Клиенты. КодСтраны" _

& " ORDER BY Страны. Страна", dbOpenSnapshot)

If rstRegion. RecordCount > 0 Then

'в таблице Страны имеется хоть одна запись

TreeView1.Nodes. Clear 'очистить дерево

strKeyRoot = "U"

Set nodX = ctlTreeView. Nodes. Add(, , strKeyRoot, "Все клиенты", 1)

With nodX

.ExpandedImage = 2

.Expanded = True

End With

Do While Not rstRegion. EOF

'формирование узлов с названиями стран

strKey1 = "R" & rstRegion! КодСтраны

Set nodX = ctlTreeView. Nodes. Add(strKeyRoot, tvwChild, strKey1, _

rstRegion! Страна, 3, 4)

nodX. Tag = rstRegion! КодСтраны

Set rstClient = db. OpenRecordset("SELECT КодКлиента, Название" _

& " FROM Клиенты WHERE КодСтраны=" & rstRegion! КодСтраны _

& " ORDER BY Название", dbOpenDynaset)

Do While Not rstClient. EOF

'формирование узлов с названиями клиентов

strKey2 = "K" & rstClient![КодКлиента]

Set nodX = ctlTreeView. Nodes. Add(strKey1, tvwChild, strKey2, _

rstClient! Название, 5, 6)

nodX. Tag = rstClient! КодКлиента

rstClient. MoveNext

Loop

'добавление в родительский узел количества клиентов

TreeView1.Nodes(TreeView1.Nodes(nodX. Index).Parent. Index).Text = _

TreeView1.Nodes(TreeView1.Nodes(nodX. Index).Parent. Index).Text _

& " (" & rstClient. RecordCount & ")"

rstClient. Close

rstRegion. MoveNext

Loop

'дерево построено успешно

TreeView1_Output = True

Else

'в таблице Страны нет записей

'дерево не построено

TreeView1_Output = False

End If

Exit_TreeView1_Output:

rstRegion. Close

db. Close

Set db = Nothing

Exit Function

Err_TreeView1_Output:

'дерево не построено

TreeView1_Output = False

Resume Exit_TreeView1_Output

End Function

'-------------------------------------------------------------------------------

Private Sub TreeView1_NodeClick(ByVal Node As Object)

'стандартная процедура обработки события выбор узла – NodeClick

On Error GoTo Err_TreeView1_NodeClick

If Not Node. Index = gf_strOldNodeIndex Then

'если узел не имел фокус, изменить критерии фильтрации

If Node. Key = "U" Then

'выделен корневой узел

tab_0.SetFocus 'передать фокус ввода вкладке tab_0

КлиентыПоСтранам_1.Form. FilterOn = False

ElseIf Node. Key Like "R*" Then

'выделен узел, соответствующий стране

tab_0.SetFocus 'передать фокус ввода вкладке tab_0

With КлиентыПоСтранам_1.Form

.Filter = "КодСтраны=" & Node. Tag

.FilterOn = True

End With

ElseIf Node. Key Like "K*" Then

'выделен узел, соответствующий клиенту

tab_1.SetFocus 'передать фокус ввода вкладке tab_1

With КлиентыПоСтранам_2.Form

.Filter = "КодКлиента=" & "'" & Node. Tag & "'"

.FilterOn = True

End With

End If

'запомнить индекс выделенного узла

gf_strOldNodeIndex = Node. Index

TreeView1.SetFocus

End If

Exit_TreeView1_NodeClick:

Exit Sub

Err_TreeView1_NodeClick:

Resume Exit_TreeView1_NodeClick

End Sub

Добавить комментарий


Защитный код
Обновить

По темам:

История Украины

Культурология

Высшая математика

Информатика

Охотоведение

Статистика

География

Военная наука

Английский язык

Генетика

Разное

Технологиеские темы

Украинский язык

Филология

Философия

Химия

Экология

Социология

Физическое воспитание

Растениевосдство

Педагогика

История

Психология

Религиоведение

Плодоводство

Экономические темы

Бухгалтерские темы

Маркетинг

Иностранные языки

Ветеринарная медицина

Технические темы

Землеустройство

Медицинские темы

Творчество

Лесное и парковое хозяйство

Агрономия

Преподавателям

Юридические темы

Google