Порядок выполнения работы




 
 

К форме, созданной на лабораторной работе №1, добавить кнопки “Сортировка”, “Выборка” и текстовое окно, в котором будут задаваться параметры выборки.

 

1. Сделать сортировку по возрастанию или по убыванию для любого выбранного Вами поля.

2. Сделать выборку для любого поля. Параметры выборки задавайте в текстовом поле.

Если Вы хотите выбирать записи по указанному шаблону, то используйте предикат Like:

Data1.RecordSource = "SELECT * FROM Publishers WHERE [Name] Like '" & Text1.Text & "*'"

Однако, оператор Like может сыграть с вами злую шутку. Если, например, у Вас имеется поле (допустим, счетчик, значение которого со временем возрастает), например, "Код магазина", то со временем оно увеличится и будет содержать числа от 1 до 200, тогда при задании в текстовом окне кода 1 в конечном результате у вас отобразятся все записи у которых "Код магазина" = 11, 12, 13, 14, 15, 16, 17, 18, 19, и начиная с 100 по 199, т.к. "*" в операторе Like будет позволять делать выбор любого количества символов после обязательной цифры 1. Также будет и со строковыми полями: если поле будет содержать слова - артель, арт, артиллерия, то при выборе слова "арт" в конечном результате у вас отобразятся все записи, которые содержат в себе первые три буквы - "арт".

Теперь вы наверно видите, что не удобно вручную вводить какой-то текст для выборки (во-первых, он должен быть перед глазами, во-вторых, при вводе возможно ошибиться). Чтобы избежать этого неудобства сделаем так, чтобы записи выбранного вами поля появлялись в списке (например, ComboBox или ListBox) и для выбора на запрос можно было бы выбрать запись оттуда.

Для этого добавим в форму элемент ComboBox и еще одну кнопку, при нажатии на которую в список ComboBox будут добавляться записи из поля “Name” (в единственном экземпляре). В процедуре Command3_Click() указываем источник записей, из которого будем добавлять их в список ComboBox:

Data1.RecordSource = "SELECT DISTINCT [Name] FROM Publishers" (не забудьте после этой команды обновить базу).

А потом в цикле добавляем в список данные из поля Name:

Do While Not Data1.Recordset.EOF

Combo1.AddItem Data1.Recordset.Fields("Name")

Data1.Recordset.MoveNext

Loop

 
 

Элемент Data1 можно сделать невидимым (в его свойствах установить visible false).

После того, как список добавлен в ComboBox, выбираем интересующую нас запись и нажимаем Enter. Чтобы работала эта часть программы, в процедуре обработки нажатия кнопки Private Sub Combo1_KeyPress(KeyAscii As Integer) надо проверить нажата ли клавиша «Enter»:

If KeyAscii = 13 Then

и если да, то сделать выборку только тех записей, которые соответствуют Combo1.Text:

Data1.RecordSource = "SELECT * FROM Publishers WHERE [Name] = '" & Combo1.Text & "' "

после этого, как всегда, обновить базу:

Data1.Refresh

 

Однако, программа была бы более универсальна, если бы мы не привязывались к одному полю для выборки, а могли выбирать сначала поле, а потом уже запись в этом поле. Например, для той же таблицы Publishers из базы Biblio.mdb сначала выбрать поле ("Name", "City", "State", или какое-то другое), а в выбранном поле уже выбирать запись.

Чтобы преобразовать программу:

1. Добавим в форму элемент ListBox (хотя можете поставить еще один ComboBox), в котором будет список полей таблицы.

2. В процедуру обработки «клика» кнопки «Выборка» будем заносить в список ListBox имена полей из таблицы "Publishers" (кнопку можно назвать как-то по-другому, например «Вывод в таблицу», т.к. она будет осуществлять не только выборку, но и вывод в таблицу Grid всех записей из таблицы "Publishers", а так же и добавление полей в список ListBox)

Dim i As Integer

Data1.RecordSource = "Publishers"

Data1.Refresh

List1.Clear

For i = 0 To Data1.Recordset.Fields.Count - 1

List1.AddItem Data1.Recordset.Fields(i).Name

Next

3. В разделе декларации переменных объявите переменную iListIndex Option Explicit:

Dim iListIndex As Integer

Эта переменная будет принимать значения индекса выбранной вами в ListBox записи (имя поля в таблице).

Кстати, всегда в разделе декларации устанавливайте Option Explicit. Это предотвратит вас от ошибок связанных с недекларированными переменными.

4. В процедуру Form_Load() вставьте код инициализации переменной iListIndex

Private Sub Form_Load()

iListIndex = -1

End Sub

5. В процедуру List1_Click() вставьте следующий код:

Private Sub List1_Click()

iListIndex = List1.ListIndex

End Sub

5. Вместо кнопки «Выбрать из списка» сделаем кнопку «Зафиксируйте выбранное поле», при нажатии на которую в список ComboBox будут добавляться записи из поля, выбранного в списке ListBox. Для неё вставьте следующий код:

If iListIndex <> -1 Then 'когда еще не осуществлен выбор необходимой вам записи в

ListBox (имя поля в таблице)

'Конструкция If...Then....End If предотвратит вас от появления ошибки при нажатии на эту кнопку.

Data1.RecordSource = "SELECT DISTINCT [" & List1.List(List1.ListIndex) & "] FROM Publishers"

Data1.Refresh

Combo1.Clear

Do While Not Data2.Recordset.EOF

Combo1.AddItem Data1.Recordset.Fields(List1.List(iListIndex))

Data1.Recordset.MoveNext

Loop

End If

End Sub

Окончательный вариант формы:

 
 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: