Идея этого шага вот в чем. В Access таблица может формироваться из других таблиц.
Когда мастер форм Access сформирует форму на основе таблицы она будет вот такая.
Вот мы и будет прибывать сделать подобное в MFC. Пока просто на диалоговом окне попробуем. создаем приложение на базе диалогового и именем DaoTest. На диалоговое окно поместим ComboBox. Создадим свой класс CDaoCombo как наследник от CComboBox.
class CDaoCombo : public CComboBox { // Construction public: CDaoCombo(); // Attributes public: // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CDaoCombo) //}}AFX_VIRTUAL // Implementation public: void SetFields(CString csField); // установить имя поля void GetRecord(); // получить записи void SetRecordset(CDaoRecordset *cRecord); // установить набор записей virtual ~CDaoCombo(); // Generated message map functions protected: //{{AFX_MSG(CDaoCombo) // NOTE - the ClassWizard will add and remove member functions here. //}}AFX_MSG DECLARE_MESSAGE_MAP() private: CString csFieldName; // имя поля CDaoRecordset * m_pRecord; // указатель на набор записей };
Реализация функций.
//////////////////// // CDaoCombo CDaoCombo::CDaoCombo() { } CDaoCombo::~CDaoCombo() { } BEGIN_MESSAGE_MAP(CDaoCombo, CComboBox) //{{AFX_MSG_MAP(CDaoCombo) // NOTE - the ClassWizard will add and remove mapping macros here. //}}AFX_MSG_MAP END_MESSAGE_MAP() ////////////////////////////// // CDaoCombo message handlers void CDaoCombo::SetRecordset(CDaoRecordset *cRecord) { m_pRecord = cRecord; } void CDaoCombo::GetRecord() { m_pRecord->Open(); // открыть m_pRecord->MoveFirst(); // в начало // Пока есть записи while (! m_pRecord->IsEOF()) { COleVariant CValue; m_pRecord->GetFieldValue(csFieldName,CValue); // получить запись CString s=CValue.pbVal; AddString(s); m_pRecord->MoveNext(); // на следующую } m_pRecord->Close(); // закрыть } void CDaoCombo::SetFields(CString csField) { csFieldName = csField; }
Использовать его в проекте проще простого. Для начала надо связать класс с элементом управления.
Создать набор записей.
Ну и теперь нужно создать объект набора записей вовремя, указать набор записей, поле и удалить вовремя.
BOOL CDaoTestDlg::OnInitDialog() { CDialog::OnInitDialog(); m_DaoCombo.SetRecordset(ciSet); m_DaoCombo.SetFields("Name"); m_DaoCombo.GetRecord(); // Add "About..." menu item to system menu. //...... } void CDaoTestDlg::OnDestroy() { CDialog::OnDestroy(); delete ciSet; }
Вот и все, результат будет вот таким.
В проекте находится класс CDaoCombo упaкованный для использования в Component Gallery как ogx файл.