2 xugesen1989 xugesen1989 于 2015.07.12 15:46 提问

VC6.0 ODBC 驱动程序不支持动态记录集

设计了两个按钮,SAVE按钮表示向数据库存储二进制文件,read表示从数据库中把数据读出来,点击SAVE是会弹出ODBC 驱动程序不支持动态记录集

3个回答

xugesen1989
xugesen1989   2015.07.14 21:26
已采纳

我把m_useBLOB.Open(CRecordset::dynaset, strSQL); 改成m_useBLOB.Open(CRecordset::snapshot, strSQL);就好了
CRecordset::dynaset与CRecordset::snapshot具体有什么区别还不清楚,问题暂时排出了

xugesen1989
xugesen1989   2015.07.12 15:54

设计了两个按钮,SAVE按钮表示向数据库存储二进制文件,read表示从数据库中把数据读出来,点击READ是会弹出ODBC 驱动程序不支持动态记录集

如果先点击Read按钮会弹出数据被截断;test1.doc里面依然没有数据写入。

void CTBLOBDlg::OnBtnRead()
{
// TODO: Add your control notification handler code here
try
{
CString strSQL = "select * from testBLOB where ID =16";//
m_useBLOB.Open(CRecordset::dynaset, strSQL);
if(m_useBLOB.IsEOF())
AfxMessageBox("Unable to get image from db");
else
{
char tmpPath[_MAX_PATH+1];
GetTempPath(_MAX_PATH,tmpPath);

        CString strFileName = _T("C:\\test1.doc");

        CFile   outFile(strFileName,CFile::modeCreate|CFile::modeWrite);
        LPSTR   buffer = (LPSTR)GlobalLock(m_useBLOB.m_BLOB.m_hData);
        outFile.WriteHuge(buffer,m_useBLOB.m_BLOB.m_dwDataLength);
        GlobalUnlock(m_useBLOB.m_BLOB.m_hData);
        outFile.Close();
    }

    m_useBLOB.Close();

}
catch(CException* pE)
{
    pE->ReportError();
    pE->Delete();
    return;
}

}

oyljerry
oyljerry   Ds   Rxr 2015.07.12 16:22

odbc太老了,用ado试试。

Csdn user default icon
上传中...
上传图片
插入图片