最近做了一个简单的管理软件,数据库使用的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数据表添加上主键,问题就解决了,不要问我为什么,我也不知道微软为什么这么变态。