新疆软件开发

本站首页 软件开发 成功案例 公司新闻 公司简介 客服中心 软件技术 网站建设
  您现在的位置: 新疆二域软件开发公司 >> 开发语言 >> 文章正文

BLOB是如何使用的

在开发数据库管理系统时,根据设计需要,我们往往会设置BLOB类型的字段,BLOB字段的处理直接影响到系统的灵活性,下面笔者将简单介绍在PowerBuilder和Delphi编程环境下使用BLOB字段的方法。

  1.BLOB数据类型

  BLOB全称为Binary Large Objects,即大型二进制对象。实际上,在一些数据库系统中并不将其称之为BLOB字段,如Access中的OLE对象和备注类型、VFP中的MEMO类型、Oracle中的LONG BINARY类型、Sybase中的 LONG VARCHAR、SQL Server中的IMAGE等等,但从广义上讲,它们都属于BLOB类型。我们可以把BLOB区别为三种形式:声像数据、二进制数据和大文本数据。因此,最常见的应用就是存储图形、声音等对象,此外大型的二进制对象、OLE对象也可以通过BLOB类型存入数据库,如果文本对象过大,超出了文本类型的规定长度,则必须用BLOB字段进行存储。我们在经常使用的编程环境中并不能直接支持BLOB字段,因此需要调用相应的函数完成BLOB的使用。

 2
.Delphi环境下的BLOB使用

  实现文字材料的数据库管理时,经常会遇到特殊字符的输入和显示问题,如在档案管理中,档案文件名中经常会出现类似于 C3I 这样的上下标形式或其它特殊形式和字符,虽然特殊字符部分可以在编辑控件中显示或浏览,但大多数格式字符如上下标、根号等的显示是不允许的,因此可以利用BLOB字段解决特殊字符输入和显示问题。下面以PARADOX数据库环境为例简单介绍在Delphi环境下的BLOB使用方法。

  首先考虑到BLOB字段的性质是不可能直接进行显示的,即不能用类型转化之类的方法,但作为数据集字段可以调用诸如LOADFROMFILE或SAVETOFILE之类的函数,这与OLE控件的方法完全类似,因此可以在原文件表中建立一个新的字段,其类型为BLOB,并为此字段生成一个显示的全局变量。

  (1)录入

  首先完成OLE控件的编辑工作,按下录入按钮后将其内容保存到当前记录的NEW字段中,由于目前是处理编辑状态,所以标识当前字段的批示符为“I”。其实现方法是先利用SaveToFile将OLE控件中内容保存在临时文件TEMPOLE.NNN中,再将此文件内容调入到表中的NEW字段中(即BLOB字段),在调入前必须保证表处理为可编辑状态。

  procedure TForm1.Button1Click(Sender: TObject);

  //录入按钮的响应事件

  begin

   ole1.SaveToFile('tempole.nnn');

  //保存OLE控件中内容到临时文件中

   table1.edit; //设置表的编辑状态

   table1new.LoadFromFile('tempole.nnn');

  //调整表中NEW字段的内容为临时文件的内容

  DBGrid1.Fields[5].AsString:='1';

  //调整表中特殊标志字段的内容为1

  end;

  (2)显示

  下面的事件处理是将当前记录的NEW字段内容读出到OLE控件中,以便用户查看。按下显示按钮的作用就是将当前记录对应的特殊文件名在下面的OLE控件中进行显示。

  procedure TForm1.Button2Click(Sender: TObject);

  begin

  if DBGrid1.Fields[5].AsString='1' then

  //若含特殊字符

  begin

   table1new.SaveToFile('tempole.nnn');

  //将表NEW字段的内容保存为临时文件

   ole1.LoadFromFile('tempole.nnn');

  //将OLE控件的内容调整为临时文件内容

   end;

  end;

  (3)浏览

  实际上浏览的实现所采用的方法就是前面的录入和显示方法。

  在以上方法基础上就可以方便地实现带特殊字符的表格式浏览了。这里用到了动态创建OleContainer方法,并根据是否有特殊字符将内容调入。

  procedure TForm1.Button3Click(Sender: TObject);

  var

  temp:Array[1..100]of TOleContainer;

  i:integer;

  begin

   showole:=not showole;

  //是否浏览

   table1.First;

   i:=0;

   while not table1.eof do

   begin

   i:=i+1;

   if showole=true then

   begin

   temp[i]:=TOleContainer.Create(self);

  //动态创建OLE控件

   temp[i].parent:=form1;

   temp[i].width:=200;

  //设置每个动态生成的OLE控件的大小、位置

   temp[i].height:=25;

   temp[i].left:=DBGrid1.Left-200;

   temp[i].top:=temp[i].Height*(i-1)+DBGrid1.Top+20;

   if(table1ole.AsString='1') then //若含特殊字符

   begin

   table1new.SaveToFile('tempole.nnn');//取字段内容,保存为临时文件

   temp[i].LoadFromFile('tempole.nnn');

  //将内容调入到动态生成的OLE控件中

   end

   end

   else //取消浏览

   temp[i].visible:=false;

  //撤消动态生成的OLE控件的显示状态

   table1.Next;

   end;

  end;

  这里只利用按钮方式切换浏览状态,要求在浏览和取消浏览操作之间不要有其它操作,但在实际应用中我们是利用多页面的切换自动完成浏览状态的切换的。

  (3)补充

  在以上的作法中,需要声明一个table1new变量,即根据表中的NEW字段(BLOB类型)所声明的一个长久变量table1new:TblobField,在查询中不可能提前定义好所有可能的字段变量,因此可以用强制类型的方法实现。假设存在查询控件query1和OLE控件filename2,则显示时可以采用以下语句:

  with query1.fields.FieldByName('NEW') as TBlobField do savetofile('tempole.nnn');

  form1.filename2.LoadFromFile('tempole.nnn');

  以上简要介绍了在Delphi环境下BLOB数据类型的使用方法,希望大家在今后的编程中用好BLOB数据类型。 
