我用VC写ORACLE数据库时,为什么程序崩溃但数据却写进去了呢? 我用VC写ORACLE数据库时,为什么程序崩溃但数据却写进去了呢?我用的是ADO方法,哪位大侠帮帮我阿,感激不尽!~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我有的时候写数据库程序不崩溃,数据写进去了,但有时候崩溃了,数据却也写进去了,真不知道是什么回事阿,我是ORACLE菜鸟,哪位大侠能帮帮我阿? int nodeid; CString nodename; CString sql2; sql2="SELECT * FROM SATELLITE"; m_pRecordset =m_pConnection->Execute(_bstr_t(sql2),&RecordsAffected,adCmdText); if(m_pRecordset->BOF) { AfxMessageBox("表内数据为空"); } m_pRecordset->MoveFirst(); hchild=m_treeCtrl.GetChildItem(hRootsatellite); while(hchild!=NULL) { check=m_treeCtrl.GetCheck(hchild); if(check) { TheValue=m_pRecordset->GetCollect("NODEID"); if(TheValue.vt!=VT_NULL) nodeid=TheValue.lVal; TheValue=m_pRecordset->GetCollect("NODENAME"); if(TheValue.vt!=VT_NULL) nodename=(char*)(_bstr_t)TheValue; sql2.Format("INSERT INTO SIM_NODE(SCHEMEID,NODEID,NODETYPE) VALUES('%s',%d,'%s')",schemeid,nodeid,nodename); m_pConnection->Execute((_bstr_t)sql2,&RecordsAffected,adCmdText); } hchild=m_treeCtrl.GetNextItem(hchild,TVGN_NEXT); m_pRecordset->MoveNext(); }好像这块有错 你的while条件限制太少了。while(hchild!=NULL && !m_pRecordset->EOF) //应该有类似于EOF这个么判断,查查相关文档{} 呵呵,谢谢楼上的,我hchild是合m_pRecordset是同步往下的阿,而且hchild的个数和数据库纪录的条数是一样多的 你debug时,程序在哪个地方崩溃,把那块的调用栈打出来吧。 7C81EB33 pop esi真是太感谢你了:) 你用的是ADO,对吗?我印象里,似乎有一个初始化的动作。涉及到是否是多线程。if(FAILED(::CoInitialize(NULL))) exit(-1);这是单线程初始化if (FAILED(::CoInitializeEx(NULL, COINIT_MULTITHREADED)))这是多线程初始化。由于我从来不使用MFC,只使用部分SDK.不知道你的应用对应的是多线程还是单线程,如果单线程应用,却初始化为多线程ADO库,也可能会崩。让你打出上边的callstack,不是要汇编码,而是要对应的source code的callstack。应该能打出来的。 问题解决了,原来是我数据库的问题,是number型的只能能插入0-9的数,我却插入10以上的数,所以就崩溃了,谢谢楼上的大侠的热心指导,真是感激不尽,以后有问题希望还能购请教你阿:) 急需帮助,单位生产库的表被删除几行了。急需恢复 Oracle 写文件总是出错 100分求助一查询问题(做报表时遇到的问题) 求救一個SQL語句 如何过滤掉重复的记录 数据库如何恢复!快快 这个pl/sql还有错????各位大虾请教了 简单问题:如何限定值的范围 sql语句创建表的问题 今天是我的生日,散分,今天零点以前有分。上次回答我OEM问题的人不限时间,都给分 请问各位高手,这个问题怎么解决! vc 6编译(oracle9i)proc生成的c文件,请高手帮忙,谢谢
CString nodename;
CString sql2;
sql2="SELECT * FROM SATELLITE";
m_pRecordset =m_pConnection->Execute(_bstr_t(sql2),&RecordsAffected,adCmdText);
if(m_pRecordset->BOF)
{
AfxMessageBox("表内数据为空");
}
m_pRecordset->MoveFirst();
hchild=m_treeCtrl.GetChildItem(hRootsatellite);
while(hchild!=NULL)
{
check=m_treeCtrl.GetCheck(hchild);
if(check)
{
TheValue=m_pRecordset->GetCollect("NODEID");
if(TheValue.vt!=VT_NULL)
nodeid=TheValue.lVal;
TheValue=m_pRecordset->GetCollect("NODENAME");
if(TheValue.vt!=VT_NULL)
nodename=(char*)(_bstr_t)TheValue;
sql2.Format("INSERT INTO SIM_NODE(SCHEMEID,NODEID,NODETYPE) VALUES('%s',%d,'%s')",schemeid,nodeid,nodename);
m_pConnection->Execute((_bstr_t)sql2,&RecordsAffected,adCmdText);
}
hchild=m_treeCtrl.GetNextItem(hchild,TVGN_NEXT);
m_pRecordset->MoveNext();
}
好像这块有错
while(hchild!=NULL && !m_pRecordset->EOF) //应该有类似于EOF这个么判断,查查相关文档
{
}
真是太感谢你了:)
if(FAILED(::CoInitialize(NULL))) exit(-1);这是单线程初始化if (FAILED(::CoInitializeEx(NULL, COINIT_MULTITHREADED)))这是多线程初始化。由于我从来不使用MFC,只使用部分SDK.不知道你的应用对应的是多线程还是单线程,
如果单线程应用,却初始化为多线程ADO库,也可能会崩。让你打出上边的callstack,不是要汇编码,而是要对应的source code的callstack。应该能打出来的。