Рефераты. Создание приложения ODBC

После усовершенствования внешнего вида формы переходим непосредственно к работе с базой данных.

 

3.     Отображение и обновление содержимого базы данных.

Для того чтобы отобразить данные из таблицы базы данных, необходимо выполнить определенные действия.  Для получения информации из таблицы базы данных требуется:

1.      создать соединение с источником данных;

2.      создать объект, куда будут записываться данные из базы данных;

3.      сформировать и выполнить запрос;

4.      отобразить полученные результаты в предварительно созданной форме.

 

Мы пока ничего из этого не сделали (правда, очень многое за нас выполнила библиотека MFC). Запустите приложение, обратив внимание на то, что на панели инструментов кнопки перемещения на следующую и последнюю записи доступны, а на предыдущую и первую — нет. Попробуйте понажимать на них. Как видите, они реагируют на нажатия, хотя в полях ничего и не отражается. О чем это говорит? О том, что библиотека MFC сама реализовала три первых этапа процесса получения информации, воспользовавшись для этого теми параметрами, которые мы указали при создании проекта.


Убедитесь в этом, просмотрев соответствующий код в вашем проекте.


********Class  CPrimSet *******



CString CPrimSet::GetDefaultConnect()

{

// Параметры источника данных

// CONNECT1- название источника данных

return _T("ODBC;DSN=CONNECT1");

}


CString CPrimSet::GetDefaultSQL()

{// Параметры таблицы

return _T("[dbo].[jobs]");

}


class CPrimSet : public CRecordset


{

public:

           

CPrimSet(CDatabase* pDatabase = NULL);

            DECLARE_DYNAMIC(CPrimSet)


// // Переменные для отображения данных строки таблицы

//{{AFX_FIELD(CPrimSet, CRecordset)


            int        m_job_id;

            CString            m_job_desc;

            BYTE  m_min_lvl;

            BYTE  m_max_lvl;

            //}}AFX_FIELD

            ...


           };

На нашу долю осталась реализация только последнего, четвертого, этапа — отображение результатов. Для этого нужно создать соответствующие переменные.

Раскройте спроектированное ранее диалоговое окно IDD_DB_FORM и при нажатой клавише <Ctrl> дважды щелкните на элементе управления. В результате на экране появится диалоговое окно Add Member Variable (Добавить компонентную переменную), показанное на рис. 9. В комбинированном списке Member variable name (Имя компонентной переменной) этого окна необходимо выбрать соответствующую переменную — в данном случае m_pSet->m_job_id.



Рис. 9. Диалоговое окно Add Member Variable

Примечание: 

Здесь m_pSet — указатель на объект класса, производного от CRecordset, содержащий текущую запись. Переменная m_job_id в этом объекте содержит текущее значение поля job_id из таблицы jobs. Если вы посмотрите содержимое комбинированного списка Member variable name, то увидите указатель для всех полей запроса, который для нас сконструировала библиотека MFC, и поэтому можно повторить рассмотренную процедуру сопоставления элементов управления формы с переменными для каждой из них.

После того как все элементы управления сопоставлены переменным, обязательно убедитесь, что все сделано корректно. Используйте для этого команду View/Class Wizard... (или одноименную кнопку на панели инструментов), чтобы отобразить диалоговое окно MFC ClassWizard, в котором выберите вкладку Member Variables (Компонентные переменные). В раскрывающемся списке Class name необходимо выбрать класс CPrimView. Список компонентных переменных должен выглядеть так, как показано на рис. 10.



Рис. 10. Компонентные переменные класса CPrimView


Теперь скомпилируйте и выполните приложение. Сразу после запуска вы увидите окно, показанное на рис. 11. Попробуйте перемешаться по записям базы данных, воспользовавшись соответствующими кнопками на панели инструментов или командами меню. И хотя мы пока не написали ни строчки кода, приложение работает прекрасно — можно переходить от записи к записи и даже изменять значения полей.



Рис. 11


Если сейчас выполнить приложение, то можно будет перемещаться по записям базы данных, а также их корректировать

 

3.     Добавление и удаление записей в таблице.

 

Добавление записей в таблицу.

Как и многое другое, эту возможность реализовать достаточно просто, поскольку большую часть работы мы можем переложить на библиотеку MFC. Основная наша задача — это корректным образом предоставлять ей информацию.


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


1. Раскройте вкладку Resource View (ресурсы) окна проектов. Щелкните по значку +, расположенному рядом с папкой Toolbar, а затем по IDR_MAINFRAME. Появится панель инструментов.


2. Выделите пустую кнопку, расположенную справа, и нарисуйте какой-либо символ New Record (Новая запись), например, такой, как показан на рис. 12. Переместите кнопку на место, расположенное сразу после четырех кнопок перемещения по базе данных.



