运行成功后,出现runtime error错误

KeepingStudyZXR 2012-05-20 12:35:13
vc6.0操作sql server 2000数据库。那位高手熟悉_RecordsetPtr指针操作,帮小弟看看下面的代码吧,能够实现我要的向TwoConditionSet表中插入数据,但是结束后就出现

Runtime error!
this application has requested the runtime to terminate it in an unusual way.
please contact the application's support team for more information.
的错误。
是因为结束后没有对指针处理导致的吗??? 求指点!!!

void Createtwice()
{

ADOConn ado;
int countnumber=0;
int circletime=0;
CString strsql="select * from OneConditionSet where oncehouse=1";
_bstr_t bstrsql(strsql);

_variant_t varconditionstr1;
_variant_t varconditionstr2;
_variant_t varcondition1;
_variant_t varcondition2;
_variant_t varhouse;
_variant_t varhousespt;



_RecordsetPtr m_pRecordset1=ado.GetRecordSet(bstrsql);
_RecordsetPtr m_pRecordset2;

varconditionstr1=m_pRecordset1->GetCollect("oncecondit");
conditionstr1=(char *)_bstr_t(varconditionstr1);

varcondition1=m_pRecordset1->GetCollect("onceeducat");
condition1=(char *)_bstr_t(varcondition1);

while(!m_pRecordset1->adoBOF)
{


for(int j=0;j<circletime;j++)
m_pRecordset1->MoveNext();
if(circletime==0)
m_pRecordset1->MoveNext();

if(circletime!=0)
{
varconditionstr1=m_pRecordset1->GetCollect("oncecondit");
conditionstr1=(char *)_bstr_t(varconditionstr1);

varcondition1=m_pRecordset1->GetCollect("onceeducat");
condition1=(char *)_bstr_t(varcondition1);
m_pRecordset1->MoveNext();
}


m_pRecordset2=m_pRecordset1;

while(!m_pRecordset2->adoEOF)
{
varconditionstr2=m_pRecordset2->GetCollect("oncecondit");
conditionstr2=(char *)_bstr_t(varconditionstr2);

varcondition2=m_pRecordset2->GetCollect("onceeducat");
condition2=(char *)_bstr_t(varcondition2);

if(conditionstr1!=conditionstr2)
{
countnumber++;
CString string="insert into TwoConditionSet(twiceid,twiceconditstr1,twicecondit1,twiceconditstr2,twicecondit2,";
string+="twicecondit12spt,twicehouse,twicehousespt)values(%d,'%s','%s','%s','%s',%d,%d,%d)";
CString str;
str.Format(string,countnumber,conditionstr1,condition1,conditionstr2,condition2,conditionspt,house,housespt);
_bstr_t bstrsql1(str);
ado.ExecuteSQL(bstrsql1);
}
m_pRecordset2->MoveNext();

}
circletime++;
m_pRecordset1->MoveFirst();
}

}
...全文
242 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
无趣 2012-05-20
  • 打赏
  • 举报
回复
嗯,m_pConnection.CreateInstance没有对应的 m_pConnection.Release,加上试试。

RecordSet也要如此对应才行。
lang14 2012-05-20
  • 打赏
  • 举报
回复
单步调试,看看到哪句出错。。。
KeepingStudyZXR 2012-05-20
  • 打赏
  • 举报
回复
ADOConn.cpp代码:


#include "StdAfx.h"
#include "HouseSaleSystem.h"
#include "ADOConn.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

ADOConn::ADOConn()
{

}

ADOConn::~ADOConn()
{

}

// 初始化—连接数据库

void ADOConn::OnInitADOConn()

{

// 初始化OLE/COM库环境

::CoInitialize(NULL);

try

{

// 创建Connection对象

m_pConnection.CreateInstance("ADODB.Connection");

// 设置连接字符串,必须是BSTR型或者_bstr_t类型

_bstr_t strConnect = "Provider=SQLOLEDB; Server=.;Database=mydata; uid=sa; pwd=;";

m_pConnection->Open(strConnect,"","",adModeUnknown);

}

// 捕捉异常

catch(_com_error e)

{

// 显示错误信息

AfxMessageBox(e.Description());

}

}

// 执行查询

_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)

{

try

{

// 连接数据库,如果Connection对象为空,则重新连接数据库

if(m_pConnection==NULL)

OnInitADOConn();

// 创建记录集对象

m_pRecordset.CreateInstance(__uuidof(Recordset));

m_pRecordset->CursorLocation=adUseClient; //游标的位置出现.不加这句会出现The rowset is not //bookmarkable运行错误



// 取得表中的记录

m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);

}

// 捕捉异常

catch(_com_error e)

{

// 显示错误信息

AfxMessageBox(e.Description());

}

// 返回记录集

return m_pRecordset;

}

// 执行SQL语句,Insert Update _variant_t

BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)

{

// _variant_t RecordsAffected;

try

{

// 是否已经连接数据库

if(m_pConnection == NULL)

OnInitADOConn();

// Connection对象的Execute方法:(_bstr_t CommandText,

// VARIANT * RecordsAffected, long Options )

// 其中CommandText是命令字串,通常是SQL命令。

// 参数RecordsAffected是操作完成后所影响的行数,

// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名

// adCmdProc-存储过程;adCmdUnknown-未知

m_pConnection->Execute(bstrSQL,NULL,adCmdText);

return true;

}

catch(_com_error e)

{

AfxMessageBox(e.Description());

return false;

}

}


int ADOConn::GetRecordSetCount(_RecordsetPtr m_pRecordset)
{
int count=0;
try
{
m_pRecordset->MoveFirst();
}
catch(...)
{
return 0;
}
if(m_pRecordset->adoEOF)
return 0;
while(!m_pRecordset->adoEOF)
{
m_pRecordset->MoveNext();
count=count+1;
}
m_pRecordset->MoveFirst();
return count;
}


void ADOConn::ExitConnect()

{

// 关闭记录集和连接

if (m_pRecordset != NULL)

m_pRecordset->Close();

m_pConnection->Close();

::CoUninitialize();

}
无趣 2012-05-20
  • 打赏
  • 举报
回复
看不出来,把ADOConn的代码也贴出来看看。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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