网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
向数据库中存取图片(BITMAP)
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
BITMAP
测试环境:windows xp2 vc6.0 access2003/sql2000
当前时间所限就先把关于BMP文件的操作总结了一下,在接下来会再总结一下其它几种图片在数据库的操作的。
转入下文:
个人感觉向数据库中写入和读取位图,也没有什么难的,重点还是在于对位图文件的读取,如果这一关能把握好的话,那也就没有问题了。如果哪位看过我的一篇《VC下显示位图的几种方法》其中有一段是关于,直接读取位图文件的,如果看明白了它,也今天这几个问题就会很好明白了。
进入正题:既然是向数据库中添加位图信息,那么有必须明白我们的数据是以什么形式存放在数据库的,当然没有别的方法,只能是二进制了,所以在创建数据库的时候,一定要注意选择的字段的类型,不然是添加下进去的。(刚开始的时候,我就遇到了这个问题,费了好长时间才搞定的。Access中的字段定义为”  OLE 对象”,sql2000中字义为image就行了。)
1> 读取一个位图,
CFile FilePic;//用来读取位图文件
 DWORD FileLen=0;//位图的长度
 char* FileBuff;//用于存放位图信息
 
 if(!FilePic.Open(FilePath,Cfile::modeRead))//打开位图文件
 {
  MessageBox("打开图片信息失败!");
  return false;
 }
 FileLen=FilePic.GetLength();//得到位图的长度
 FileBuff=new char[FileLen+1];//给位图文件申请内在空间
 memset(FileBuff,0,FileLen+1);//初始化位图文件的空间
 if(!FileBuff)//判断位图空间是否申请成功
 {
  MessageBox("给图片分配空间失败!");
  return false;
 }
 if(FilePic.Read(FileBuff,FileLen)!=FileLen)//读取位图信息,存入到FileBuff中去
 {
  MessageBox("读取图片信息失败!");
  return false;
 }
2> 把位图信息存放到VARIANT对象中,存入数据库中
char* pBuff= FileBuff;
 VARIANT varPic;//该对象用于存放位图信息
 SAFEARRAY *safeArray;//定义一个SAFEARRAY结构对象(对于这个东西,会有专门的文档大家可以看一下,网上很多,不过都差不多,最好去MSDN上找一下)
SAFEARRAYBOUND rgsabound;//此结构体用来定义SAFEARRAY的边界,详情见MSDN
 if(pBuff)//判断位图文件是否为空
 {
  rgsabound[0].lLbound=0;//定义下界
  rgsabound[0].cElements=DwPic;//定义上限
  safeArray=SafeArrayCreate(VT_UI1,1,rgsabound);// 使用SafeArrayCreate在堆上创建一维数组
  for(long i=0;i<(long)DwPic;i++)
  {
   SafeArrayPutElement(safeArray,&i,pBuff++);//传值
  }
  varPic.vt=VT_ARRAY|VT_UI1;//把值给VARIANT对象
  varPic.parray=safeArray; //把值给VARIANT对象
 }
3> 把数据写到数据库中
ACCESS2003:
pRecordset->AddNew();
 try
 {
 pRecordset->PutCollect("Name",_variant_t("zhang1"));
 pRecordset->GetFields()->GetItem("Picture")->AppendChunk(varPic);
 }
 catch(_com_error e)
 {
  MessageBox("Add pic to access is falied!");
 }
 pRecordset->Update();
sql2000:
 pRecordsetSql->AddNew();
 
 try
 {
  pRecordsetSql->PutCollect("Name",_variant_t("zhang1"));
  pRecordsetSql->GetFields()->GetItem("Pic")->AppendCh
  • 上一篇资讯: 2000/XP 下实现内存映射
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号