Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Методические указания. Для построения данного приложения выполним приведенную ниже последовательность действий




Для построения данного приложения выполним приведенную ниже последовательность действий. Создадим заготовку программы по шаблону, как указано в прил. 5 лабораторного практикума «Визуальные средства разработки приложений» [2], с небольшими изменениями: для выбора OLE DB в качестве объекта доступа к данным на шаге 2 в диалоге Database Options в группе переключателей Data Source выберем переключатель OLE DB, после чего кнопка с надписью Select OLE DB Data source станет активной. Теперь нажмём на эту кнопку. В результате появится окошко Data Link Properties ( рис.1.1).

 

 

 

Рис.1.1. Диалог выбора провайдера ODBC драйвера

Затем нажимаем кнопку Next, что переводит нас на закладку Connection. Теперь в элементе “Use data source name” выбираем источник данных (в нашем примере это база данных с именем test)(рис. 1.2).

 

Рис.1.2. Выбор источника данных

После этого в п. 3 “Enter the initial catalog to use ” выбираем абсолютный путь к источнику данных. Затем нажимаем кнопку “Test Connection”. В результате этого при успешном соединении с источником данных на экран выводится сообщение (рис. 1.3).

Рис. 1.3. Сообщение об успешном тестировании подсоединения к источнику данных

Для разграничения доступа при обращении к источнику данных необходимо перейти на закладку “Advanced”, где в графе “Access permissions” следует выбрать соответствующие права доступа. В нашем случае выберем: Read/Write (Чтение/Запись), как показано на рис. 1.4.

 

Рис.1.4. Назначение прав доступа на работу с источником данных

После нажатия на кнопку “Ok” переходим вновь к диалогу “Database options”. После подтверждения, теперь уже в диалоге “Database options”, на экране появляется диалог “Select Database Table”, в котором мы выбираем имя таблицы, с которой хотим работать (в нашем примере это test_table) (рис.1.5).

 

 

Рис. 1.5. Диалог выбора таблицы в источнике данных

 

Последующие шаги можно сразу же пропустить, нажав кнопку “Finish”.

После этого мастер AppWizard автоматически генерирует классы, содержащие методы, с помощью которых мы можем работать с нашей базой данных.

Теперь займёмся построением графического интерфейса. Расположим элементы управления типа Edit Box и Button, так как показано на рис.1.6.

 

 

 

Рис. 1.6. Расположение элементов управления на форме

 

Зададим размеры окна нашего приложения в классе CMainFrame (функция PreCreateWindow). Для этого перед строкой “return TRUE;” добавляем запись из двух строк:

cs.cx = 315;

cs.cy = 195;

Теперь для позиционирования курсора в источнике данных в классе СMy_oledbView создадим метод displayMembersOfDataSourse()

oid COledbView::displayMembersOfDataSourse()

{

CString str;

str.Format("%d ",m_pSet->m_id_table); //форматирование

//визуальное отображение данных

m_edit_id.SetWindowText(str);

str = m_pSet->m_name_table;

m_edit_name.SetWindowText(str);

}

Функция Format() позволяет преобразовать данные разных типов в объект класса CString. В нашем случае это позволит преобразовать целочисленные данные из источника данных в строковые. Функция SetWindowText() выводит в элементы EditBox содержимое текущей позиции курсора источника данных. m_pSet является указателем, генерируемым AppWizard, на объект класса COledbSet, через который реализуется связь нашего приложения с базой данных.

Теперь в ClassWizard необходимо создать переменные на наши элементы управления типа EditBox. После добавления закладка “Member Variables” в диалоге ClassWizard должна выглядеть, как показано на рис. 1.7.

 

Рис. 1.7. Вид закладки “Member Variables” после создания переменных на элементы управления

 

Теперь перейдём к описанию модулей для работы с курсором источника данных.

Для этого необходимо переопределить стандартные методы, используемые элементами навигации, расположенными в элементе управления Toolbar.