作者:未知 | 文章来源:网络 | 更新时间:2007-10-26 11:07:05

  • 上一篇文章:

  • 下一篇文章:

  • 相关文章:
    Domino平台的优缺点分析
    使用经验整理-TestDirector8.0数据库备份和还原
    丢失日志文件后数据库还能不能恢复了
    delphi实现利用arp欺骗来实现计费功能
    一个delphi开发托盘程序的例子
    c#如何连接各类数据库
    基础学习:基于SQL的sysColumns 数据库字段表
    处理一个数据库实例在登陆时报ORA-27140错误
    利用CodeSmith生成sql
    如何解决MySQL数据库中文问题
    软件技术
    · 开发语言
    · Java技术
    · .Net技术
    · 数据库开发
    最新文章  
    ·搜集整理的asp.net的验证方
    ·各种FOR循环结构的整理
    ·软件项目开发中应该考虑那
    ·搜集整理的javascript sel
    ·软件开发中项目经理有那些
    ·学习如何在Lambda表达式进
    ·C++基础知识:结构体数据的
    ·C#实现短信发送程序的例子
    ·sun最近修补了一部分java的
    ·rss定制的另外一种实现方式
    ·delphi实现利用arp欺骗来实
    ·基础学习:基于WF的流程框
    ·网络编程中怎样得知一次数
    ·如何逆序输出单链表?
    ·软件开发过程中的性能设计
    关于我们 | 软件开发 | 下载试用 | 客服中心 | 联系我们 | 友情链接 | 网站地图 | 新疆电子地图 | RSS订阅
    版权所有 © 2016 新疆二域软件开发网 www.k8w.net All Rights Reserved 新ICP备14003571号
    新疆软件开发总机:0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆乌鲁木齐北京中路华联大厦A-5C 邮编:830000