用MFC连接Oracle9i数据库编程时,出现Connection对象创建失败,请确认是否初始化了COM环境错误!
我想可能是因为代码没有组织好。但自己查不出问题来,劳请各位帮忙看一下!
1.利用AppWizard新建立了一个自己的CTab类,在CTab类里对数据库进行连接和相关的插入,查询,删除等操作.在CTab类的.h文件里定义了CAdoConnection m_adoConnection;(注释:CAdoConnection 是别人写好的一个现成的ADO库,我直接引用就可以了,新类里已经包含了该库的头文件)
2.然后在系统自动生成的CTestApp.cpp的InitInstance里,利用AfxOleInit();对COM进行初始化。
3.编译没有错误,运行的时候出现COM环境没有初始化的错误.
4.如果我把CAdoConnection m_adoConnection;挪到CTestApp.cpp的InitInstance里,就没有错误,也就是AfxOleInit();
初始化完之后,紧接着就定义CAdoConnection m_adoConnection;
5.我把CAdoConnection m_adoConnection;挪到CMainFrame.h里定义也出现同样的错误;
CTestApp.cpp中代码:
BOOL CInfoAlterApp::InitInstance()
{
AfxEnableControlContainer();
AfxOleInit();
......
return TRUE;
}
CTab.h种代码:#include "ado.h"
#include "CTestApp.h"
......
public:
CAdoConnection m_adoConnection;
CAdoRecordSet m_adoRecordSet;
BOOL ConnectToDataBase(CString m_dbname,CString m_dbsrc,CString m_dbpwd);
......CTab.cpp中代码:BOOL CTab::ConnectToDataBase(CString m_dbname,CString m_dbsrc,CString m_dbpwd)
{
BOOL bConnect = FALSE;
if(!m_adoConnection.ConnectOracle(m_dbname,m_dbsrc,m_dbpwd,-1))
return FALSE;
m_adoRecordSet.SetAdoConnection(&m_adoConnection);
return FALSE;
}问题:为什么在我自己定义的CTab.h类里定义CAdoConnection m_adoConnection;会出错?该如何解决?
新接触MFC,问题比较简单.望各位不要扔砖,谢谢!
我想可能是因为代码没有组织好。但自己查不出问题来,劳请各位帮忙看一下!
1.利用AppWizard新建立了一个自己的CTab类,在CTab类里对数据库进行连接和相关的插入,查询,删除等操作.在CTab类的.h文件里定义了CAdoConnection m_adoConnection;(注释:CAdoConnection 是别人写好的一个现成的ADO库,我直接引用就可以了,新类里已经包含了该库的头文件)
2.然后在系统自动生成的CTestApp.cpp的InitInstance里,利用AfxOleInit();对COM进行初始化。
3.编译没有错误,运行的时候出现COM环境没有初始化的错误.
4.如果我把CAdoConnection m_adoConnection;挪到CTestApp.cpp的InitInstance里,就没有错误,也就是AfxOleInit();
初始化完之后,紧接着就定义CAdoConnection m_adoConnection;
5.我把CAdoConnection m_adoConnection;挪到CMainFrame.h里定义也出现同样的错误;
CTestApp.cpp中代码:
BOOL CInfoAlterApp::InitInstance()
{
AfxEnableControlContainer();
AfxOleInit();
......
return TRUE;
}
CTab.h种代码:#include "ado.h"
#include "CTestApp.h"
......
public:
CAdoConnection m_adoConnection;
CAdoRecordSet m_adoRecordSet;
BOOL ConnectToDataBase(CString m_dbname,CString m_dbsrc,CString m_dbpwd);
......CTab.cpp中代码:BOOL CTab::ConnectToDataBase(CString m_dbname,CString m_dbsrc,CString m_dbpwd)
{
BOOL bConnect = FALSE;
if(!m_adoConnection.ConnectOracle(m_dbname,m_dbsrc,m_dbpwd,-1))
return FALSE;
m_adoRecordSet.SetAdoConnection(&m_adoConnection);
return FALSE;
}问题:为什么在我自己定义的CTab.h类里定义CAdoConnection m_adoConnection;会出错?该如何解决?
新接触MFC,问题比较简单.望各位不要扔砖,谢谢!
MFC里面可以调AfxOleInit
苦恼
苦恼
2.
if(!AfxOleInit())//这就是初始化COM库
{
AfxMessageBox(“OLE初始化出错!”);
return FALSE;
}
3.
连接使用_ConnectionPtr接口
我的CAdoConnetion m_pAdoconnetion;是在InitInstance()之后,为什么还是提示没有初始化呢?
CAdoConnetion m_pAdoconnetion;定义这个对象的确是在初始化之后才可以;
尝试把com调用放入其它函数里,在AfxOleInit之后再调用。
初始化COM函数CoInitialize(NULL); 是写在APP的InitInstance()里;
按程序的执行顺序应该是APP的InitInstance()->初始化自定义类->在自定义类中调用COM
,按以上顺序写代码,就会出错;
虽然问题解决了,但还没搞清除原因,郁闷......