如何解决在对话框中使用odbc,已经加入记录集。但Open时发生异常。

解决方案 »

  1.   

    CFileDialog m_FileDlg(TRUE,"mdb","",OFN_OVERWRITEPROMPT,"Microsoft Access 应用程序(*.mdb)|*.mdb|所有文件(*.*)|*.*||",this);
    if(m_FileDlg.DoModal()==IDOK)
    {
    char* pDSN;
    pDSN=new char[255];
    int iLen;
    sprintf(pDSN,"DSN=DSN_DbCom?DBQ=%s?",m_FileDlg.GetFileName());
    iLen=strlen(pDSN);
    for(int iIndex=0;iIndex<iLen;iIndex++)
    {
    if(pDSN[iIndex]=='?')
    {
    pDSN[iIndex]='\0';
    }
    }
    SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)pDSN);
    try
    {
    if(m_DaoDb.IsOpen())
    {
    m_DaoDb.Close();
    }
    m_DaoDb.Open(m_FileDlg.GetFileName());
    int iTableDefCount=m_DaoDb.GetTableDefCount();
    for(int kIndex=0;kIndex<iTableDefCount;kIndex++)
    {
    m_DaoDb.GetTableDefInfo(kIndex,m_DaoTableDefInfo);
    if(m_DaoTableDefInfo.m_lAttributes&dbSystemObject)
    continue;
    m_TableName.AddString(m_DaoTableDefInfo.m_strName);
    }
    }
    catch(CDaoException* e)
    {
    //AfxMessageBox(e->m_pErrorInfo->m_strDescription,MB_ICONINFORMATION);
    AfxMessageBox("DAO不可识别的数据库格式,转换数据库到早期ACCESS数据库版本.",MB_ICONINFORMATION);
    e->Delete();
    }
    if(m_Db.IsOpen())
    {
    m_Db.Close();
    }
    m_Db.Open(_T("DSN_DbCom"));
    }