Рис. 12. Новая кнопка на панели инструментов для добавления новой записи

 

3. Дважды щелкните по вновь созданной кнопке на разрабатываемой панели инструментов. Раскроется диалоговое окно Toolbar Button Properties , (Свойства кнопки панели инструментов). Введите в качестве идентификатора в список ID (Идентификатор) ID_RECORD_APPEND.

4. В поле Prompt (Подсказка) наберите текст — Append a new record to the table.\nNew Record (Добавление новой записи в таблицу\nНовая запись), как показано на рис. 13.


5. Нажмите кнопку закрытия в правом верхнем углу диалогового окна Toolbar Button Properties, и Visual C++ автоматически присвоит новой кнопке идентификатор ID_RECORD_APPEND.



Рис. 13.


Теперь необходимо сопоставить созданной кнопке некоторые действия. Откройте окно Class Wizard, выполнив команду View/ClassWizard, выберите вкладку Message Maps (карта сообщений) и в списке Object IDs выделите элемент ID_RECORD_APPEND, а в

раскрывающемся списке Class name выберите CPrimView — класс, который служит для просмотра базы данных. Именно для него потребуется добавить некоторый код. Далее в списке Message выделите элемент COMMAND и нажмите кнопку Add Function, в результате чего на экране появится диалоговое окно Add Member Function, в котором, уже предложено некоторое имя (рис. 14), базирующееся на идентификаторе кнопки (присваивайте всем идентификаторам содержательные имена).



Рис. 14. Если идентификатору присвоено содержательное имя, то можно просто нажать кнопку ОК



Нажмите кнопку ОК, и диалоговое окно MFC ClassWizard примет вид, показанный на рис. 15. В этом окне нажмите кнопку Edit Code (Редактировать код), чтобы сразу перейти к шаблону созданной функции, куда потребуется добавить код, приведенный ниже. Просмотрите примечание, расположенное после текста кода.



void CPrimView::OnRecordAppend()

{

// TODO: Add your command handler code here


//Сначала проверяем, не была ли открыта база данных 

// в режиме только для чтения. Если это так,

 //то выводим предупреждение и выходим из функции


if(m_pSet->CanAppend() == 0)

MessageBox("Можно только просматривать записи ", 

" Ошибка добавления записи ",

 MB_OK | MB_ICONWARNING); 

else 

{


// Перемещаемся на первую запись


m_pSet->MoveFirst();


// Создаем пустую запись,

// в которую пользователь будет вводить значения


m_pSet->AddNew();

// Устанавливаем флаг перехода в режим добавления записи 

m_bAdd = TRUE; 

//  Обновляем поля формы

 UpdateData(FALSE);

}

}







Рис. 15. Диалоговое окно MFC ClassWizard после проведенных действий


Примечание:

Для успешной работы приложения необходимо ввести новую переменную для фиксации режима добавления записи  m_bAdd:

  1. В окне Class View щелкните правой кнопкой на имени класса CPrimView и выберите в появившемся контекстном меню команду Add→Add Variable. Появится диалоговое окно Add Member Variable Wizard.
  2.  В раскрывающемся списке Access выделите метод доступа protected, в текстовом поле раскрывающегося списка Variable type сохраните тип переменной bool, в текстовом поле Variable name введите идентификатор переменной m_bAdd и нажмите кнопку Finish.
  3.  Проинициализируем добавленную переменную значением FALSE для нормальной работы в режиме просмотра записей.

CPrimView→CPrimView()



Вставьте код:



CDBView::CDBView() : CRecordView(CDBView::IDD)

 {

m_bAdd = FALSE; 

}




Рассмотрим, как работает функция OnRecordAppend. Прежде всего она проверяет, можно ли добавлять данные в базу данных. Сделать это можно с помощью функции CanAppend класса CRecordset. Если добавлять записи нельзя, то необходимо вывести сообщение об ошибке и завершить работу, что и сделано в нашем примере.

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


Итак, элементы управления в форме и результирующий набор готовы к приему данных. Теперь необходимо решить вопрос, каким образом и где передать введенные в форме значения в результирующий набор. Самым простым представляется способ добавления специальной кнопки, нажатие на которую вызовет специальный обработчик, где введенные значения перепишутся в результирующий набор. Второй способ не требует создания дополнительных элементов управления и для фиксации значений использует переопределенную функцию перемещения по записям результирующего набора Move. (В классе CPrimView выделите в списке функцию OnMove и добавьте заготовку для этой функции).  Кроме того, необходимо определить переменную  m_bAdd.

Страницы: 1, 2, 3



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.