我的数据库中有多个表,我在程序里需要对一个表进行读取,但是用下面语句读取时却提示“ODBC驱动程序不支持动态记录集”。我改了dynamic方式以后又说是“ODBC驱动程序不支持动态指针”,晕了!
m_set.Open(CRecordset::dynaset,"SELECT * FROM USER_ARCHIVE",CRecordset::readOnly);
部分代码如下:
创建数据源
SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"Microsoft Access Driver (*.mdb)\0",
"DSN=BT\0DBQ=DATA\\BT.mdb\0");
数据源的连接:
m_db.Open(_T("BT"));
m_set.m_pDatabase=&m_db;
打开数据:
CString strSql="SELECT * FROM USER_ARCHIVE";
m_set.Open(CRecordset::dynaset,strSql,CRecordset::readOnly);
m_set.Open(CRecordset::dynaset,"SELECT * FROM USER_ARCHIVE",CRecordset::readOnly);
部分代码如下:
创建数据源
SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"Microsoft Access Driver (*.mdb)\0",
"DSN=BT\0DBQ=DATA\\BT.mdb\0");
数据源的连接:
m_db.Open(_T("BT"));
m_set.m_pDatabase=&m_db;
打开数据:
CString strSql="SELECT * FROM USER_ARCHIVE";
m_set.Open(CRecordset::dynaset,strSql,CRecordset::readOnly);
m_db.Open(_T("BT"));
m_set.m_pDatabase=&m_db;
然后用:
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer();
int nPos;
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left (nPos);
nPos=sPath.ReverseFind('\\');
sPath=sPath.Left (nPos);
CString lpszFile = sPath + "\\BT.mdb";
char* szDesc;
int mlen;
szDesc=new char[256];
sprintf(szDesc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s? FIL=MicrosoftAccess? DEFAULTDIR=%s?? ","BT",lpszFile,sPath);
mlen = strlen(szDesc);
for (int i=0; i<mlen; i++)
{
if (szDesc[i] == '?')
szDesc[i] = '\0';
}
if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc))
AfxMessageBox("SQLConfigDataSource Failed");
后面会有建立空文档失败的提示:
http://community.csdn.net/Expert/topic/2663/2663190.xml?temp=.7789728