当我使用VC6的CRecordSet通过ODBC访问access数据库时出现如下出错信息,找来找去找不出错误,google上搜了一下,只有说是和
access的版本有关,不知道有没有谁遇到同样的错误,是怎么解决的? p_query.Format("select * from PERSONNEL");
m_basicset.Open(AFX_DB_USE_DEFAULT_TYPE,p_query);

解决方案 »

  1.   

    把你的问题说详细点..是什么版本的ACCESS?? 编译错误还是运行错误?? 运行错误的话,用单步调试定位出错代码行..另外,把代码发全一点看看..
      

  2.   

    我用的是:
    Microsoft Office Access 2003 (11.8166.8172) SP3
    VC 6.0 下使用ODBC读写数据库,代码如下:const CString c_dsn("training");
    ...
    m_database.Open(c_dsn);   //CDatabase m_database
    ...
    CPersonSet m_basicset(&m_database); // class CPersonSet : public CRecordsetp_query.Format("select * from PERSONNEL"); //CString p_query
    m_basicset.Open(CRecordset::forwardOnly,p_query);
    ...当错误发生时,call stack 是这样的:
    CRecordset::Move(long 1, unsigned short 1) line 1414
    CRecordset::MoveNext() line 82 + 60 bytes
    CRecordset::Open(unsigned int 2, const char * 0x014150fc, unsigned long 0) line 1118
    CPersonnelDlg::RefreshData() line 158
    CPersonnelDlg::OnInitDialog() line 127最后定位到FetchData的函数中,RETCODE CRecordset::FetchData(UWORD wFetchType, SDWORD nRow,
    DWORD* pdwRowsFetched)
    {
    RETCODE nRetCode; if (m_nOpenType == forwardOnly && !(m_dwOptions & useExtendedFetch))
    {
    ASSERT(wFetchType == SQL_FETCH_NEXT); AFX_ODBC_CALL(::SQLFetch(m_hstmt));
    *pdwRowsFetched = 1; m_bDeleted = FALSE;
    }
    else
    {
    AFX_ODBC_CALL(::SQLExtendedFetch(m_hstmt, wFetchType,
    nRow, pdwRowsFetched, m_rgRowStatus));
    // Set deleted status
    m_bDeleted = GetRowStatus(1) == SQL_ROW_DELETED;
    } CheckRowsetError(nRetCode); return nRetCode;
    }执行完下面的代码后,nRetCode被置为-1AFX_ODBC_CALL(::SQLExtendedFetch(m_hstmt, wFetchType,
    nRow, pdwRowsFetched, m_rgRowStatus));
      

  3.   

    p_query.Format("select * from PERSONNEL"); //CString p_query 
    改为:
    p_query.Format(_T("select * from PERSONNEL")); //CString p_query 
     
      

  4.   

    试了不行,_T 的定义是:#define _T(x)       __T(x)#define __T(x)      x