各位大哥:
小弟原先用对话框建立的ADO运行正常,但是将里面的语句添加到MDI里时就出现了问题
问题如下:
#import "C:\Program Files\Common Files\System\ado\msado15.dll"\
rename_namespace("ADOCG")rename("EOF","EndOfFile")
using namespace ADOCG;
这个我都写在StdAfx.h中在对话框的程序里我把_RecordsetPtr的指针和初始化写在APP类里
代码如下:
//声明
public:
    _ConnectionPtr m_pCt;//初始化(m_LogDlg是一个登陆用的对话框包括对服务器名,数据库名,用户名,和密码的输入)
if((m_LogDlg.DoModal()==IDOK))
{
    m_strCnt=_T("Provider=SQLOLEDB;Server="+m_LogDlg.m_Server_Name+";Database="+m_LogDlg.m_Database_Name+  ";uid="+m_LogDlg.m_User+";pwd="+m_LogDlg.m_Password+";");
  try
  {
     m_pCt.CreateInstance(__uuidof(Connection));
     m_pCt->Open((LPCTSTR)m_strCnt,"","",-1);  }
  catch(_com_error &e)
  {
    ::MessageBox(NULL,e.Description(),"登录出错",MB_OK |MB_ICONWARNING);
  }

}在MDI程序里我在APP和CMainFrame都试过了
代码如下:_ConnectionPtr m_pCt;这个我也两个地方都试过了
void CMainFrame::OnDbLink() 
{
// TODO: Add your command handler code here
CLogDialog dlg;
if(dlg.DoModal()==IDOK)
{
  try
  {
            CString m_strCnt=_T("Provider=SQLOLEDB;Server="+dlg.m_strServerName+";Database="+dlg.m_strDbName+";uid="+dlg.m_strDbName+";pwd="+dlg.m_strPassword+";");

m_pCt.CreateInstance(__uuidof(Connection));
m_pCt->Open((LPCTSTR)m_strCnt,"","",-1);
  }
  catch(_com_error &e)
  {
      ::MessageBox(NULL,e.Description(),"登录出错",MB_OK |MB_ICONWARNING);
  }

}

}但是这个m_pCt->Open((LPCTSTR)m_strCnt,"","",-1);没有访问数据库
得到的错误是空的。
在没有开SQLSERVER的情况下,前面返回找不到数据库的错误,而后面的仍旧返回空不知错误出在哪里了,拜托各位大哥了。

解决方案 »

  1.   

    注:小弟写了两个ADO访问数据库的程序,一个是用对话框结构的,运行正常
    另一个采用MDI的框架结构但是出问题了void CMainFrame::OnDbLink() //这个是MDI的菜单响应函数
      

  2.   

    你在MDI里面没有登陆对话框了吧?? 怎么还能用dlg.m_strServerName呢?
    CString m_strCnt=_T("Provider=SQLOLEDB;Server="+dlg.m_strServerName+";Database="+dlg.m_strDbName+";uid="+dlg.m_strDbName+";pwd="+dlg.m_strPassword+";");你把这一句改了,dlg.m_strServerName,dlg.m_strDbName等都改成实在的服务器名及数据库名试试看~
      

  3.   

    登陆的应该啊APP类的INITINSTANCE函数里合适吧HRESULT hr;
    _ConnectionPtr m_pConnection;
    hr=m_pConnection.CreateInstance(...);hr=m_pConnection->Open(....);
    if(SUCCESSEDE(hr))
       ...//同样的方法判断是什么没有成功,创建还是连接
      

  4.   

    感觉你的思路不是很好啊!
    在APP类的INITINSTANCE函数用
    if(logindig.DoModal()==FALSE)
          return FALSE;
    你的连接代码都应该在登陆对话框的登陆按钮响应函数里
      

  5.   

    我的思路是首先创建出整个MDI程序框架
    在APP中加入
    if(cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew)
    cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
    不支持运行后建立空文档
    然后创建一个连接菜单,通过这个菜单读取数据库建立文档
    但是就出现了以上的错误
      

  6.   

    晕,搞了半天是我忘记初始化COM了,自己先倒下
    感谢各位大哥