Будем продолжать развивать предыдущий проект. Итак, у нас есть возможность создавать файл MDB. Теперь нам надо добавить в него таблицу. Давайте добавим кнопку на наше диалоговое окно для вызова окна добавления таблицы.
Идея такая. Когда в окне редактирования написано имя существуюшей БД, даже если она была только что создана, то появится диалоговое окно, которое позволит добавлять таблицу, иначе будет ошибка. Так вот давайте создадим этот диалог.
Для этого диалогового окна с использованием ClassWizard добавляем в проект класс. Скажем с именем CAddTable. Нам надо добавить ссылку на этот класс.
// CteateMDBDlg.cpp : implementation file // #include "stdafx.h" #include "CteateMDB.h" #include "CteateMDBDlg.h" #include "afxdao.h" #include "AddTable.h" ......
Вот теперь мы можем запустить диалоговое окно по нажатию на эту кнопку.
void CCteateMDBDlg::OnButton2() { CAddTable cat; UpdateData(); cat.csBaseName=m_MDB_Name; cat.DoModal(); }
Для того, чтобы передавать имя MDB я добавил переменную в класс диалогового окна.
class CAddTable : public CDialog { // Construction public: CString csBaseName; ......
Как видите перед запуском диалогового окна я передаю имя базы в класс. В классе диалогового окна AddTable нам опять нужно добавить ссылку на классы DAO.
// AddTable.cpp : implementation file // #include "stdafx.h" #include "CteateMDB.h" #include "AddTable.h" #include "afxdao.h" ......
Ну вот пора добавлять таблицу. Код нажатия на кнопку. Только связать окно редактирования с переменной m_TableName.
void CAddTable::OnButton1() { CDaoWorkspace* cw=NULL; CDaoDatabase* cd=NULL; CDaoTableDef* cf=NULL; UpdateData(); try { cw=new CDaoWorkspace(); cd = new CDaoDatabase(cw); cf = new CDaoTableDef(cd); cd->Open(csBaseName); cf->Create(m_TableName); cf->Append(); cf->Close(); cd->Close(); cw->Close(); delete cf; delete cd; delete cw; } catch(CDaoException* cDaoError) { if (cf!=NULL) { cf->Close(); } delete cf; if (cd!=NULL) { cd->Close(); delete cd; } if (cw!=NULL) { cw->Close(); delete cw; } AfxMessageBox(cDaoError->m_pErrorInfo->m_strDescription); } }
Основа кода вот такая:
cd = new CDaoDatabase(cw); cf = new CDaoTableDef(cd); cd->Open(csBaseName); cf->Create(m_TableName); cf->Append(); cf->Close(); cd->Close();
Создать объект базы данных (CDaoDatabase) и объект таблицы (CDaoTableDef). Открыть существующую базу данных Open и создать там таблицу Create, после этого ее надо добавить к таблицам базы данных Append. Если вы запустите программу и введете имя существующей базы данных, а потом добавите таблицу, то получите такое сообщение.
Написано, что нельзя добавлять таблицу без полей. Ну и правильно :-) Исправим в следующем шаге :-)