AddNew的时候报错“当前记录集不支持更新,这可能是提供程序的限制,也可能是选定锁定类型的限制”
我用VC++编程,用ADO连接Oracle数据库,表是新建的,有主键,建表的SQL语句是:
create table TEST(ID number(10),NAME varchar2(20))
表中事先手动加入3行数据。
使用下面代码可以查询出数据,但是不能用AddNew添加新记录,到了AddNew的时候,就报错“当前记录集不支持更新,这可能是提供程序的限制,也可能是选定锁定类型的限制”,请问是哪个地方出了问题?
PS:源代码如下:
void CBLOBTestDlg::OnBnClickedGetData()
{
CString name;
int no;
CString strSQL;
m_pRecord.CreateInstance(__uuidof(Recordset));
strSQL.Format(_T("Select ID,NAME from TEST where ID = 3"));//如果语句换成“Select * from TEST where ID = 3”到了AddNew的时候还是出问题
try
{
m_pRecord->Open(_variant_t(strSQL),m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
}
name=(CString)m_pRecord->GetCollect(_variant_t("NAME")).bstrVal;//此处可以查询出正确数据
no=m_pRecord->GetCollect(_variant_t("ID")).intVal; //此处可以查询出正确数据
try
{
m_pRecord->AddNew(); //为记录集添加新的一行,更新时就会把这条新纪录放到数据库中
}
catch (_com_error e)
{
AfxMessageBox(e.Description());//报错“当前记录集不支持更新,这可能是提供程序的限制,也可能是选定锁定类型的限制
”
AfxMessageBox(_T("不能插入一条新的记录"));
return;
}
try
{
m_pRecord->PutCollect("ID", _variant_t(maxid+1));
m_pRecord->PutCollect("NAME", _variant_t(name));
}
catch (_com_error e)
{
AfxMessageBox(_T("插入数据异常"));
return;
}
m_pRecord->Update();
m_pRecord->Close();//关闭记录集
m_pRecord.Release();//释放空间
}
[解决办法]
m_pRecord->Open(_variant_t(strSQL),m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText)
这一句,这样写试试行不行
m_pRecord->Open(_variant_t(strSQL),m_pConn.GetInterfacePtr(),adOpenDynamic,adLockPrssimistic,adCmdText)
[解决办法]
先在sql管理器里执行一下sql语句
[解决办法]
主键自增设置了吗