菜鸟问题,如何用ADO从数据库中导出各种文件

demit 2005-04-10 10:34:15
就是象“文件另存为”那样的功能 比如把222.bmp导出并可以自己命名为111.bmp
我现在已经会用Getchunk的方法把数据导出到一个缓冲区pBuffer
并用CFileDlg创建了一个保存文件对话框 如何将这2者联系起来? 还是说有其他的方法 谢谢
...全文
92 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
clovefjp 2005-04-11
  • 打赏
  • 举报
回复
分配内存
demit 2005-04-10
  • 打赏
  • 举报
回复
谢谢了 大致懂了 就是下面几句不知道是什么作用?
hgFileMem = GlobalAlloc(GHND, lFileSize);
lpvFileMem = GlobalLock( hgFileMem);
GlobalFree(hgFileMem);
AkiraChing 2005-04-10
  • 打赏
  • 举报
回复
bool CDlgPropSampleLog::SaveToFile(_RecordsetPtr pRstTable,CString strFieldName,CString& strFileName)
{
bool bRet=true;
long lFileSize = pRstTable->Fields->GetItem((_bstr_t)strFieldName)->ActualSize;

_bstr_t bstrVal;
_variant_t vFieldValue;
HGLOBAL hgFileMem = NULL;
LPVOID lpvFileMem = NULL;

if(lFileSize > 0)
{
bstrVal=pRstTable->Fields->GetItem((_bstr_t)(strFieldName+_T("_filetype")))->Value;
CString strFiletype;
if(vFieldValue.vt==VT_NULL)
{
strFiletype=_T("");
}
else
strFiletype=(LPCTSTR)bstrVal;

strFileName.Format(_T("%s\\%s%s"),theApp.m_strTempPath,strFieldName,strFiletype);

_variant_t vFile;

vFile = pRstTable->Fields->GetItem((_bstr_t)strFieldName)->GetChunk(lFileSize);
if(vFile.vt == (VT_ARRAY | VT_UI1))
{

hgFileMem = GlobalAlloc(GHND, lFileSize);
if(hgFileMem!=NULL)
{
lpvFileMem = GlobalLock( hgFileMem);
BYTE *pBuffer= NULL;
SafeArrayAccessData(vFile.parray,(void **)&pBuffer);
CopyMemory(lpvFileMem,pBuffer,lFileSize);
SafeArrayUnaccessData (vFile.parray);
CFile file(strFileName,CFile::modeWrite|CFile::modeCreate);
file.Write(lpvFileMem,lFileSize);
file.Close();
}
}
}
else
bRet=false;

lpvFileMem=NULL;
GlobalFree(hgFileMem);

return bRet;
}

4,017

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