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

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