最近做了一个简单的管理软件,数据库使用的sqlserver2000,用odbc关联数据源,但是在对数据表进行修改时,总是提示:记录集是只读,我在sql下插入,修改数据是正常的,单就是在程序中使用总是有这个提示。我的代码情况:使用vs2008添加了一个类,模板是MFC odbc使用者,关联的数据表roominfo,自动生成代码,
CRoominfoset::CRoominfoset(CDatabase* pdb) : CRecordset(pdb){ column1 = L""; column2 = L""; column3 = 0.0; column4 = L""; column5 = FALSE; column6 = L""; column7 = L""; column8 = L""; column9; m_nFields = 9; m_nDefaultType = dynaset;}
在其它类中对数据表roominfo进行修改,
CRoominfoset myroominfoset;
//获得选择的列表项目内容 CString SQLstr; SQLstr="SELECT * FROM roomsetting where 房间号='" ; SQLstr+=roomnumber; SQLstr+="'"; if(!myroominfoset.Open(AFX_DB_USE_DEFAULT_TYPE,SQLstr)) {//查询数据库得到数据集合 MessageBox(_T("没有此房间号码,打开数据库失败!"),_T("客房管理系统")); if(myroominfoset.IsOpen()) {//关闭数据表 myroominfoset.Close(); } return ; }
m_roomlevel=myroominfoset.column2;//读取数据 m_room_money.SetWindowText((LPCTSTR)myroominfoset.column3); myroominfoset.Edit(); //设置数据库操作类型 if (issave) myroominfoset.column4="入住"; myroominfoset.Update(); myroominfoset.Requery();
以上就是对数据表进行修改的部分代码,通过断点调试,在执行到 myroominfoset.Edit();时出现了一个提示对话框:记录集是只读的,通过一番搜索,终于解决:表中必须有主键,否则不能插入,我把roominfo数据表添加上主键,问题就解决了,不要问我为什么,我也不知道微软为什么这么变态。