为什么我的ADO运行不起来,请高手指点一二(在线等))谢谢

wndxlsz 2005-05-03 09:20:42

本人刚刚接触VC下的ADO,  初步写了以下程序,运行结果,是说某段内存不可读

  请高手指点,小弟不盛感激  !!!  谢谢!!
/数据库ADO 初始化类!

// ADOConn.cpp: implementation of the ADOConn class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ADO53.h"
#include "ADOConn.h"

省掉VC自动产生的程序若干


ADOConn::ADOConn()
{

}

ADOConn::~ADOConn()
{

}

void ADOConn::OnInitDBConnect()
{
::CoUninitialize();
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open("Provider=SQLOLEDB;SERVER=WNJF_DATASERVER;DATABASE=djk;UID=sa;PWD=3906663","","",-1);

}
catch(_com_error e)
{AfxMessageBox(e.Description());
}

}


_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{

try
{
if (m_pConnection==NULL)
{
OnInitDBConnect();
}
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}

catch(_com_error e)
{ AfxMessageBox(e.Description());}

AfxMessageBox("3");
return m_pRecordset;
}

BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{

try
{
if (m_pConnection==NULL)
OnInitDBConnect();
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{AfxMessageBox(e.Description());
return false;
}
}

void ADOConn::ExitConnect()
{

if (m_pRecordset!=NULL)
m_pRecordset->Close();
m_pConnection->Close();
::CoUninitialize();

}



//数据库SERV库类
// SERV.cpp: implementation of the SERV class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ADO53.h"
#include "SERV.h"

省掉VC自动产生的程序若干
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

SERV::SERV()
{
m_acc_nbr="1728";
m_serv_name="noname";
m_zke="0.00";


}

SERV::~SERV()
{

}







void SERV::GetData(CString Gacc_nbr)/*这段比较重要,可能错误代码在此
{
ADOConn m_ADOConn;
m_ADOConn.OnInitDBConnect();
_bstr_t SQL;
SQL="select * from j200503 where acc_nbr="+Gacc_nbr;
_RecordsetPtr Myset;
Myset=m_ADOConn.GetRecordSet(SQL);
AfxMessageBox(Gacc_nbr);

//REUTNR value
if (Myset->adoEOF==1)
{

AfxMessageBox(" 没此号话记录");
SERV();
}
else
{
//AfxMessageBox("6");
m_acc_nbr=Gacc_nbr;

m_serv_name=(LPCTSTR)(_bstr_t)Myset->GetCollect("serv_name");
m_zke=(LPCTSTR)(_bstr_t)Myset->GetCollect("zke");

}

m_ADOConn.ExitConnect();
AfxMessageBox("5");
}

/ DIALOG 类! 里面有三个EDIT控件 及两个按钮!
#include "stdafx.h"
#include "ADO53.h"
#include "ADO53Dlg.h"

省掉VC自动产生的程序若干

/////////////////////////////////////////////////////////////////////////////
/为啥我的ADO会出现 报错,是一些内存方面的,请各位高手帮帮忙,不盛感激!!!!
online ..waiting..



************************888省略所有VC自动产生的代码若干*********************

void CADO53Dlg::OnButton1() /**查找按钮,当CLICK事件发生,执行以下代码!
{

UpdateData(true);

if (m_phone=="0")
AfxMessageBox("请输入电话号码");



djk.GetData(m_phone);

m_name=djk.m_serv_name;
m_phone=djk.m_acc_nbr;
m_zke=djk.m_zke;
UpdateData(false);

}

void CADO53Dlg::OnButton2() /*退出应用程序
{
exit(0);
}
...全文
146 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
uovk 2005-05-05
  • 打赏
  • 举报
回复
void ADOConn::OnInitDBConnect()
{
::CoUninitialize();//这里有明显错误,初始化COM环境..你释放了COM应该为::CoInitialize()
//或者干脆用AfxOleInit();
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open("Provider=SQLOLEDB;SERVER=WNJF_DATASERVER;DATABASE=djk;UID=sa;PWD=3906663","","",-1);

}
catch(_com_error e)
{AfxMessageBox(e.Description());
}

}
wndxlsz 2005-05-05
  • 打赏
  • 举报
回复
谢谢各位仁兄的热心帮助! 问题出在这:SQL="select * from j200503 where acc_nbr="+Gacc_nbr;

大家,知道吗??、 ^_^
red-fly 2005-05-05
  • 打赏
  • 举报
回复
把::CoInitialize()放到ADOConn::OnInitDBConnect里是不合适的,你每调用一次,都要初始化,而msdn上说,只要一次即可,这样奇不多余?
还有,你把CoInitialize写成UN,那肯定是不正确的
学会单步调试,最后在出错的地方,用GetLastError捕获错误代码并从MSDN上查看原因
wndxlsz 2005-05-05
  • 打赏
  • 举报
回复
jszj(老板说mis部不是赚钱的部门...) ( uovk(石头) (

两位仁兄,多谢你们指点,本人现在按照你们的方法看看!

还有JSZJ仁兄,你说的单步调试,本人不是很熟悉,本人搞VC还刚起步,请以后多多指点! 谢谢!!
wndxlsz 2005-05-04
  • 打赏
  • 举报
回复
还是没找到原因
red-fly 2005-05-04
  • 打赏
  • 举报
回复
1.导入ado库
2.重命名EOF
3.初始化com库
dfyang 2005-05-04
  • 打赏
  • 举报
回复
跟踪一下,看看再哪里出的错。
一般这种问题是指针没有初始化造成的
wndxlsz 2005-05-04
  • 打赏
  • 举报
回复
jszj(老板说mis部不是赚钱的部门...) 谢谢兄弟的提醒,不过你说的我都做了,只不过贴过来都省略了!!!!!
还有 sambios(雨雪逝去 ) 兄弟,这两者好象没多大关系吧!!
sambios 2005-05-04
  • 打赏
  • 举报
回复
搂主是不是写错了?
初始化为::CoInitialize(NULL);
不是::CoUnInitialize();
red-fly 2005-05-04
  • 打赏
  • 举报
回复
在你CreateInstance之前,按照我以上的步骤做了吗?
oyljerry 2005-05-04
  • 打赏
  • 举报
回复
你先找出问题的所在
wndxlsz 2005-05-03
  • 打赏
  • 举报
回复
谢谢yeyuboy(海绵)的提示,不过,我看了一下,好象不是这个原因吧!!
yeyuboy 2005-05-03
  • 打赏
  • 举报
回复
是不是因为GetRecordset函数中的m_pRecordset.CreateInstance(__uuidof(Recordset));语句会多次执行呢?
wndxlsz 2005-05-03
  • 打赏
  • 举报
回复
期待各位高手解决中....谢谢!

4,011

社区成员

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

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