首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

AddNew的时分报错“当前记录集不支持更新,这可能是提供程序的限制,也可能是选定锁定类型的限制”

2013-04-21 
AddNew的时候报错“当前记录集不支持更新,这可能是提供程序的限制,也可能是选定锁定类型的限制”我用VC++编

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语句
[解决办法]
主键自增设置了吗

热点排行