CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  基础和管理

哪位大侠知道VB+ADO+Oracle操作图片或者文件存取?谢谢!

楼主njpancheng(king)2003-09-04 17:42:14 在 Oracle / 基础和管理 提问

新手在编程时遇到VB+ADO+Oracle操作图片或者文件存取问题,用long   raw或者lob字段,请哪位老大详细赐教? 问题点数:50、回复次数:5Top

1 楼echo20003(水哥)回复于 2003-09-04 17:49:25 得分 50

可以参考下面的代码:  
  '*********************************************************************  
  '**  
  '**程序类别:模块  
  '**功能描述:定义将图片保存到数据库和从数据库中取出图片的函数  
  '**修改日期:  
  '**  
  '*********************************************************************  
   
  '---------------------------------------------------------------------  
  '系统中使用的一些常数的定义  
  '---------------------------------------------------------------------  
   
  Private   Const   BLOCKSIZE   =   4096                                                                                             '每次读写块的大小  
   
  '将图片保存到数据库中  
  Public   Function   SavePicToDB(ByRef   ADOFeild   As   ADODB.Field,   PicFullName   As   String)   As   Boolean  
          Dim   SourceFile                     As   Long                                                                                   '定义读取图片时使用的文件号  
          Dim   FileLength                     As   Long                                                                                   '标识文件长度  
          Dim   NumBlocks                       As   Long                                                                                   '文件定义的块数量  
          Dim   bytDataBlocks()           As   Byte                                                                                   '定义数据块数组  
          Dim   LeftOver                         As   Long                                                                                   '文件被分块后剩余的字节数  
          Dim   i                                       As   Long                                                                                   '定义循环中使用的变量  
           
          On   Error   GoTo   ErrHandle  
           
          '-----------------------------------------------------------------  
          '获取一个尚未使用的文件号  
          '-----------------------------------------------------------------  
          SourceFile   =   FreeFile  
           
          '-----------------------------------------------------------------  
          '打开以二进制的方式图片文件  
          '-----------------------------------------------------------------  
          Open   PicFullName   For   Binary   Access   Read   As   #SourceFile  
           
          '-----------------------------------------------------------------  
          '获取打开的图片文件的长度(字节)  
          '-----------------------------------------------------------------  
          FileLength   =   LOF(SourceFile)  
           
          '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  
          '判断文件是否存在,0---不存在或无效;其他---存在  
          '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  
          If   FileLength   =   0   Then                                                                                                     '不存在...  
                  Close   #SourceFile  
                  SavePicToDB   =   False  
          Else  
   
                  '-------------------------------------------------------------  
                  '对文件按预定的块的大小进行分割  
                  '-------------------------------------------------------------  
                  NumBlocks   =   FileLength   \   BLOCKSIZE                                                                     '文件分割的块的数量  
                  LeftOver   =   FileLength   Mod   BLOCKSIZE                                                                   '文件分割后剩余的  
                   
                  '-------------------------------------------------------------  
                  '初始化字段中的内容---清空当前记录中本字段的内容  
                  '-------------------------------------------------------------  
                  ADOFeild.value   =   Null  
                   
                  '-------------------------------------------------------------  
                  '重新定义数据块的大小  
                  '-------------------------------------------------------------  
                  ReDim   bytDataBlocks(BLOCKSIZE)  
                   
                  '-------------------------------------------------------------  
                  '将图片各块的内容写入数据库相应字段  
                  '-------------------------------------------------------------  
                  For   i   =   1   To   NumBlocks  
                          Get   #SourceFile,   ,   bytDataBlocks()  
                          ADOFeild.AppendChunk   bytDataBlocks()  
                  Next  
                   
                  If   LeftOver   >   0   Then  
                           
                          '-------------------------------------------------------------  
                          '重新定义数据块的大小  
                          '-------------------------------------------------------------  
                          ReDim   bytDataBlocks(LeftOver)  
                           
                          '-------------------------------------------------------------  
                          '将图片剩余字节的内容写入数据库相应字段  
                          '-------------------------------------------------------------  
                          Get   #SourceFile,   ,   bytDataBlocks()  
                          ADOFeild.AppendChunk   bytDataBlocks()  
                  End   If  
                   
                  Close   #SourceFile  
          End   If  
           
          SavePicToDB   =   True  
          Exit   Function  
  ErrHandle:  
   
          Close   #SourceFile  
          SavePicToDB   =   False  
  End   Function  
   
  '从数据库中读取图片  
  Public   Function   GetPicFromDB(ByRef   ADOFeild   As   ADODB.Field,   PicFullName   As   String)   As   Boolean  
          Dim   SourceFile                     As   Long                                                                                   '定义读取图片时使用的文件号  
          Dim   FileLength                     As   Long                                                                                   '标识文件长度  
          Dim   NumBlocks                       As   Long                                                                                   '文件定义的块数量  
          Dim   bytDataBlocks()           As   Byte                                                                                   '定义数据块数组  
          Dim   LeftOver                         As   Long                                                                                   '文件被分块后剩余的字节数  
          Dim   i                                       As   Long                                                                                   '定义循环中使用的变量  
           
          On   Error   GoTo   ErrHandle  
           
          If   IsNull(ADOFeild)   Then  
                  GetPicFromDB   =   False  
                  Exit   Function  
          End   If  
   
          '-----------------------------------------------------------------  
          '获取数据库中存贮的图片的长度(字节)  
          '-----------------------------------------------------------------  
          FileLength   =   LenB(ADOFeild)  
   
          '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  
          '判断文件是否存在,0---不存在或无效;其他---存在  
          '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  
          If   FileLength   =   0   Then                                                                                                     '不存在...  
                  GetPicFromDB   =   False  
          Else  
   
                  '-------------------------------------------------------------  
                  '对文件按预定的块的大小进行分割  
                  '-------------------------------------------------------------  
                  NumBlocks   =   FileLength   \   BLOCKSIZE                                                                     '文件分割的块的数量  
                  LeftOver   =   FileLength   Mod   BLOCKSIZE                                                                   '文件分割后剩余的  
   
                  '-------------------------------------------------------------  
                  '获取一个尚未使用的文件号  
                  '-------------------------------------------------------------  
                  SourceFile   =   FreeFile  
   
                  '-------------------------------------------------------------  
                  '打开以二进制的方式图片文件(读写模式)  
                  '-------------------------------------------------------------  
                  Open   PicFullName   For   Binary   Access   Write   As   #SourceFile  
                   
                  '-------------------------------------------------------------  
                  '将图片从数据库相应字段中读出写入文件中  
                  '-------------------------------------------------------------  
                  For   i   =   1   To   NumBlocks  
                          bytDataBlocks()   =   ADOFeild.GetChunk(BLOCKSIZE)  
                          Put   #SourceFile,   ,   bytDataBlocks()  
                  Next  
   
                  If   LeftOver   >   0   Then  
   
                          '---------------------------------------------------------  
                          '将图片剩余字节的内容写入数据库相应字段  
                          '---------------------------------------------------------  
                          bytDataBlocks()   =   ADOFeild.GetChunk(LeftOver)  
   
                          Put   #SourceFile,   ,   bytDataBlocks()  
                  End   If  
   
                  Close   #SourceFile  
          End   If  
   
          GetPicFromDB   =   True  
          Exit   Function  
           
  ErrHandle:  
   
          Close   #SourceFile  
          GetPicFromDB   =   False  
  End   Function  
     
   
  Top

