Шаг 8 - Добавляем таблицу

Будем продолжать развивать предыдущий проект. Итак, у нас есть возможность создавать файл MDB. Теперь нам надо добавить в него таблицу. Давайте добавим кнопку на наше диалоговое окно для вызова окна добавления таблицы.

8_1.gif (1831 b)

Идея такая. Когда в окне редактирования написано имя существуюшей БД, даже если она была только что создана, то появится диалоговое окно, которое позволит добавлять таблицу, иначе будет ошибка. Так вот давайте создадим этот диалог.

8_2.gif (1202 b)

Для этого диалогового окна с использованием 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. Если вы запустите программу и введете имя существующей базы данных, а потом добавите таблицу, то получите такое сообщение.

8_3.gif (3624 b)

Написано, что нельзя добавлять таблицу без полей. Ну и правильно :-) Исправим в следующем шаге :-)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 23.07.2000