MFC数据库删除跟修改数据失败
MFC数据库删除和修改数据失败
使用list ctrl控件,绑定为m_Grid
int pos = m_Grid.GetSelectionMark();
ADO m_Ado;
m_Ado.OnInitADOConn();
CString sql = "select * from jobs";
m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql);
try
{
m_Ado.m_pRecordset->Move(pos,vtMissing);
m_Ado.m_pRecordset->Delete(adAffectCurrent);
m_Ado.m_pRecordset->Update();
m_Ado.CloseRecordset();
m_Ado.CloseConn();
}
catch(...)
{
MessageBox("操作失败");
return;
}
这段是删除的,每次执行都是跳出失败提示。
下一段修改数据的,也是失败,仅仅是添加数据 能成功。
UpdateData(TRUE);
if(m_id.IsEmpty() || m_desc.IsEmpty() || m_slvl.IsEmpty())
{
MessageBox("基础信息不能为空!");
return;
}
int pos = m_Grid.GetSelectionMark();
ADO m_Ado;
m_Ado.OnInitADOConn();
CString sql = "select * from jobs";
m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql);
try
{
m_Ado.m_pRecordset->Move((long)pos,vtMissing);
m_Ado.m_pRecordset->PutCollect("job_id",(_bstr_t)m_id);
m_Ado.m_pRecordset->PutCollect("job_desc",(_bstr_t)m_desc);
m_Ado.m_pRecordset->PutCollect("min_lvl",(_bstr_t)m_slvl);
m_Ado.m_pRecordset->PutCollect("max_lvl",(_bstr_t)m_llvl);
m_Ado.m_pRecordset->Update();
m_Ado.CloseRecordset();
m_Ado.CloseConn();
}
catch(...)
{
MessageBox("操作失败");
return;
}
------解决方案--------------------
异常捕获改成这样试试看什么错误。
------解决方案--------------------
1、确认连接建立正常。
2、确认SQL执行正确,并且记录集中有相应的记录。
3、确认操作的字段名称正确无误。
4、如果上述3处都没有问题的话,有可能跟你创建的记录集的类型有关,记录集有多种类型,每种类型的记录集对增删改等操作的支持是不一样的。
你可以看一个msdn中关于记录集类型的描述中对几种类型的秒,以便创建正确类型的记录集。
使用list ctrl控件,绑定为m_Grid
int pos = m_Grid.GetSelectionMark();
ADO m_Ado;
m_Ado.OnInitADOConn();
CString sql = "select * from jobs";
m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql);
try
{
m_Ado.m_pRecordset->Move(pos,vtMissing);
m_Ado.m_pRecordset->Delete(adAffectCurrent);
m_Ado.m_pRecordset->Update();
m_Ado.CloseRecordset();
m_Ado.CloseConn();
}
catch(...)
{
MessageBox("操作失败");
return;
}
这段是删除的,每次执行都是跳出失败提示。
下一段修改数据的,也是失败,仅仅是添加数据 能成功。
UpdateData(TRUE);
if(m_id.IsEmpty() || m_desc.IsEmpty() || m_slvl.IsEmpty())
{
MessageBox("基础信息不能为空!");
return;
}
int pos = m_Grid.GetSelectionMark();
ADO m_Ado;
m_Ado.OnInitADOConn();
CString sql = "select * from jobs";
m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql);
try
{
m_Ado.m_pRecordset->Move((long)pos,vtMissing);
m_Ado.m_pRecordset->PutCollect("job_id",(_bstr_t)m_id);
m_Ado.m_pRecordset->PutCollect("job_desc",(_bstr_t)m_desc);
m_Ado.m_pRecordset->PutCollect("min_lvl",(_bstr_t)m_slvl);
m_Ado.m_pRecordset->PutCollect("max_lvl",(_bstr_t)m_llvl);
m_Ado.m_pRecordset->Update();
m_Ado.CloseRecordset();
m_Ado.CloseConn();
}
catch(...)
{
MessageBox("操作失败");
return;
}
------解决方案--------------------
异常捕获改成这样试试看什么错误。
try
{
//你的ADO代码
}
catch (_com_error& e)
{
CString strMsg;
strMsg.Format(_T("错误描述:%s\n错误消息%s"),
(LPCTSTR)e.Description(),
(LPCTSTR)e.ErrorMessage());
AfxMessageBox(strMsg);
}
------解决方案--------------------
1、确认连接建立正常。
2、确认SQL执行正确,并且记录集中有相应的记录。
3、确认操作的字段名称正确无误。
4、如果上述3处都没有问题的话,有可能跟你创建的记录集的类型有关,记录集有多种类型,每种类型的记录集对增删改等操作的支持是不一样的。
你可以看一个msdn中关于记录集类型的描述中对几种类型的秒,以便创建正确类型的记录集。