改写CRecordset类的OnSetOptions函数试试看。
 
  void CMyRecordset::OnSetOptions(HSTMT hstmt)
   {
     SQLSetStmtOption(hstmt,SQL_MAX_LENGTH,(UDWORD)100000);//第三个参数大于64k
     CRecordset::OnSetOptions(hstmt);
   }

解决方案 »

  1.   

    我想问题应该不在这里,我曾经写过这样的一段代码,没有涉及到记录集
    代码如下:
    //把图片内容存为variant型变量
    CFile imagefile;
    if(0 == imagefile.Open("c:\\9.bmp",CFile::modeRead))
         return;
    BYTE* pbuf;
    long nLength = imagefile.GetLength();
    pbuf = new BYTE[nLength+2];
    if(pbuf == NULL)
         return;                             
    imagefile.ReadHuge(pbuf,nLength); 
    BYTE *pBufEx;
    pBufEx = pbuf;
    SAFEARRAY* psa;
    SAFEARRAYBOUND rgsabound[1];
    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = nLength;
    psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
    for (long i = 0; i < nLength; i++)
         SafeArrayPutElement (psa, &i, pBufEx++);
    VARIANT varBLOB;
    varBLOB.vt = VT_ARRAY | VT_UI1;
    varBLOB.parray = psa;//再把variant型变量的值转换为一个file----本例中即存为9999.bmp文件
    BYTE *ppBuf = NULL;
    ppBuf = (BYTE*)GlobalAlloc(GMEM_FIXED,nLength);
    SafeArrayAccessData(varBLOB.parray,(void **)ppBuf); 
    CString strFileName ="c:\\9999.bmp";
    CFile outFile(strFileName,CFile::modeCreate|CFile::modeReadWrite);
    LPSTR buffer = (LPSTR)GlobalLock((HGLOBAL)ppBuf);
    outFile.WriteHuge(buffer,nLength);
    GlobalUnlock((HGLOBAL)ppBuf);
    outFile.Close(); 结果是如果文件9.bmp大于64K,则预览9999.bmp一片漆黑
    但如果文件9.bmp小于64K,则预览9999.bmp内容正常
    这是为什么呢?
    我想问题一定出在把variant型变量的值转换为一个file----本例中即存为9999.bmp文件
    的身上,因为我用VB中的image控件对数据库中的image(不论大小)数据预览其图片内容时正常显示(注:数据库中的image数据是我用上文中先把图片内容存为variant型变量然后再用
    pRecordSet->Fields->GetItem("...")->AppendChunk(variant)把数据存进数据库中的
    这说明了问题应该出在后面
    是不是内存的分配有问题?
      
      

  2.   

    噢,不对,上文我说的直接不通过数据库生成的9999.bmp文件也不对,它没有内容
    不过我想不知为什么,通过把VARIANT在数据库中中转了一次之后生成的文件就能预览
    很奇怪,那位能解释一下!
    噢 ,问题也有可能出在ADO的GetChunk函数身上(我用的是ADO)!