Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Удаление, добавление и редактирование записей в технологии ADO




Для того чтобы реализовать возможности удаления, добавления и

редактирования, необходимо настроить свойства компонента Грид. Выполним такую последовательность действий. Вызовем меню “Properties” элемента Грид. Перейдём на закладку “Control”. Поставим пометки напротив следующих свойств: AllowAddNew, AllowDelete,AllowUpdate Теперь перейдём к настройке свойств элемента Адо. Для этого вызовем меню “Properties” элемента Адо, в котором выберем закладку “All”. Теперь установим значения некоторых свойств:

“Cursor Locations” на “2-Use server cursor”

“Cursor Type” на “1-Keyset Cursor Type”

Теперь, после запуска приложения, переместимся в ячейку, которую хотим редактировать. Отредактируем её. Для подтверждения изменений, сделанных в ячейке,необходимо убрать фокус, например, нажатием клавиши “Enter”. Для добавления новой записи необходимо переместиться в самую нижнюю строку элемента Грид и добавить данные. После завершения заполнения этой строки данными и перемещения фокуса на другую строку к элементу Грид автоматически добавляется ещё одна строка, которая располагается ниже текущей. Удаление записей производится следующим образом. Для удаления нужной строки необходимо щелкнуть мышью по заголовку строки, таким образом выделив целую строку. После этого, при нажатии клавиши “Delete” на клавиатуре, происходит удаление выбранной строки

 

 

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

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

1)Добавьте меню Sort (Сортировка) в основное меню приложения. Предоставьте VS автоматически определить идентификаторы команд.

2)С помощью мастера ClassWizard организуйте в классе CEmployeeView перехват четырех новых команд сортировки, используя имена функций, предложенные этим мастером. Окончательный вид окна ClassWizard показан.

3)Добавьте меню Filter (Фильтрация) в строку меню приложения. Предоставьте Visual Studio установить идентификаторы команд.

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

Выберите команду InsertResource и создайте новое диалоговое окно, сделав двойной щелчок на элементе Dialоg, а затем отредакт-те диал.окно. Присвойте элементу упр-я — текстовому полю — идентификатор ID_FILTERVALUE.

5) Оставив новое диал.окно раскрытым на экране, запустите мастер ClassWizard. Раскроется диал.окно Adding a Class установите опцию Create a new class и щелкните на кнопке ОК.

6)Раскроется диал.окно New Class. В поле Name введите значение CFilterDlg.

7)В окне мастера ClassWizard щелкните на корешке вкладки Member Variables. Свяжите элемент упр-я IDC_FILTERVALUE с переменной-членом m_filterValue. Завершите работу с мастером ClassWizard, щелкнув на кнопке ОК.

 

Теперь, когда меню и диал.окна уже созданы и связаны с заготовками ф-ций, необх-мо добавить в эти заготовки опред-й программ-й код. На панели ClassView сделайте двойной щелчок на функции OnSortDepartment(), а затем отредактируйте ее текст.

Также и для всех.

В начало EmployeeView.cpp, после уже имеющихся директив #include,добавьте следующую строку: #include "FilterDlg.h"

Отредактируйте текст функций OnFilter…….

Все эти четыре ф-ции выз-т ф-цию DoFilter(). Далее необх-мо будет написать эту ф-цию, выполн-ю фильтрацию записей БД, представл-х в классе выборки данных. На панели ClassView щелкните правой кнопкой мыши на классе CEmployeeView и выберите в раскрывшемся контекстном меню команду Add Member Function. Укажите в раскрывшемся диалоговом окне тип функции void и введите ее объявление как DoFilter(CString col). Данный метод должен быть защищенным, так как он выз-ся только другими методами этого же класса CEmployeeView. На панели ClassView сделайте двойной щелчок на функции DoFilter() и поместитев нее текст программы.

Теперь можно сортировать записи по любому полю, для чего достаточно просто выбрать имя поля в меню Sort. Кроме того, появилась возможность задать фильтрацию отображаемых записей, выбрав имя требуемого поля в меню Filter, а затем введя значение фильтра в раскрывшемся диалоговом окне Filter.

Анализ функции OnSort()

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

Объект класса CRecordset исп-т спец-ю строковую переменную m_strSort для опред-я способа упорядоч-я записей. Объект анализ-т эту строковую переем-ю при формир-и выборки данных и соответственно упорядочивает выбранные из базы записи.

Анализ функции DoFilter()

Всякий раз, когда польз-ль выбирает команду из меню Filter, управляющая прог-ма вызывает соотв-й этой команде метод: OnFilterDept(), OnFilterID(), OnFilterName() или OnFilterRate(). Каждая из этих ф-ций ничего не делает, кроме вызова лок-го метода DoFilter(), передавая ему в кач-ве парам-ра строковую перем-ю, опред-ю поле, по кот-му треб-ся вып-ть фильтрацию.

Функция DoFilter() всегда отображает одно и то же диал.окно, создавая экземпляр объекта класса диалогового окна и вызывая его метод DoModal().

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

Внутри конструкции if прежде всего создается строковая перем-я, кот-я будет использ-ся для фильтрации записей БД. Строковая перем-я примен-ся для вып-я фильтрации записей так же, как это происходит при сорт-ке. В данном случае строковая перем-я наз-ся m_strFilter. Строка, кот-я исп-ся для фильтрации записей БД, д.иметь след. формат: ИдентификаторПоля = Значение

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

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

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

 

 

Настройка Эл-тов упр-ния ADO Data Control и DataGrid Control из кода приложения










Последнее изменение этой страницы: 2018-04-12; просмотров: 318.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...