Авторские разработки С++ MFC

О проекте | Новости | Статьи | Исх.тексты | Отзывы | Форум | Главная

Пример работы с базой данных в нескольких окнах посредством DAO

Зачем было сделано

Меня несколько раз спрашивали как организована работа с базами данных в программе Plan. В результате ответов на эти вопросы получился макет программы для работы с базой данных MDB, который основан на многодокументном шаблоне.

Что это такое

Это скорее не полноценная программа, а шаблон для работы с базой данных. Однако он показывает работу с двумя таблицами в одной базе данных MDB. Экраны полностью независимы и с ними можно работать параллельно.

В программе имеется два экрана, которые можно активизировать при помощи меню View. В каждом экране всего по одному полю, но уже в них можно посмотреть результат перемещения по базе.

Структуру базы catalog.mdb  можно просмотреть при помощи MS Access. Для работы программы необходима установка DAO

.

catalog.gif (9267 bytes) 

Как это сделано.

Основной класс CCatalogApp. В его методе InitInstance происходит создание двух шаблонов:

pAuthorTemplate = new CMultiDocTemplate(
        IDR_CATALOTYPE,
        RUNTIME_CLASS(CCatalogDoc),
        RUNTIME_CLASS(CChildFrame), // custom MDI child frame
        RUNTIME_CLASS(CAuthorsView));
    AddDocTemplate(pAuthorTemplate);

pBooksTemplate = new CMultiDocTemplate(
        IDR_CATALOTYPE,
        RUNTIME_CLASS(CCatalogDoc),
        RUNTIME_CLASS(CChildFrame), // custom MDI child frame
        RUNTIME_CLASS(CCatalogView));
    AddDocTemplate(pBooksTemplate);

Один используется для работы с базой авторов, а другой для книг. Если добавить другие шаблоны, то можно работать и с другими таблицами.

Активизация экранов осуществляется при помощи метода в классе приложения. Например для авторов:

void CCatalogApp::OnAuthStart()
{
    pAuthorTemplate->OpenDocumentFile(NULL);        
}

Сам класс для работы с таблицей авторов CAuthorsSet наследуется из библиотечного класса CDaoRecordset

Класс для просмотра и обработки записей таблицы авторов CAuthorsView наследуется из библиотечного класса CDaoRecordView.

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

void CAuthorsView::OnAppendRecord()
{
    OnMove(ID_RECORD_LAST);    // для отслеживания перемещения
    m_pSet->MoveLast();  // перейти на последнюю запись
    m_pSet->AddNew();    // добавить пустую запись
    m_pSet->m_NAME="Новое имя"; // присвоить новое имя
    m_pSet->Update();  // обновить данные в базе
    UpdateData(FALSE);    // обновить экран
}

Для удаления записи можно создать примерно такой код

void CAuthorsView::OnDeleteRecord()
{
    m_pSet->Delete(); // удалить текущую запись
    m_pSet->MoveNext();  // перейти на следующую
    if (m_pSet->IsEOF())  // если это была последняя, то перейти в начало
    {
        m_pSet->MoveFirst();
    }
    UpdateData(FALSE);    // обновить экран
   
}

И добавить его вызов, например из меню или ToolBar

Программа и полный исходный текст

Скачать:  catalog.zip   (89 Kb)  программа и исходный текст.

 

© Авторские разработки http://progcpp.narod.ru при цитировании ссылка обязательна.

Сайт создан в системе uCoz