КАТЕГОРИИ: Архитектура-(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; Просмотров: 402; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |