CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

vb和MSSQL的图像保存

楼主latelord(龙过洋)2006-03-13 20:48:22 在 VB / 基础类 提问

我用VB6和MSSQL来编个程序,相片是image类型。用image控件来加载,  
   
  并与数据库邦定了。但更新后数据库里并没有存入相片。请问该如何来  
   
  加载并保存到数据库里? 问题点数:20、回复次数:8Top

1 楼Leftie(左手,为人民币服务)回复于 2006-03-13 21:14:16 得分 6

使用流对象保存和显示图片    
  打开vb6,新建工程。  
   
  添加两个按钮,一个image控件  
  注意:Access中的photo字段类型为OLE对象.  
  SqlServer中的photo字段类型为Image  
   
  '**   引用   Microsoft   ActiveX   Data   Objects   2.5   Library   及以上版本  
  ‘2.5版本以下不支持Stream对象  
  Dim   iConcstr   As   String  
  Dim   iConc   As   ADODB.Connection  
     
   
  '保存文件到数据库中  
  Sub   s_SaveFile()  
          Dim   iStm   As   ADODB.Stream  
          Dim   iRe   As   ADODB.Recordset  
          Dim   iConcstr   As   String  
   
          '读取文件到内容  
          Set   iStm   =   New   ADODB.Stream  
          With   iStm  
                  .Type   =   adTypeBinary       '二进制模式  
                  .Open  
                  .LoadFromFile   App.Path   +   "\test.jpg"  
          End   With  
         
   
          '打开保存文件的表  
          Set   iRe   =   New   ADODB.Recordset  
          With   iRe  
                  .Open   "select   *   from   img",   iConc,   1,   3  
                  .AddNew                   '新增一条记录  
                  .Fields("photo")   =   iStm.Read  
                  .Update  
          End   With  
         
   
        '完成后关闭对象  
          iRe.Close  
          iStm.Close  
  End   Sub  
   
   
  Sub   s_ReadFile()  
          Dim   iStm   As   ADODB.Stream  
          Dim   iRe   As   ADODB.Recordset  
          '打开表  
  Set   iRe   =   New   ADODB.Recordset  
  ‘得到最新添加的纪录  
          iRe.Open   "select   top   1   *   from   img   order   by   id   desc",   iConc,   adOpenKeyset,   adLockReadOnly  
          '保存到文件  
          Set   iStm   =   New   ADODB.Stream  
          With   iStm  
                  .Mode   =   adModeReadWrite  
                  .Type   =   adTypeBinary  
                  .Open  
                  .Write   iRe("photo")  
  ‘这里注意了,如果当前目录下存在test1.jpg,会报一个文件写入失败的错误.  
                  .SaveToFile   App.Path   &   "\test1.jpg"  
          End   With  
         
   
          Image1.Picture   =   LoadPicture(App.Path   &   "\test1.jpg")  
        '关闭对象  
          iRe.Close  
          iStm.Close  
  End   Sub  
     
   
  Private   Sub   Command1_Click()  
  Call   s_ReadFile  
  End   Sub  
   
   
  Private   Sub   Command2_Click()  
  Call   s_SaveFile  
  End   Sub  
   
   
  Private   Sub   Form_Load()  
          '数据库连接字符串  
          iConcstr   =   "Provider=Microsoft.Jet.OLEDB.4.0;Persist   Security   Info=False"   &   _  
                  ";Data   Source=F:\csdn_vb\database\保存图片\access图片\img.mdb"  
   
  ‘下面的语句是连接sqlserver数据库的.  
          ‘iConcstr   =   "Provider=SQLOLEDB.1;Persist   Security   Info=True;"   &   _  
  ‘   "User   ID=sa;Password=;Initial   Catalog=test;Data   Source=yang"  
     
   
        Set   iConc   =   New   ADODB.Connection  
        iConc.Open   iConcstr  
  End   Sub  
     
   
  Private   Sub   Form_Unload(Cancel   As   Integer)  
  iConc.Close  
  Set   iConc   =   Nothing  
  End   SubTop

