我的数据库中有多个表,我在程序里需要对一个表进行读取,但是用下面语句读取时却提示“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);

解决方案 »

  1.   

    我又改成snapshot方式试了一下,却提示“在调用FetchScroll/SQLExtendedFetch之前列没有绑定数据列”
    m_db.Open(_T("BT"));
    m_set.m_pDatabase=&m_db;
      

  2.   

    CRecordset::readOnly这个去掉,再把数据库的用户名加上看是不是不够权限
      

  3.   

    我要晕死了,现在换成m_set.Open();这样都不行,运行出错!谁帮我解决下,我再加分
      

  4.   

    你把程序发到[email protected]我看看,现在我上网的地方没有调试环境
      

  5.   

    你的ODBC数据源没有注册成功。把数据库放到工程目录下,你的是在工程下的DATA里
    然后用:
     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