有关数据库编译链接通过,运行发生错误的问题

eric_wuxing 2008-08-05 09:30:05
源码如下:
void CTestDlg::OnAdd()
{
// TODO: Add your control notification handler code here

UpdateData(true);
CString query_num;
GetDlgItemText(IDC_NUM, query_num);

CString sql;
_variant_t vAffected;
sql.Format("SELECT count(*) as counts FROM Table2 WHERE num='%s'",query_num);
m_pRecordset=theApp.m_pConnection->Execute(_bstr_t(sql),&vAffected,adCmdText);
m_intCounts=m_pRecordset->GetCollect("counts").intVal;
m_pRecordset->Close();///关闭记录集
m_pRecordset.Release();


if (m_intCounts>0)
{
AfxMessageBox("模块编号已经存在,请重新输入模块编号!");
}


try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->AddNew();
m_pRecordset->PutCollect("num",_variant_t(m_strNum));
m_pRecordset->PutCollect("time",_variant_t(m_tTime));
m_pRecordset->PutCollect("20",_variant_t((long)m_intT1));
m_pRecordset->PutCollect("22",_variant_t((long)m_intT2));
m_pRecordset->PutCollect("24",_variant_t((long)m_intT3));
m_pRecordset->PutCollect("26",_variant_t((long)m_intT4));
m_pRecordset->PutCollect("28",_variant_t((long)m_intT5));
m_pRecordset->Update();
AfxMessageBox("插入成功!");
m_pRecordset->Close();///关闭记录集
// 更新显示其库内容
Refresh();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}

程序主要分为两个部分,上半部分主要判断在数据库中是否存在相同编号,如果存在则给出提示并返回,下半部分就是在数据库中添加一个新的记录。

程序链接编译都通过,但是在运行的时候当添加新记录的时候会出现RUNTIME ERROR

通过分块调试,两部分的功能都可以实现,但是一合起来就出错了,请大家帮忙指点,不胜感谢!!!
...全文
36 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
沈阳大猫 2008-08-05
  • 打赏
  • 举报
回复
void CTestDlg::OnAdd()
{
// TODO: Add your control notification handler code here

UpdateData(true);
CString query_num;
GetDlgItemText(IDC_NUM, query_num);

CString sql;
_variant_t vAffected;
sql.Format("SELECT count(*) as counts FROM Table2 WHERE num='%s'",query_num);
m_pRecordset=theApp.m_pConnection->Execute(_bstr_t(sql),&vAffected,adCmdText);
m_intCounts=m_pRecordset->GetCollect("counts").intVal;
m_pRecordset->Close();///关闭记录集 这里已经关闭了记录集
m_pRecordset.Release();


if (m_intCounts>0)
{
AfxMessageBox("模块编号已经存在,请重新输入模块编号!");
}


try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
这里需要重新打开记录集才能添加操作
m_pRecordset->AddNew();
m_pRecordset->PutCollect("num",_variant_t(m_strNum));
m_pRecordset->PutCollect("time",_variant_t(m_tTime));
m_pRecordset->PutCollect("20",_variant_t((long)m_intT1));
m_pRecordset->PutCollect("22",_variant_t((long)m_intT2));
m_pRecordset->PutCollect("24",_variant_t((long)m_intT3));
m_pRecordset->PutCollect("26",_variant_t((long)m_intT4));
m_pRecordset->PutCollect("28",_variant_t((long)m_intT5));
m_pRecordset->Update();
AfxMessageBox("插入成功!");
m_pRecordset->Close();///关闭记录集
// 更新显示其库内容
Refresh();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}

eric_wuxing 2008-08-05
  • 打赏
  • 举报
回复
呵呵,谢谢谢谢。最近刚刚做一个项目用到VC,初学请多多指教
内存泄漏 2008-08-05
  • 打赏
  • 举报
回复
晕..Addnew之前,必须先打开记录集,即:
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("select * from Table2",_variant_t((IDispatch*)theApp.m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);
m_pRecordset->AddNew();
...

4,017

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