OOL Cconnect::ODBCConnect(CString strDBFile)
{
   CString strConnect;
    strConnect.Format(_T("ODBC;DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};UID=;PWD=;DBQ=%s"), strDBFile);   CDatabase db;
   
    if(db.Open(NULL, FALSE, FALSE,strConnect))
    {
        //连接数据库成功
    CRecordset rs(&db);
        CString strSql;

        strSql = _T("SELECT * FROM info");                                //SQL语句
        rs.Open(CRecordset::snapshot, strSql); //执行Sql语句(可添加 删除 查询等)
       //  rs.Open(AFX_DAO_USE_DEFAULT_TYPE,strSql,NULL);
        if(rs.IsOpen())
        {                  
            CDBVariant variant;
    rs.MoveFirst();
            while(!rs.IsEOF())
            {
                //读取记录
                rs.GetFieldValue(_T("姓名"), variant);
              

                rs.MoveNext();
            }
rs.Close();
        }        db.Close();
        return TRUE;
    }    return FALSE;
编译通过,运行提示:debug error。 调试时,提示在调用 SQLFetchScroll/SQLExtendedFetch 之前,没有列被绑定
State:SL009,Native:0,Origin:[Microsoft][ODBC 游标库],这个问题该怎么解决呢?

解决方案 »

  1.   

     rs.Open(CRecordset::snapshot, strSql); //执行Sql语句(可添加 删除 查询等)
    就是这一句
      

  2.   

    我就是这样用的:
    m_Database.Open(m_strDBName,0,0,";PWD=123");//123代表access数据库密码,
    如果没有密码可以直接m_Database.Open(m_strDBName);
    m_pRecordset->Open(dbOpenSnapshot, strQuery, dbReadOnly);
    运行几年了好像还行
      

  3.   

    我是在win32环境下,运行代码的,是不是缺少了什么?
      

  4.   

    是不是rs.open()函数,编译后,没有调用到CRecordset::Open()这个函数,而是调用了其他的open函数?
      

  5.   

    CString strConnect;
        strConnect.Format("ODBC;DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};DBQ=%s", strDBFile);
       TRY
       {
    CDatabase m_db;
       
        if(m_db.Open(NULL, false, false,strConnect))
        {   
            strConnect =m_db.GetConnect();
            //连接数据库成功
            CRecordset rs(&m_db);
            CString strSql;  
            strSql = "SELECT * FROM abc"; 
            rs.Open(CRecordset::forwardOnly,strSql,CRecordset::readOnly); //执行Sql语句(可添加 删除 查询等)
                            
                CString variant;
     
       while(!rs.IsEOF())
                {   //读取记录
                    rs.GetFieldValue(("name"), variant);  
    if(variant=="大海")
    {return TRUE;}
                    rs.MoveNext();
                }
    rs.Close();
            m_db.Close();
           
        }  
       }
       CATCH(CDBException,e)
       {AfxMessageBox("Database error!"+e->m_strError);}
       END_CATCH;
    return FALSE;已经实现了连接功能,少了一句。