CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

Delphi对Oracle数据库BLOB字段的操作

楼主wlk2002(Searky)2005-04-15 12:18:05 在 Delphi / 数据库相关 提问

如何用Delphi对Oracle数据库的BLOB字段进行操作?  
  比如对图片(BLOB)字段进行添加和删除 问题点数:20、回复次数:3Top

1 楼luxuewei5214(小卢)(以下内容仅供参考)回复于 2005-05-25 12:55:07 得分 0

修改字段?还是修改记录?应该和其他的一样吧。帮顶!!!Top

2 楼yap1027()回复于 2005-05-25 13:18:54 得分 10

试试内存流的办法:  
  var  
      memstrm:TMemoryStream   ;  
  begin  
      memstrm:=TMemoryStream.Create;  
      try  
          memstrm.Clear;  
          memstrm.LoadFromFile(openpicturedialog1.FileName);  
          with   adoquery1   do  
          begin  
              insert;              
              TBlobField(FieldByName('PIC')).LoadFromStream(memstrm);  
              Post;  
          end;  
      finally  
          memstrm.Free;  
      end;  
  end;Top

3 楼lwjghhh(迷茫中)回复于 2005-05-25 13:23:43 得分 10

我是用存储过程来做,你直接用DELPHI调用存储过程就可以了。  
   
  因为做项目,需要使用BFILE字段存储图像文件,所以进行了一些研究。  
   
   
  bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对    
   
     
   
  oracle来说是只读的,也不参与事务性控制和数据恢复    
   
     
   
  bfile的基本操作如下:    
   
     
   
     
   
  1.先在oracle数据库中下面我们建立一个目录别名,用于将文件定位指针映射到文    
   
     
   
  件系统:      
   
     
   
    create   DIRECTORY   'tmpdir'   AS   '/tmp';      
   
    tmpdir表示逻辑目录名,'/tmp'是实际目录。   注意该目录oracle应该有读权限    
   
     
   
  然后根据需要授权    
   
    GRANT   READ   ON   DIRECTORY   bfile_dir1   TO   scott;    
   
  建立一个含有bfile字段的表    
   
    create   table   bfiletest(id   number(3),   fname   bfile);    
   
    建立一个含有BLOB字段的表  
   
   
  create   table   blobtest(id   number(3),ablob   blob);  
   
  2.插入数据    
   
    这里需要使用bfilename来进行bfile字段的insert   或者   update操作    
   
     
   
    INSERT   INTO   bfiletest    
   
            VALUES   (1,   BFILENAME   ('tmpdir',   'tmptest'));    
   
     
   
        bfilename的参数1是DIRECTORY名,参数2是文件名。注意:这一行中插入的是    
   
     
   
  一个指向/tmp/tmptest的文件定位指针映射,不是文件本身。    
   
     
   
  3.读取bfile    
   
         
   
        通过使用dbms_lob包进行可以对bfile读入到blob/clob对象中操作(只读)      
   
  CREATE   OR   REPLACE   PROCEDURE   loadLOBFromBFILE_proc(  
  TID   IN   NUMBER,rfilename   in   varchar2,rfiledir   in   varchar2,upmessage   out   varchar2)    
  AS    
        Dest_loc               BLOB;    
        Src_loc                 BFILE;  
  BEGIN  
      INSERT   INTO   BLOBTEST(ID,ABLOB)   VALUES(TID,EMPTY_BLOB())   RETURN   ABLOB   INTO   DEST_LOC;  
   
      Src_loc   :=   BFILENAME(rfiledir,rfilename);  
               
   
        /*   如果bfile文件实际存在   */    
        IF   (DBMS_LOB.FILEEXISTS(Src_loc)   !=   0)    
        THEN    
                /*   打开bfile源文件   */      
                DBMS_LOB.OPEN(Src_loc,   DBMS_LOB.LOB_READONLY);    
                /*   打开目标blob:   */      
                DBMS_LOB.OPEN(Dest_loc,   DBMS_LOB.LOB_READWRITE);    
                /*从文件中装入   */    
                DBMS_LOB.LOADFROMFILE(Dest_loc,   Src_loc,DBMS_LOB.GETLENGTH(Src_loc));    
                /*   记得关闭:   */      
                DBMS_LOB.CLOSE(Dest_loc);    
                DBMS_LOB.CLOSE(Src_loc);    
                COMMIT;  
                upmessage   :=   '0';    
        END   IF;    
        EXCEPTION    
                WHEN   OTHERS   THEN    
                      ROLLBACK;  
                      upmessage   :=   '操作失败';    
   
  END;  
   
   
  有一点需要注意,目录名要用大写,如以上的例子,调用BFILENAME时,要用MYFILE,而不能使用myfile  
   
  Top

相关问题

  • 在Oracle中写BLOB字段
  • 如何在ORACLE中保存BLOB字段
  • 用 ADO 对 Oracle blob 字段读写
  • oracle中blob字段写入问题
  • ★★★Oracle BLOB字段的读问题★★★
  • Oracle中BLOB字段的读取问题
  • 问题:用DELPHI读写ORACLE中的BLOB类型字段(内详),请高手指点!
  • Postgres里有没有象Oracle的Blob这种字段,是什么字段?
  • 在delphi中怎样读写oracle的LONG行字段
  • 如何判断oracle的blob字段的长度

关键词

  • 字段
  • 文件
  • dbms
  • 数据库
  • 指针
  • delphi
  • oracle
  • bfile
  • memstrm
  • lob

得分解答快速导航

  • 帖主:wlk2002
  • yap1027
  • lwjghhh

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

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