`
javatoyou
  • 浏览: 1018352 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Delphi处理SQL Server多媒体数据

 
阅读更多
1.多媒体数据的存储

  多媒体信息包括图像、声音和视频等,它们都是以二进制数据集合的形式存在的,在本系统中处理的对象是图像。 SQL Server提供了Image数据类型来存储可变长度二进制数据(大小范围为0~2GB)。但Image字段并不能将多媒体数据直接装入,必须经过一些中 间步骤才能将数据存进去。下面以图像数据的存储为例,给大家介绍怎样在Delphi中实现这些中间步骤。

  Delphi中的TStream数据类型以流的形式对字符或非字符数据进行存储,就像在内存中开辟了一个大小可变的临时缓存区。它不仅能方便地对外部文件进行读写,而且还可以将流中的全部数据直接转入数据库,所以用它作桥梁来完成数据存入工作是非常合适的。

  下面的SavetoImage函数的功能是将TStream数据存入数据表的Image字段中。

function SavetoImage(const Stream:TStream;const AField:TField):boolean;
var
FieldStr:string;
PFieldStr:PChar;
begin
Result:=false;
if (Assigned(AField)) and (Assigned(Stream)) then
begin
try
Stream.Seek(0,0);
SetLength(FieldStr,Stream.Size);
PFieldStr:=PChar(FieldStr);
Stream.Read(PFieldStr^,Stream.Size);
AField.Value:=FieldStr;
Result:=true;
except
end;
end;
end;

  下面是调用SavetoImage函数完成图像数据存储的程序片段。

Var
FS:TFileStream;
begin
FS:=TFileStream.Create('C:Car001.jpg',fmOpenRead);
SavetoImage(FS,Adodataset1.FieldBy
Name('st_img'));
FS.Free;
end;

  其中,Adodataset1是与数据库进行连接的ADO数据集控件,st_img为Image字段。

  2.多媒体数据的转移

   利用SQL Server所带的BCP实用工具,可以很方便地将数据库部分或全部数据复制出来,包括二进制数据。对复制出的多媒体数据可以通过网络或移动存储设备将它 们转移到远端的监控电脑上,再利用BCP将它们复制到监控数据库中,以便对多媒体数据进行回放或做其它处理。下面是简化了的将数据从数据库复制到外部文件 和从外部文件复制入数据库的程序片段。

var
s1:string;
begin
s1:='bcp "select * from st2002..st2002_sf where st_flag=1" queryout c:Media_data.dat -N -P -S sunnynthy2002';
winexec(PChar(s1),sw_show);
end;

   其中“select * from st2002..st2002_sf where st_flag=1”表示从st2002数据库的st2002_sf表中提取数据,“c:Media_data.dat”为输出数据文件,参数 queryout表示从查询中复制数据到外部文件,-N表示进行大容量数据复制操作,-P表示使用默认密码,-S提定进行数据复制操作的数据库服务器或实 例。

var
s1:string;
begin
s1:= 'bcp ST2002..ST2002_SF in c:Media_data.dat -n -E -P -S sunnynt hy2002';
winexec(PChar(s1),sw_show);
end;

  其中参数in表示将数据从外部文件复制到数据表中。

  3.多媒体数据的回放

  同存储的方法类似,多媒体数据的回放也要借助TStream数据类型作桥梁,而且它基本上是存储的逆过程。

  LoadfromImage函数的功能是将数据表的Image字段数据装入TStream中。

function LoadfromImage(const AField:TField;const Stream:TStream):boolean;
var
ResultStr:string;
PResultStr:PChar;
begin
Result:=false;
if (Assigned(AField)) and (Assigned(Stream)) then
begin
try
ResultStr:=AField.Value;
PResultStr:=PChar(ResultStr);
Stream.Write(PResultStr^,length(Result
Str));
Stream.Seek(0,0);
Result:=True;
except
end;
end;
end;

  下面是调用LoadfromImage函数将数据表Image字段中的图像数据转出到外部文件中并利用图像显示控件回放图像的程序片段。

var
FS:TFileStream;
begin
FS:=TFileStream.Create('c:Car001.jpg',fmCreate);
LoadfromImage(adodataset1.fieldby
name('st_img'),FS);
FS.Free;
image1.picture.LoadFromFile('c:Car001.jpg');
end;


  其它多媒体数据类型如声音、视频等的转出过程与图像的转出完全相同,只是回放部分应针对不同媒体类型采用不同的媒体播放控件。
分享到:
评论

相关推荐

    SQLSERVER数据库写入多媒体文件

    Delphi向SQLSERVER数据库存入多媒体文件,把一首歌曲的属性信息存入数据库中,同时把歌曲的内容也存入到数据库中,虽然平时大多数不这么用,但出于学习Delpih数据库操作的目的,有空了就参考一下源码的实现思路吧。

    Delphi从SqlServer中提取多媒体音乐文件

    Delphi与数据库结合的例子,从SqlServer中提取多媒体文件,包括音乐文件和视频文件都可以,Delphi7核心代码都在,数据库太大了,这里不上传了,一般看代码就行了,真需要的话,自己参照代码可重建数据库字段,造成便...

    delphi保存文件到数据库中

    delphi保存文件到数据库中

    论信息管理系统软件在高校多媒体课件开发中的作用——以软件SQL SERVER2005与Delphi7.0为例.pdf

    论信息管理系统软件在高校多媒体课件开发中的作用——以软件SQL SERVER2005与Delphi7.0为例.pdf

    Delphi7 编程 100 实例

    ToolBar工具栏控件的使用 动态建立主菜单选项 窗口界面的动态分隔条...多媒体播放器 播放AVI文件 根据客户端IP地址获取计算机名 实现多线程IP和DomainName相互转换 Windows2000下的Popup发送功能 ...

    Delphi编程100例

    像处理文本资料一样处理数据表中的信息 远程数据库登录 远程数据库的离线处理 在远程数据库中实现主从表关系 动态设置远程数据库的查询参数 在远程数据库中计算统计值 多线程与数据库 使用远程存储过程 数据模块的...

    Delphi7编程100例

    像处理文本资料一样处理数据表中的信息 远程数据库登录 远程数据库的离线处理 在远程数据库中实现主从表关系 动态设置远程数据库的查询参数 在远程数据库中计算统计值 多线程与数据库 使用远程存储...

    《Delphi7编程100例》代码

    ToolBar工具栏控件的使用动态建立主菜单选项窗口界面的动态分隔条动态设置...多媒体播放器播放AVI文件根据客户端IP地址获取计算机名实现多线程IP和DomainName相互转换Windows2000下的Popup发送功能如何实现Ping操作实现...

    Delphi开发范例宝典目录

    实例269 从SQL Server数据库中提取多媒体文件 347 实例270 向SQL Server中存储Word文档 348 实例271 从SQL Server中提取Word文档 349 8.4 SQL Server服务器应用 350 实例272 和服务器时间同步 350 实例273...

    80例上手Delphi7编程(完全版)+源码

     实例6 利用ADO的从SQL Server 2000中读取数据  实例7 多媒体数据库的使用  实例8 IntraWeb技术的实现  实例9 Rave报表的数据库使用  08网络与通讯  实例一 用DELPHI实现网络信使服务  实例七...

    某服装工厂进销存系统Delphi源代码.rar

    某服装工厂进销存系统Delphi源代码,数据库基于SQLSERVER,用到了三方控件,系统主要功能模块:基础资料、业务管理、报表统计、系统管理等功能,测试前请确保数据库正确连接,否则可能会导致功能出错。本系统功能...

    delphi7编程百例

    ToolBar工具栏控件的使用 动态建立主菜单选项 窗口界面的...多媒体播放器 播放AVI文件 根据客户端IP地址获取计算机名 实现多线程IP和DomainName相互转换 Windows2000下的Popup发送功能...

    基于GIS的校园环境多媒体导航系统设计 (2003年)

    从系统设计的角度,分析了地理信息系统技术、多媒体技术和应拟现实技术在校圈环境导杭系统中应用的可行性,介绍了基于GIS的校园环境导航系统的墓本内容和系统组成,利用Delphi7.O,MapX5.0和SQLServer2000等软件工其实现...

    powerbuiler 12.5破解版

    PowerBuilder没有像VB、Delphi那样提供开发多媒体的控件,但并不是说利用PowerBuilder就不能开发多媒体。下面就介绍利用 powerbuilder是美国著名的数据库应用开发工具,现已被Sybase收购,推出的可视化数据库集成...

    OSEICQ即时通讯软件(开源例子)

    不参与客户之间的信息交换(类似BT),服务器可以为分布式集群,如果数据库为SQL SERVER 2000以上版本可以使用故障转移(负载均衡)大大增强服务端的并发和负载,服务端用户登录数并发为1秒300。 服务器负载说明: ...

    软件工程工资管理系统

    在Microsoft SQL Server 2000的企业管理器中完成数据库和数据表的创建,具体SQL脚本请参见附录gz.sql SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_...

    JAVA上百实例源码以及开源项目源代码

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    易语言程序免安装版下载

    修改外部数据库在4.12版中导致的不兼容问题,并增加了对MS SQL Server数据库中image和text字段类型的说明。 7. 修改扩展界面支持库一,禁止透明标签在父窗口刷新时自动刷新,以解决其导致窗口刷新缓冲的问题。 8....

    JAVA上百实例源码以及开源项目

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java源码包---java 源码 大量 实例

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

Global site tag (gtag.js) - Google Analytics