用Wizard帮你根据具体数据表格派生一个CYourRecordset类不显示登陆框只要在m_db.Open加上一个参数,CDatabase::noOdbcDialog
就行了

解决方案 »

  1.   

    CDatabase * AppConnectToDatabase(CDatabase* pAppDb,CString g_strDSN)
    {
    BOOL b_Ret=TRUE;
    CDatabase * pDb;

    if (pAppDb == NULL)
    return NULL;
    else
    pDb = pAppDb; pDb->SetLoginTimeout(1000);

    if (pDb->IsOpen())
    {
    pDb->SetQueryTimeout(1000);
    return pDb;
    } try
    {
    pDb->OpenEx(g_strDSN, CDatabase::noOdbcDialog);
    //pDb->OpenEx(g_lpszDSN, CDatabase::useCursorLib|CDatabase::noOdbcDialog);
    b_Ret = TRUE;
    }
    catch(CDBException * e)
    {
    b_Ret = FALSE;
    TCHAR szErrMsg[127];
    _sntprintf(szErrMsg,127,_T("无法连接数据库,原因(%s)!"),(LPCTSTR)e->m_strError);
    ::MessageBox(NULL,(LPCTSTR)szErrMsg,"警告",MB_ICONWARNING);
    e->Delete();
    }
    catch(CMemoryException * e)
    {
    b_Ret = FALSE;
    e->Delete();
    } if (b_Ret)
    {
    //pDb->SetQueryTimeout(10);
    return pDb;
    }
    else
    {
    //if connection failed
    if (pAppDb)
    delete pAppDb;
    return NULL; //ok
    }
    }
    void AppDisconnectFromDatabase(CDatabase * pAppDb)
    {
    CDatabase *pDb;
    pDb = pAppDb; if (pDb->IsOpen())
    pDb->Close();
    if (pAppDb)
    {
    delete pAppDb;
    pAppDb = NULL;
    }
    }使用
    CString g_strDSN="DSN=yourdsn;UID=uid;PWD=password";
    m_pDb = new CDatabase;
    m_pDb=AppConnectToDatabase(m_pDb,g_strDSN);
    CString strSql;
    strSql.Format("select count(*) from tab");
    CRecordset * pSet=new CRecordset(m_pDb);
    try
    {
    pSet->Open(AFX_DB_USE_DEFAULT_TYPE,(LPCTSTR)strSql);
    }
    catch(CDBException* e)
    {
    ...
             }
              pCustInfoSet->MoveFirst();
    int nIndex=0;
    while(!pCustInfoSet->IsEOF())
    {
                       ...
                         }
    AppDisconnectFromDatabase(m_pDb);         
      

  2.   

    从不从CRecordSet 类派生自已的类没关系
    首先,在stdafx.h 中加入
    #include <afxdao.h>然后在你想使用数据库的地方声明
    CDatabase m_db;
    m_db.OpenEx("connect str",); //connect str 为( DNS="你建的ODBC DNS 名称"UID=SA;PWD=abc123)
    然后建一个CRecordset 类的实例;
    CRecordset * pSet = new CRecordset(&m_db);
    然后使用pSet 这个指针就OK
    最后别忘记加上
    if (pSet->IsOpen())
       pSet->Close();
    delete pSet;
      

  3.   

    上面给错了一个是
    #include <afxdb.h>
      

  4.   

    如果要说好的话,不如用oledb的好。当然会麻烦些