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