在Access数据库中存储和导出多媒体课件

(整期优先)网络出版时间:2011-03-22
/ 1
一、前言
生物世界是一个丰富多彩的、充满活力的世界,多年以来,生物学教学工作者,就如何将这样一个世界生动展现在学生面前,进行了不懈的努力,制作了大量的不同形式的多媒体课件,使一个个具有真实形态、声音、处于自然状态下的活生生的生物展现在学生面前,对生物学的教学工作起到了积极地推动作用。
然而在实际应用中,各个课件都是以单个文件的形式存在的,且种类繁多,教师在授课时经常要花费很多的时间来进行查找和调用,如何对这些课件进行有效地管理、并进行有效的应用就成了摆在我们面前的问题,为了解决这一难题,我们经过多方的努力,使用C++Builder语言及Access个人数据库系统编制了一套《多媒体初中生物教学》软件,使得教师在讲解某一章节时可以很方便的从不同的角度调用相应的课件进行讲解,起到了较好的教学效果。
多媒体课件的表现形式有:PowerPoint、Flash、图片以及视频文件的等,如何将这些不同的形式的文件保存在Access个人数据库中,就成了编制这套软件的关键所在。
二、解决方法
在当前使用Access做为数据库的系统中,对于文件的管理大致分为两种情况,一种是文件并不实际存储在Access数据库中,Access数据库中只是记录文件的存储路径,这种方式虽然可行,但在系统移植时却非常麻烦,容易出现文件遗漏或路径不一致造成系统的运行错误;另一种是文件的内容实际存储在Access数据库中,需要时从数据库中取出,这种方式能够很好的解决移植的问题。
在Access数据库中表的字段类型中,有Ole Object的字段类型,可以用来存储各种不同类型的数据内容。目前关于Ole Object字段类型的存储相关的大量文章都是基于图片的存储,如何能够在Ole对象的字段类型中存储、取出各种不同类型文件的方法还很少看到。为了解决这一问题,我们设计了一个专门的类(MediaObject)来完成这一工作,其中最主要的函数有两个:
●ReadBLOB() 函数读取二进制文件磁盘的文件,并将其存储在 OLE 对象字段中。
●WriteBLOB() 函数将写入到磁盘文件的 OLE 对象字段中存储的二进制数据。
下面将列出两个函数的关键代码及解释:
ReadBLOB()
{
……….
TMemoryStream*fs=new TMemoryStream();//建立内存流对象
fs->Position=0; //指向流的起始位置
fs->LoadFromFile(File); //将文件内容加载到临时内存流中
TField *zd=NrDataSet->FieldByName("内容");//建立数据库字段对象
zd->Clear(); // 先清字段
TStream *bs=NrDataSet->CreateBlobStream(zd,bmWrite);//创建流对象
bs->Position=0;//指向流的起始位置
fs->SaveToStream(bs);//把内存流保存在流中
delete bs;//删除字段对象
delete fs;//删除内存流
………..
}
WriteBLOB()
{
………………………………..
TStream *bs=TmpDataSet->CreateBlobStream(TmpDataSet
->FieldByName("内容"),bmRead);//建立数据库字段的流对象
if(bs->Size>0)
{
TMemoryStream*fs = new TMemoryStream();//创建内存流
bs->Position=0;//指向流的其实闻之
fs->LoadFromStream(bs);//将流的内容读入到内存流
fs->SaveToFile(TmpWj);//将内存流的内容输出到文件
delete fs;//删除内存流对象
}
delete bs;//删除数据库字段的流对象
…………………………………
}
通过以上两个函数,可以实现各种数据文件在Access数据库中的保存和取出。
三、讨论
本文虽然讨论的是Access数据库的多媒体文件的存储、导出问题,但对于SQL Server及Oracle等大型的数据库系统也是完全适用的,同时我们这套系统除了用作教师的单机使用外,还可以移植到校园网等大型网络中,实现校园、远程教育等。
(作者单位:重庆市巴南区鱼洞南区学校)