Итак, мы в последний раз остановились на том, что не можем добавить таблицу пока не добавим поля. Давайте это исправим. Первое, что надо сделать это создать диалог, в котором сможем добавлять поля. Вот он какой.
Первое это я для него создал класс. С именем 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, то есть текстовое поле. Может в подробностях я их все и напишу.