2 楼echo20003(水哥)回复于 2003-09-04 17:53:17 得分 0

可以参考下面的代码:  
  '*********************************************************************  
  '**  
  '**程序类别:模块  
  '**功能描述:定义将图片保存到数据库和从数据库中取出图片的函数  
  '**修改日期:  
  '**  
  '*********************************************************************  
   
  '---------------------------------------------------------------------  
  '系统中使用的一些常数的定义  
  '---------------------------------------------------------------------  
   
  Private   Const   BLOCKSIZE   =   4096                                                                                             '每次读写块的大小  
   
  '将图片保存到数据库中  
  Public   Function   SavePicToDB(ByRef   ADOFeild   As   ADODB.Field,   PicFullName   As   String)   As   Boolean  
          Dim   SourceFile                     As   Long                                                                                   '定义读取图片时使用的文件号  
          Dim   FileLength                     As   Long                                                                                   '标识文件长度  
          Dim   NumBlocks                       As   Long                                                                                   '文件定义的块数量  
          Dim   bytDataBlocks()           As   Byte                                                                                   '定义数据块数组  
          Dim   LeftOver                         As   Long                                                                                   '文件被分块后剩余的字节数  
          Dim   i                                       As   Long                                                                                   '定义循环中使用的变量  
           
          On   Error   GoTo   ErrHandle  
           
          '-----------------------------------------------------------------  
          '获取一个尚未使用的文件号  
          '-----------------------------------------------------------------  
          SourceFile   =   FreeFile  
           
          '-----------------------------------------------------------------  
          '打开以二进制的方式图片文件  
          '-----------------------------------------------------------------  
          Open   PicFullName   For   Binary   Access   Read   As   #SourceFile  
           
          '-----------------------------------------------------------------  
          '获取打开的图片文件的长度(字节)  
          '-----------------------------------------------------------------  
          FileLength   =   LOF(SourceFile)  
           
          '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  
          '判断文件是否存在,0---不存在或无效;其他---存在  
          '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  
          If   FileLength   =   0   Then                                                                                                     '不存在...  
                  Close   #SourceFile  
                  SavePicToDB   =   False  
          Else  
   
                  '-------------------------------------------------------------  
                  '对文件按预定的块的大小进行分割  
                  '-------------------------------------------------------------  
                  NumBlocks   =   FileLength   \   BLOCKSIZE                                                                     '文件分割的块的数量  
                  LeftOver   =   FileLength   Mod   BLOCKSIZE                                                                   '文件分割后剩余的  
                   
                  '-------------------------------------------------------------  
                  '初始化字段中的内容---清空当前记录中本字段的内容  
                  '-------------------------------------------------------------  
                  ADOFeild.value   =   Null  
                   
                  '-------------------------------------------------------------  
                  '重新定义数据块的大小  
                  '-------------------------------------------------------------  
                  ReDim   bytDataBlocks(BLOCKSIZE)  
                   
                  '-------------------------------------------------------------  
                  '将图片各块的内容写入数据库相应字段  
                  '-------------------------------------------------------------  
                  For   i   =   1   To   NumBlocks  
                          Get   #SourceFile,   ,   bytDataBlocks()  
                          ADOFeild.AppendChunk   bytDataBlocks()  
                  Next  
                   
                  If   LeftOver   >   0   Then  
                           
                          '-------------------------------------------------------------  
                          '重新定义数据块的大小  
                          '-------------------------------------------------------------  
                          ReDim   bytDataBlocks(LeftOver)  
                           
                          '-------------------------------------------------------------  
                          '将图片剩余字节的内容写入数据库相应字段  
                          '-------------------------------------------------------------  
                          Get   #SourceFile,   ,   bytDataBlocks()  
                          ADOFeild.AppendChunk   bytDataBlocks()  
                  End   If  
                   
                  Close   #SourceFile  
          End   If  
           
          SavePicToDB   =   True  
          Exit   Function  
  ErrHandle:  
   
          Close   #SourceFile  
          SavePicToDB   =   False  
  End   Function  
   
  '从数据库中读取图片  
  Public   Function   GetPicFromDB(ByRef   ADOFeild   As   ADODB.Field,   PicFullName   As   String)   As   Boolean  
          Dim   SourceFile                     As   Long                                                                                   '定义读取图片时使用的文件号  
          Dim   FileLength                     As   Long                                                                                   '标识文件长度  
          Dim   NumBlocks                       As   Long                                                                                   '文件定义的块数量  
          Dim   bytDataBlocks()           As   Byte                                                                                   '定义数据块数组  
          Dim   LeftOver                         As   Long                                                                                   '文件被分块后剩余的字节数  
          Dim   i                                       As   Long                                                                                   '定义循环中使用的变量  
           
          On   Error   GoTo   ErrHandle  
           
          If   IsNull(ADOFeild)   Then  
                  GetPicFromDB   =   False  
                  Exit   Function  
          End   If  
   
          '-----------------------------------------------------------------  
          '获取数据库中存贮的图片的长度(字节)  
          '-----------------------------------------------------------------  
          FileLength   =   LenB(ADOFeild)  
   
          '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  
          '判断文件是否存在,0---不存在或无效;其他---存在  
          '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  
          If   FileLength   =   0   Then                                                                                                     '不存在...  
                  GetPicFromDB   =   False  
          Else  
   
                  '-------------------------------------------------------------  
                  '对文件按预定的块的大小进行分割  
                  '-------------------------------------------------------------  
                  NumBlocks   =   FileLength   \   BLOCKSIZE                                                                     '文件分割的块的数量  
                  LeftOver   =   FileLength   Mod   BLOCKSIZE                                                                   '文件分割后剩余的  
   
                  '-------------------------------------------------------------  
                  '获取一个尚未使用的文件号  
                  '-------------------------------------------------------------  
                  SourceFile   =   FreeFile  
   
                  '-------------------------------------------------------------  
                  '打开以二进制的方式图片文件(读写模式)  
                  '-------------------------------------------------------------  
                  Open   PicFullName   For   Binary   Access   Write   As   #SourceFile  
                   
                  '-------------------------------------------------------------  
                  '将图片从数据库相应字段中读出写入文件中  
                  '-------------------------------------------------------------  
                  For   i   =   1   To   NumBlocks  
                          bytDataBlocks()   =   ADOFeild.GetChunk(BLOCKSIZE)  
                          Put   #SourceFile,   ,   bytDataBlocks()  
                  Next  
   
                  If   LeftOver   >   0   Then  
   
                          '---------------------------------------------------------  
                          '将图片剩余字节的内容写入数据库相应字段  
                          '---------------------------------------------------------  
                          bytDataBlocks()   =   ADOFeild.GetChunk(LeftOver)  
   
                          Put   #SourceFile,   ,   bytDataBlocks()  
                  End   If  
   
                  Close   #SourceFile  
          End   If  
   
          GetPicFromDB   =   True  
          Exit   Function  
           
  ErrHandle:  
   
          Close   #SourceFile  
          GetPicFromDB   =   False  
  End   Function  
     
   
  Top