2 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-13 22:07:46 得分 6

往数据库插入图片一般是用ADODB.Stream来做,或者用二进制方式读取文件,然后写入数据库中,请参考:  
   
  SqlServer中的photo字段类型为Image  
   
  Dim   cn   As   New   ADODB.Connection,rs   As   New   ADODB.Recordset  
  Private   Sub   Form_Load()  
          cn.CursorLocation   =   adUseClient  
          '这里给的是sql库的连接,具体的数据库连接请自己改过来         cn.Open   "Provider=SQLOLEDB.1;Password=;Persist   Security   Info=False;User   ID=sa;Initial   Catalog=Test;Data   Source=ljx"  
  End   Sub  
   
  Private   Sub   cmdSaveFile_Click()  
          saveFile   App.Path   &   "\temp.jpg"  
  End   Sub  
   
  Private   Sub   cmdReadFile_Click()  
          readFile   App.Path   &   "\temp1.jpg"  
  End   Sub  
   
  '保存文件到数据库  
  Private   Sub   saveFile(Byval   strFile   As   String)  
          Dim   tmp()   As   Byte  
          Dim   lngFile   As   Long  
          If   rs.State=adStateOpen   Then   rs.Close  
          rs.Open   "select   *   from   test   where   1<>1",   cn,   adOpenDynamic,   adLockOptimistic  
           
          lngFile   =   FreeFile  
          Open   strFile   For   Binary   As   #lngFile  
          ReDim   tmp(LOF(lngFile))  
          Get   #lngFile,   ,   tmp  
          Close   #lngFile  
          rs.AddNew  
          rs.Fields("ID").Value="001"  
          rs.Fields("pic").Value   =   tmp  
          rs.Update  
  End   Sub  
   
  '读取数据库的文件,保存到硬盘  
  Private   Sub   readFile(Byval   strFile   As   String)  
          Dim   tmp()   As   Byte  
          If   rs.State=adStateOpen   Then   rs.Close  
          rs.Open   "select   *   from   test   where   [ID]='001'",   cn  
          ReDim   tmp(rs.Fields(0).ActualSize)                                           '返回2进制文件的字节长度  
          tmp   =   rs.Fields("pic").Value  
          Open   strFile   For   Binary   As   #1  
          Put   #1,   ,   tmp  
          Close   #1  
  End   Sub  
   
  Private   Sub   Form_Unload(Cancel   As   Integer)  
          If   rs.State<>adStateClosed   Then   rs.Close  
          If   cn.State<>adStateClosed   Then   cn.Close  
          Set   rs   =   Nothing  
          Set   cn=Nothing  
  End   Sub  
   
  Top

3 楼cyyno1(GunRose)回复于 2006-03-13 22:14:43 得分 0

收藏Top

4 楼latelord(龙过洋)回复于 2006-03-14 00:18:28 得分 0

谢谢,可没太看明白。  
  我用了一个通用对话框来选择相片。  
  Private   Sub   cmdbrowse_Click()  
  Set   iStm   =   New   ADODB.Stream  
  comdia1.ShowOpen  
  comdia1.Filter   =   "所有文件(*.*)|*.*|"  
  If   comdia1.FileName   <>   ""   Then  
          'Image1.Picture   =   LoadPicture(comdia1.FileName)  
          With   iStm  
                  .Type   =   adTypeBinary       '二进制模式  
                  .Open  
                  .LoadFromFile   comdia1.FileName  
          End   With  
  End   If  
  End   Sub  
  再就在更新过程中加上:Adodc1.Recordset.Fields("相片")   =   iStm.Read  
  请问这样可以吗?  
   
  那个  
  .Write   iRe("photo")  
  ‘这里注意了,如果当前目录下存在test1.jpg,会报一个文件写入失败的错误.  
                  .SaveToFile   App.Path   &   "\test1.jpg"  
          End   With  
          Image1.Picture   =   LoadPicture(App.Path   &   "\test1.jpg")  
   
  可不可以不把文件写到文件夹下,直接加载到image控件中?如果可以应该怎样写?  
   
  问得可能很笨,不太懂,实在不好意思。请多多帮忙,不幸感激!  
  Top

