Как связать CRecordset с CDialog

В документации Visual C++ ENROLL описывается, как соединить элементы управления CRecordView с полями переменных CRecordset. Небольшая доработка поможет связать поля переменных с элементами управления CDialog. В данной статье описываются шаги, которые необходимо предпринять для этого.

Подключить CRecordset к CDialog можно точно так же, как CRecordset к CRecordView. Как только CRecordset и CDialog созданы, проделайте следующие шаги:

  1. При помощи ClassWizard, укажите класс CRecordset как 'foreign class' для CDialog. Вот пример, как это делается с диалогом CAboutDlg в примере ENROLL:

    1. Для Visual C++ 2.x, из директории \MSVC\MFC\SAMPLES\ENROLL\STEP1 загружается проект ENROLL step 1, а для Visual C++ 4.0 из директории \MSDEV\SAMPLES\MFC\TUTORIAL\ENROLL\STEP1.

    2. Запускается ClassWizard (CTRL+W).

    3. В выпадающием списке 'Class Name' выбирается класс 'CAboutDlg'.

    4. В ClassWizard, выбирается закладка 'Class Info'.

    5. В выпадающем списке 'Foreign Class' выбирается 'CSectionSet'. CSectionSet это класс CRecordset который Вам необходимо связать с диалогом.

    6. В окошке редактирования 'Foreign Variable' напишите m_pSet (произвольное название).

    После этого для класса CAboutDlg будет создана переменная-член m_pSet. Переменная m_pSet будет указывать на объект CSectionSet.

  2. В Visual C++ 4.0, чтобы добавить элементы управления к CDialog, воспользуйтесь редактором ресурсов. В более ранних версиях Visual C++, для этого прийдётся воспользоваться AppStudio.

  3. Добавьте следующий код к CDialog, чтобы назначать, открывать и закрывать записи (recordset). Например:
     BOOL CAboutDlg::OnInitDialog()
    {
    CEnrollDoc * pDoc=(CEnrollDoc *) (GetParentFrame()->
    GetActiveDocument());
    m_pSet= &(pDoc->m_SomeRecordset);
    m_pSet->Open();

    CDialog::OnInitDialog();

    return TRUE;
    }

    Перед тем, как использовать этот код, убедитесь, что объект CSectionSet (наследованный от CRecordset) объявлен как public переменная класса CEnrollDoc (наследованного от CDocument). Обратите внимание, что в коде, приведённом выше, эта переменная называется 'm_SomeRecordset'. Так же можно добавить дополнительный код для проверки CDBExceptions а так же чтобы позволить пользователю перемещаться по записям.

    ЗАМЕЧАНИЕ: данный код не закрывает объект CRecordset. Это можно сделать в OnOK и OnCancel в деструкторе CDialog, либо когда объект CRecordset самостоятельно разрушится.

 
« Предыдущая статья   Следующая статья »