Шаг 9 - Добавляем поля

Итак, мы в последний раз остановились на том, что не можем добавить таблицу пока не добавим поля. Давайте это исправим. Первое, что надо сделать это создать диалог, в котором сможем добавлять поля. Вот он какой.

9.gif (2234 b)

Первое это я для него создал класс. С именем AddField и добавил переменные соотвественно для списка и окна редактирования.

class AddField : public CDialog
{
// Construction
public:
	
	CDaoTableDef *DaoTable;
	void SetTableDef(CDaoTableDef *cf);
	......

	//{{AFX_DATA(AddField)
	enum { IDD = IDD_DIALOG2 };
	
	CListBox m_List;
	CString	 m_Name;
	
	//}}AFX_DATA
	......
};

Как видите я создал ссылку на объект типа CDaoTableDef и функцию создал, которая его устанавливает. Функция конечно для красоты, так как объект public.

void AddField::SetTableDef(CDaoTableDef *cf)
{
	DaoTable=cf;
}
Вот это диалоговое окно вызываю сразу после создания таблицы.
void CAddTable::OnButton1() 
{
	//......
	cd->Open(csBaseName);
	cf->Create(m_TableName); 
// NEW CODE

	AddField ad;
	ad.SetTableDef(cf); 	
	ad.DoModal(); 

// END NEW CODE
	cf->Append(); 
	cf->Close();
	//......
}

Вы же помните, что таблица не будет создана, если не будет добавлено ни одного поля. Поля добавляются в диалоге по нажатию на кнопку "Add".

void AddField::OnAdd() 
{
	UpdateData(TRUE);
	m_List.AddString(m_Name);
	try
	{
	CDaoFieldInfo cinf;
	DaoTable->CreateField(m_Name,dbText,255); 
	}
	catch(CDaoException* cDaoError)
	{
	AfxMessageBox(cDaoError->m_pErrorInfo->m_strDescription);
	}
}

Вот и все дела. Есть функция CreateField, которая создает поля и имеет вот такой вид.

void CreateField
(
	LPCTSTR lpszName,		// Имя
	short nType,		// Тип
	long lSize,		// Размер
	long lAttributes = 0	// Атрибут
);

После добавления подобного кода наша таблица будет создана. Создавая поля я указал dbText, то есть текстовое поле. Может в подробностях я их все и напишу.


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