3 楼chanet(牧师)回复于 2003-09-04 23:03:43 得分 0

 
  AppendChunk   方法  
  Top

4 楼njpancheng(king)回复于 2003-09-05 14:47:30 得分 0

好的,我试试,谢谢大虾Top

5 楼njpancheng(king)回复于 2003-09-05 15:47:19 得分 0

echo20003兄,函数中的PicFullName怎么赋值,  
  1。在存图片时,可以从文件框中得到;  
  2。但在取图片时,文件名怎么等到,还是随便取一个?Top

6 楼echo20003(水哥)回复于 2003-09-06 14:59:57 得分 0

随便取一个Top

相关问题

  • 谁会用BCB+ADO+ORACLE进行图片存取呢?
  • 求 ado 存取oracle blob(图片)的ocx! 要求不用BDE!
  • Oracle下图像的存取
  • ado如何存取excel?
  • 用ADO存取Excel文件
  • vb用ado联oracle碰到问题?
  • 如何存取Oracle Number(18)的字段?
  • 100分相送======Oracle存取问题
  • Oracle 数据库word文档的存取
  • 怎样在oracle中存取图片?

关键词

  • 文件
  • 数据库
  • 图片
  • 定义
  • dim
  • long

得分解答快速导航

  • 帖主:njpancheng
  • echo20003

相关链接

  • Oracle类图书

广告也精彩

反馈

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