1.我定义一个类CADOConn专门用来操作数据库,类定义如下://CADOConn.h
class CADOConn  
{
public:
void ExitConnect();
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
void OnInitADOConn();
_RecordsetPtr m_pRecordset;
_ConnectionPtr m_pConnection;
CADOConn();
virtual ~CADOConn();
};//CADOConn.cpp中的主要函数:void CADOConn::OnInitADOConn()//初始化连接
{
    m_pConnection.CreateInstance(__uuidof(Connection));
CString strSQL;
strSQL="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=coursemanager.mdb";
try
{
m_pConnection->Open(_bstr_t(strSQL),"","",adModeUnknown);  
}
catch(_com_error e)
{
CString strError;
strError.Format("警告:打开连接发生异常。错误信息:%s",e.ErrorMessage());
AfxMessageBox(strError);
}
}_RecordsetPtr& CADOConn::GetRecordSet(_bstr_t bstrSQL)//执行查询,返回记录集
{
    try
{
if(m_pConnection==NULL)
OnInitADOConn();
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePt(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
CString strError;
strError.Format("警告:打开记录集发生异常。错误信息:%s",e.ErrorMessage());
AfxMessageBox(strError);
}
return m_pRecordset;
}void CADOConn::ExitConnect()
{
    if(m_pRecordset!=NULL)
m_pRecordset->Close();
m_pConnection->Close();
}2.在StdAfx.h中添加:
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")3.但是我在其他类中声明数据库操作类对象CADOConn adoConn;并调用初始化函数连接数据库时出现连接错误:
警告:打开连接发生异常。错误信息:未指定的错误请问这是那里错了 ,该怎么办,请各位高手指教
    
  

解决方案 »

  1.   

    ADO连接数据库要初始化com端口,你没有初始化在这个m_pConnection.CreateInstance(__uuidof(Connection)); 
    之前加::AfxOleInit();这个函数初始化com端口,这个MFC用的
    具体你可以参考下这个网站
    http://hi.baidu.com/%C4%C8%CE%F7%D0%A1%D1%FD/blog/item/372d78c2989bb91e0ff47721.html
      

  2.   

    回复2楼:我已在CMyWinApp类的InitInstance函数中初始化了:
        if(!AfxOleInit())
    {
    AfxMessageBox("初始化 OLE DLL 失败:(");
    return false;
    }
      

  3.   

    试试 m_pConnection.CreateInstance(_T("ADODB.Connection"));
      

  4.   

    回复4楼:连接错误已经解决,原因是我的数据库文件没有放的工程文件夹下
    但是返回记录集函数又出错了:
    CString strSQL="select * form studentinfo";
    CADOConn adoConn;
    adoConn.OnInitADOConn();
    adoConn.GetRecordSet((_bstr_t)strSQL);
    出错信息:Error:-2147217900 Msg:IDispatch error #3092 
    Descroption:语法错误(操作符丢失)在查询表达式'* form studentinfo'中。Microsoft JET Database Engine我觉得查询表达式没错啊,请问这是怎么回事,谢谢
      

  5.   

    在初始化的行加断点,看看有没有执行初始化。
    AfxOleInit()和m_pConnection.CreateInstance(__uuidof(Connection)); 
    前面都加上,看看执行顺序和出错行信息。
      

  6.   

    呵呵,明明是"from”不是"form"
      

  7.   

    恩,只是“form”和“from”问题了
      

  8.   

    奇怪了,ADO不初始化com端口也能连上数据库~~~~
      

  9.   

    最好是在APP中定义m_pConnection,然后其它类中用theApp调用m_pConnection
      

  10.   

    只是form 和 from 写错了 呵呵 谢谢各位 结贴