5 楼DengXingJie(杰西)回复于 2006-03-14 08:41:41 得分 0

好貼值得收藏Top

6 楼vansoft(Vansoft Workroom)回复于 2006-03-14 09:04:15 得分 0

給人回答完了。  
   
  ADODB.Stream在微軟的網站上有示例代碼的。Top

7 楼Dengyu1997(Q&f)回复于 2006-03-14 09:51:15 得分 8

'//  
  '//   保存二进制数据到数据库(如图片、视频等)  
  '//  
  '//   使用示例:  
  '//   Rs.AddNew  
  '//   SaveBinaryDataToDB   App.Path   &   "\"   &   "img.jpg.",   Rs.Fields("ImgFile")  
  '//   Rs.Update  
  '//  
  Public   Function   SaveBinaryDataToDB(surFile   As   String,   fldField   As   ADODB.Field)   As   Boolean  
          On   Error   GoTo   ErrorHandler  
          Dim   Strm   As   ADODB.Stream  
     
          Set   Strm   =   New   ADODB.Stream  
          Strm.Type   =   1   '   adTypeBinary==1  
          Strm.Open  
          Strm.LoadFromFile   surFile  
          fldField   =   Strm.Read  
          Strm.Close  
          Set   Strm   =   Nothing  
           
          SaveBinaryDataToDB   =   True  
           
          Exit   Function  
  ErrorHandler:  
   
          SaveBinaryDataToDB   =   False  
           
  End   Function  
   
  '//  
  '//   取出二进制数据从数据库(如图片、视频等)  
  '//  
  '//   使用示例:  
  '//   GetBinaryDataFromDB   App.Path   &   "\"   &   "img.jpg.",   Rs.Fields("ImgFile")  
  '//  
  Public   Function   GetBinaryDataFromDB(dstFile   As   String,   fldField   As   ADODB.Field)   As   Boolean  
          On   Error   GoTo   ErrorHandler  
          Dim   Strm   As   ADODB.Stream  
   
          Set   Strm   =   New   ADODB.Stream  
          Strm.Type   =   adTypeBinary  
          Strm.Open  
          Strm.Write   fldField  
          Strm.SaveToFile   dstFile,   adSaveCreateOverWrite  
          Strm.Close  
          Set   Strm   =   Nothing  
           
          GetBinaryDataFromDB   =   True  
           
          Exit   Function  
  ErrorHandler:  
   
          GetBinaryDataFromDB   =   False  
           
  End   Function  
  Top

8 楼latelord(龙过洋)回复于 2006-03-16 00:00:20 得分 0

实在太感谢你们了!我运行成功了!Top

相关问题

  • VB里如何将图像保存为GIF格式的图像文件?
  • 在vb中如何实现把图像保存到ms sql server 2000中?
  • 保存图像的问题
  • 子窗体图像保存!
  • 急急急急急急!!!!VB的图像翻转和缩放能否同时处理??和保存??请求帮助
  • VB的图像翻转和缩放能否同时处理??和保存??请求帮助(LIKEVB) 送分的,真的
  • 如何保存当前屏幕图像?
  • 如何用ado.net保存图像??
  • 如何用API保存bmp图像
  • MFC中的OpenGL图像保存功能

关键词

  • vb6
  • 二进制
  • 数据库
  • 文件
  • 控件
  • 相片
  • strm
  • istm
  • lngfile
  • adodb

得分解答快速导航

  • 帖主:latelord
  • Leftie
  • faysky2
  • Dengyu1997

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo