15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как связать 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 самостоятельно разрушится.

 


ССЫЛКИ

Более подробную информацию о 'Foreign Class' и 'Foreign Variable' возможностях визарда (ClassWizard), перейдите на закладку 'Class Info' в ClassWizard и кликните Help.