пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Сортировка и фильтрация записей в технологии ODBC.

Часто при работе с базой данных требуется изменить порядок, в котором записи отображаются на экране, или же осуществить поиск записей, удовлетворяющих определенному критерию. Существующие в MFC классы работы с базами данных ODBC располагают методами, позволяющими сортировать выбранные записи по любому из их полей. Кроме того, вызов определенных методов этих классов предоставит возможность ограничить набор отображаемых записей только такими, поля которых содержат указанную информацию, например конкретное имя или идентификатор. Данная операция называется фильтрацией. В этом разделе мы добавим функции сортировки и фильтрации в приложение Employee. Выполните следующие действия.

Анализ функции OnSortFirstName(). Все функции сортировки имеют одинаковую структуру. Они закрывают выборку данных, устанавливают свои переменныe-члены m_strSort в выборке и снова открывают выборку данных, а затем вызывают функцию UpdateData() для обновления окна представления данными из вновь полученной отсортированной выборки данных. Однако в тексте функций сортировки вы не найдете ни одного вызова функции, в названии которой было бы слово Sort. Когда же в таком случае выполняется сортировка? Она выполняется, когда выборка данных открывается заново.

Объект класса CRecordSet (как и объект любого другого класса, производного от CRecordSet, например объект класса CDBSet в этой программе) использует специальную строковую переменную m_strSort для определения способа упорядочения записей. Объект анализирует эту строковую переменную при формировании выборки данных и соответственно упорядочивает выбранные из базы записи.

Анализ функции DoFilter(). Всякий раз, когда пользователь выбирает команду из меню Filter, управляющая программа вызывает соответствующий этой команде метод: OnFi lterDept(), OnFilterUserlD(), OnFiIterMiddleName() или OnFilterEMail(). Каждая из этих функций ничего не делает, кроме вызова метода DoFilter(), передавая ему в качестве параметра строковую переменную, определяющую поле, по которому требуется выполнить фильтрацию.

Функция DoFilter() независимо от того, какая именно команда была выбрана в меню, всегда отображает одно и то же диалоговое окно. Если значение result не равно IDOK, значит, пользователь выполнил щелчок на кнопке Cancel и весь оператор IF пропускается, а функции DoFilter() остается только закончить свою работу.

Внутри конструкции IF прежде всего создается строковая переменная, которая будет использоваться для фильтрации записей базы данных. Строковая переменная применяется для выполнения фильтрации записей так же, как это происходит при сортировке. В данном случае строковая переменная называется m_strFiIter. Строка, которая используется для фильтрации записей базы данных, должна иметь следующий формат:

 

ИдентификаторПоля = Значение

 

Здесь ИдентификаторПоля является аргументом типа CString функции DoFiIter(), а Значение вводится пользователем в диалоговом окне. Например, если пользователь выберет команду фильтрации по полю отдела и введет в диалоговом окне значение фильтра hardware, функция DoFiIteг() должна будет создать строку.

Сформировав указанную строку, программа будет готова к выполнению фильтрации записей. Для этого, как и в случае сортировки, выборка данных должна быть закрыта, а затем, при ее повторном открытии, функция DoFilter() выполнит формирование выборки данных с учетом требуемой фильтрации.

Что произойдет, если в результате работы установленного фильтра не будет выбрано ни одной записи? Хороший вопрос. Функция DoFilter() обнаруживает подобную ситуацию, подсчитывая количество записей в создаваемой выборке и сравнивая затем это число с нулем. Если набор записей пуст, программа выводит окно сообщения, информирующее пользователя о сложившейся ситуации. Затем программа закрывает выборку, присваивает строковой переменной фильтра пустое значение и снова открывает выборку записей. Таким образом восстанавливается выборка, включающая все записи таблицы User.

И, наконец, независимо от того, удалось ли обнаружить записи, отвечающие заданному фильтру, или же выборка данных включает всю базу данных, программа должна заново отобразить данные на экране. Для этого вызывается функция UpdateData().


18.01.2020; 20:41
хиты: 66
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь