我写了一个按钮的代码,本意是要生成一个.mdb数据文件,遇到了错误,开始怀疑是参数问题,后来,偶然发现rs,即
cdaorecordset对象没有一个open操作,而直接做rs.addnew(),于是出错!
教训深刻.
记之,以提醒自己.
// 使用CDaoDatabase
//什么时候使用CDaoDatabase,用来产生mdb文件
AfxGetModuleState()->m_dwVersion = 0x0601;
pDatabase.Create("newdb.mdb",dbLangGeneral,0x40);
// ---------------------------------------------------------
CDaoTableDef pTable(&pDatabase);
//一个基本问题的疑问?dao对象之间如何关联起来?在声明变量的时候或者之后?
//定义CDaoTableDef类的方法警告,为什么不可以用下面的方法呢?
// pTable.m_pDatabase = &pDatabase;
// CDaoTableDef 类的create()得到的是什么?
// 建立数据库中的一个新的表
pTable.Create(_T("data"));
// Create if just now , maybe can not open again.
// pTable.Open("data");
// 这里不需要open()
pTable.CreateField("Y",dbInteger,10,0);
// pTable.CreateField("N",dbInteger,10,0);
pTable.Append();
pTable.Close();
//使用CDaoRecordSet
CDaoRSet rs(&pDatabase);
//这里的open()一直处于缺少的状态,教训所在!!!
rs.Open(dbOpenDynaset, _T("Select * from data"));
//--------------------------------------------------------------------
rs.AddNew();
// ??????????????????????????????????????????????????????????????????????????????????
// ??????????????????????????????????????????????????????????????????????????????????
// ??????????????????????????????????????????????????????????????????????????????????
// 为什么不可以使用rs.addnew(),而要出错呢?需要什么前提条件呢?
// rs.open()
// ??????????????????????????????????????????????????????????????????????????????????
// ??????????????????????????????????????????????????????????????????????????????????
// ??????????????????????????????????????????????????????????????????????????????????
rs.Update();
rs.AddNew();
rs.Update();
rs.Close();
pDatabase.Close();
pDatabase.m_pWorkspace->Close();