怎样对bmp进行数据库保存啊,高手请进!

xiaogang_1 2008-05-27 04:40:34
我使用别人写好的一个记录集指针类,里面有5个成员函数,分别是
// BLOB 数据存取 ------------------------------------------
BOOL AppendChunk(FieldPtr pField, LPVOID lpData, UINT nBytes);
BOOL AppendChunk(long index, LPVOID lpData, UINT nBytes);
BOOL AppendChunk(LPCSTR strFieldName, LPVOID lpData, UINT nBytes);
BOOL AppendChunk(long index, LPCTSTR lpszFileName);
BOOL AppendChunk(LPCSTR strFieldName, LPCTSTR lpszFileName);

另外我有一个m_bitmap变量,我想使用AppendChunk函数把m_bitmap保存到数据库里,能不能实现啊!


请各位大侠对对指教啊!

在线等啊!
...全文
82 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ls443085074 2008-05-28
  • 打赏
  • 举报
回复
bool CADOConn::PutBlogData(_RecordsetPtr &m_pRecordset,const char *feilds,char *pBuf, int len)
{
VARIANT varChunk;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];//定义一个安全数组
//char *pBuf;
//Create a safe array to store the array of BYTES
rgsabound[0].cElements =len;
rgsabound[0].lLbound = 0;
psa = SafeArrayCreate(VT_UI1,1,rgsabound);//创建SAFEARRAY对象
for(long index=0;index<(long)len;index++)
{
//将pBuf指向的数据保存到SAFEARRAY对象psa中
if(FAILED(SafeArrayPutElement(psa,&index,pBuf++)))
{
delete pBuf;
::MessageBox(NULL,"哎呀,怎么又出毛病了。","悲情提示",MB_OK|MB_ICONWARNING);
return false;
}
}
varChunk.vt =VT_ARRAY|VT_UI1;//将varChunk的类型设置为BYTE类型的数组
varChunk.parray = psa; //为varChunk变量赋值
try{
//存入varChunk的内容(即pBuf)到feilds字段中
m_pRecordset->GetFields()->GetItem(feilds)->AppendChunk(varChunk);

return true;
}
catch ( _com_error e)
{
CString strComError;
strComError.Format("错误编号: %08lx\n错误信息: %s\n错误源: %s\n错误描述: %s",
e.Error(), // 错误编号
e.ErrorMessage(), // 错误信息
(LPCSTR) e.Source(), // 错误源
(LPCSTR) e.Description()); // 错误描述
::MessageBox(NULL,strComError,"prompt",MB_OK|MB_ICONWARNING);
}
//释放 销毁空间
::VariantClear(&varChunk);
::SafeArrayDestroyData( psa);
return false;
}

//读取大块数据
BOOL CADOConn::GetBlogData(_RecordsetPtr &m_pRecordset, const char *feilds, char *Block)
{
//得到预取字段的长度
int blocklen = m_pRecordset->GetFields()->GetItem(feilds)->ActualSize;
if (blocklen > 0)
{
try
{
_variant_t varChunk;//取出的内容存入其中
varChunk = m_pRecordset->GetFields()->GetItem(feilds)->GetChunk(blocklen);
if(varChunk.vt == (VT_ARRAY | VT_UI1)) //判断数据类型是否正确
{
char *pBuf = NULL;
SafeArrayAccessData(varChunk.parray,(void **)&pBuf); //得到指向数据的指针
//在这里对pBuf中的数据进行处理 存入BLOCK中
memcpy((LPVOID)Block, (LPVOID)pBuf, blocklen);
SafeArrayUnaccessData (varChunk.parray);
return TRUE;
}
}//try
catch ( _com_error e)
{
CString strComError;
strComError.Format("错误编号: %08lx\n错误信息: %s\n错误源: %s\n错误描述: %s",
e.Error(), // 错误编号
e.ErrorMessage(), // 错误信息
(LPCSTR) e.Source(), // 错误源
(LPCSTR) e.Description()); // 错误描述
::MessageBox(NULL,strComError,"prompt",MB_OK|MB_ICONWARNING);
}
}//if
return FALSE;
}

//处理错误
void CADOConn::GenerateError(HRESULT hr, PWSTR pwszDescription)
{
CString strError;

strError.Format("Run-time error '%d (%x)'", hr, hr);
strError += "\n\n";
strError += pwszDescription;
AfxMessageBox(strError);
}
hihi000 2008-05-28
  • 打赏
  • 举报
回复
请问楼主问题解决了吗?
vocanicy 2008-05-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 xiaogang_1 的帖子:]
我使用别人写好的一个记录集指针类,里面有5个成员函数,分别是
// BLOB 数据存取 ------------------------------------------
BOOL AppendChunk(FieldPtr pField, LPVOID lpData, UINT nBytes);
BOOL AppendChunk(long index, LPVOID lpData, UINT nBytes);
BOOL AppendChunk(LPCSTR strFieldName, LPVOID lpData, UINT nBytes);
BOOL AppendChunk(long index, LPCTSTR lpszFileName);
BOOL AppendChunk(LPCSTR strF…
[/Quote]

如果你想以bmp文件格式保存,就先转换成bmp文件
然后将文件写入数据库就可以了

devang 2008-05-27
  • 打赏
  • 举报
回复
Mark
快乐鹦鹉 2008-05-27
  • 打赏
  • 举报
回复
BOOL AppendChunk(LPCSTR strFieldName, LPVOID lpData, UINT nBytes);
用这个就行。第一个是字段名,第二个是数据地址,第三个是数据大小。

15,979

社区成员

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

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