
Пример 3
Function SQLSortFilter()
Dim db As Database, rst As RecordSet, strSQL As String
Set db As CurrentDB()
strSQL = "SELECT * FROM Фамилии
WHERE Отдел = 3 Order By Фамилия"
Set rst =db.OpenRecordSet(strSQL)
Do Until rst.Eof
Debug.Print rst!Фамилия
rst.MoveNext
Loop
End Function
Здесь также используется запрос на языке SQL для формирования объекта RecordSet. При этом сам запрос, а не переменная, указывающая на него, размещается на месте аргумента метода OpenRecordset. В запросе используются условие отбора записей (Отдел = 3) и сортировка записей по полю Фамилия в возрастающем порядке (Order By Фамилия). Пусть, например, таблица Фамилии имеет вид:
Код |
Отдел |
Фамилия |
1 |
2 |
Петухов |
2 |
3 |
Уточкин |
3 |
3 |
Гусаков |
В окне отладки появится сообщение: ? SQLSortFilter() Гусаков Уточкин
Пример 4
Function DAOSort()
Dim rst As RecordSet, rstSort As RecordSet, db As Database
Set db = DBEngine.WorkSpaces(0).Databases(0)
Set rst = db.OpenRecordset ("Фамилии",Db_Open_Dynaset)
rst.Sort = "Фамилия"
Set rstSort = rst.OpenRecordSet()
Debug.print "Неотсортированный список:"
Do until rst.Eof
Debug.Print rst!Фамилия
rst.MoveNext
Loop
Debug.Print "Сортировка по фамилии:"
Do Until rstSort.Eof
Debug.Print rstSort!Фамилия
RstSort.MoveNext
Loop
End Function
Запуск процедуры можно организовать с помощью кнопки на форме, имеющей свойство "Нажатие кнопки", равное выражению "=DaoSort()".
Набор данных rst в данном примере образуется на основе объекта Database. Метод OpenRecordSet в данном случае имеет 2 аргумента. Первый аргумент указывает на таблицу Фамилии, данные которой образуют набор Recordset. Второй аргумент - константа Db_Open_Dynaset - определяет набор как динамический.
Свойству набора Sort присваивается имя поля Фамилия, по которому производится сортировка в возрастающем порядке. Для осуществления сортировки создается второй набор strSort типа RecordSet на основе первого набора с учетом значения свойства Sort.
Если таблица Фамилии имеет всего один столбец, то можно, например, получить в окне отладки:
? DAOSort()
Неотсортированный список:
Овечкин
Козлов
Баранов
Сортировка по фамилии:
Баранов
Козлов
Овечкин
Пример 5
Sub Замена()
Dim db As Database, rst As RecordSet
Set db = DBEngine.WorkSpaces(0).Databases(0)
Set rst = db.OpenRecordset ("Расписание экзаменов", Db_Open_Table)
rst.Index = "Предмет"
rst.MoveFirst
Do Until rst.Eof
If rst![Название предмета] = "Информатика" Then
rst.Edit
rst![Название предмета] = "Информационные технологии"
rst.Update
End If
rst.MoveNext
Loop
rst.Close
End Sub
В данном примере используется набор данных rst табличного типа (при создании объекта RecordSet использована константа Db_Open_Table). Это позволяет использовать для упорядоченного просмотра таблицы "Расписание экзаменов" свойство Index. Этому свойству присваивается имя существующего индекса "Предмет". Заметим, что если нет подходящего готового индекса, его можно создать методом CreateIndex.
В цикле Do…Loop осуществляется редактирование записей.
После создания переменной, связанной с набором записей типа таблицы или динамического набора, можно изменять, удалять и добавлять новые записи. Процесс изменения существующей записи осуществляется в 4 этапа. Для этого необходимо:
переместиться на нужную запись;
применить метод Edit для подготовки текущей записи к изменению. Подготовка заключается в помещении записи в специальный буфер редактирования;
внести необходимые изменения в запись;
применить метод Update для сохранения изменений в текущей записи.
Если не применить метод Update, новые данные будут потеряны. Если не применить метод Edit перед попыткой изменить значение текущей записи, то произойдет ошибка стадии выполнения.
В результате выполнения процедуры Замена в таблице "Расписание экзаменов" название предмета "Информатика" будет заменено на "Информационные технологии".