Таким образом, загружаем ClassWizard, переходим на закладку Message Maps, отыскиваем группу идентификаторов, отвечающих за навигацию по записям источника данных(ID_RECORD_FIRST, ID_RECORD_LAST, ID_RECORD_NEXT, ID_RECORD_PREV), и создаём обработчики.

Рассмотрим подробно создание обработчика для идентификатора ID_RECORD_ FIRST. Для этого после выбора мышью в окне Object IDs идентификатора ID_RECORD_ FIRST в окне Messages выберем COMMAND. После этого нажмём кнопку “Add Functions”. В результате этого появится диалог с предложением создать метод с именем OnRecordFirst (рис. 1.8).

 

Рис. 1.8. Диалог определения имени метода OnRecordFirst

Оставляем предлагаемое название, для чего нажмём кнопку “Ok”. После этого нажмём кнопку “Edit Сode ” и перейдём к редактированию метода. Таким образом, в тело метода OnRecordFirst() нам необходимо добавить строки

void COledbView::OnRecordFirst()

{

m_pSet->MoveFirst();//переход на первую позицию

displayMembersOfDataSourse();

}

Функция MoveFirst() перемещает курсор источника данных на первую позицию (т.е. на первую запись), а следующий за ней вызов метода displayMembersOfDataSourse() приводит к отображению данных в элементах EditBox.

В результате добавления обработчиков на все кнопки навигации мы должны получить следующий код в классе CMy_oledbView:

 

void COledbView::OnRecordNext() {

m_pSet->MoveNext();//переход на следующую позицию источника данных

displayMembersOfDataSourse();}

void COledbView::OnRecordPrev() {

m_pSet->MovePrev();//переход на предыдущию позицию источника данных

displayMembersOfDataSourse();}

void COledbView::OnRecordLast() {

m_pSet->MoveLast();//переход на последнюю позицию источника данных

displayMembersOfDataSourse();}

void COledbView::OnRecordFirst()

{

m_pSet->MoveFirst();//переход на первую позицию источника данных

displayMembersOfDataSourse();

}

Замечание. Для того чтобы снять блокировку с кнопок навигации к первой и предыдущей записям (ID_RECORD_FIRST, ID_RECORD_PREV), в ClassWizard в Message Maps необходимо последовательно выбрать эти идентификаторы, создавая на каждый из них обработчик типа “UPDATE_COMMAND_UI”.

Перейдём к созданию механизмов удаления, редактирования и добавления информации из источника данных.

Прежде чем создавать методы добавления и изменения данных в источнике, необходимо в классе CMy_oledbView создать метод COledbView::FillOleDBParameters(), который инициализирует переменные класса CTable_test значениями из элементов типа Edit Box, для последующего добавления и редактирования.

void COledbView::FillOleDBParameters(){

CString string;

wchar_t str[26];//объявление массива типа wchar_t

m_edit_name.GetWindowText(string);

memset(str, 0, 26); //выделение необходимой памяти

for(int i=0;i<string.GetLength();i++)

str[i] = (unsigned char)(LPCTSTR)string[i]; //инициализация массива str

m_edit_id.GetWindowText(string);

//инициализация переменной m_id_table

m_pSet->m_id_table = atoi((LPCTSTR)string);

// инициализация переменной m_name_table

wcscpy(m_pSet->m_name_table,str);

//обновление блока выделенной памяти

memcpy(m_pSet->m_name_table, &str[0],26);

}

Метод GetWindowText() возвращает содержимое элементов типа EditBox. Для того чтобы привести полученные данные к нужному типу (int и wchar_t*), выделим для переменной str необходимый размер памяти, это делается при помощи функции memset(). Следующий за ним цикл выполняет посимвольное, явное преобразование типов. Функция wcscpy() копирует данные из переменной str в переменную m_name_table класса CTable_test. Для того чтобы в дальнейшем результаты копирования можно было использовать, необходимо произвести обновление значений переменных. Это достигается использованием функции memcpy().




Поделиться с друзьями:


Дата добавления: 2014-11-29; Просмотров: 377; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.016 сек.