关于数据文件和声音文件在数据库中的存入(100分)

  • 主题发起人 carnation
  • 开始时间
C

carnation

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Paradox7数据库,希望有一个字段能够存入声音文件或者一个文本文件,这个字段应该
定义成什么类型,如何存入,取出?能给一个例子吗?
 
查查有关图象存储的例子,都一样的,都是blob字段,流式读写
 
用BLOB格式字段!
 
blob字段,建议用'blob'检索一下已答问题.
 
图象的存储我已经明白了,可以用LoadfromFile结合DBImage控件,
但声音的存储该如和进行?
主要是声音存入后我该如何将它再用MediaPlayer控件放出来?
 
将要存入的文件定义为Tfilestream,可通过流式文件保存的BLOB型的数据库字段中.
至于从数据库字段中取出,也是首先将该字段保存为流savetostream,然后定义一个文件
流tfilestream,采用loadfromsteam即可.
该方法可以实现对任意文件类型的数据库存储.
 
谢谢guanhj
还有一个问题,是我在试验这件事情时发现的:
我用的是Paradox数据库,如果我在数据库中存放图片和声音,随着数据量的增多
.MB文件会变得很大,比如说一次存一张BMP就有几百K的大小,只要有十几条记录,
那个.MB文件就会很大了(几十M),这会不会影响性能?

我觉得有这几个处理方法:
1。在数据库中只存文件名,这样文件大小就会变小,但处理起来麻烦,而且文件数量很

2。 只允许存JPG之类的图,文件会小些
还有什么更好的处理方法吗?
 
我也很想知道!!!
JPEG的图片到了库里面还是BMP格式的吧!!??
 
carnation:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
请认真阅读大富翁论坛规则说明 http://www.delphibbs.com/delphibbs/rules.htm
 
看看《delphi开发人员指南》
982页
 
我有做过,是抄别人的,给你看看
VAR
filename:string;
//这里是从系统中取得一个临时文件
function gettemporyfilename:string;
const max_path=144;
var
lppathbuffer:pchar;
lpbuffer:pchar;
begin
getmem(lpbuffer,max_path);
getmem(lppathbuffer,max_path);
gettemppath(max_path,lppathbuffer);
gettempfilename(lppathbuffer,'tem',0,lpbuffer);
freemem(lppathbuffer,max_path);
gettempfilename(gettempdrive('c'),'tem',0,lpbuffer);
result:=strpas(lpbuffer);
freemem(lpbuffer,max_path);
end;
//将一个AVI文件写到blob字段中去

procedure tform1,button1click(sender:tobject);
var
filestream:tfilesteam;//to load the avi file
blobstream:tblobstream;//to save to the bolb
begin
application.processmessages;
button1.enabled:=false;
button2.enabled:=false;
filestream:tfilestream.create('ppath',fmopenread);//ppath是这个avi的路径
table1.edit;
//为table1avi字段创建一个blobstream
blobstream:=tblobstream.create(table1avi,bmreadwrite);
//移动到stream的首位
blobstream.seek(0,sofrombeginning);
//清空流数据
blobstream.truncate;
//将filestream的内容拷贝到blobstream
blobstream.copyfrom(filestream,filestream.size);
//释放流
filestream.free;
blobstream.free;
//添加记录
table1.post;
//使buttons可用
button1.enabled:=true;
button2.enabled:=true;
end;

procedure tform1.button2click(sender:tobject);
var
filestream:tfilestream;//a temp file
bolobstream:tblobstream;//the AVI blob
begin
//为AVI字段创建BLOB数据流
bolobstream:=tblobstream.create(table1avi,bmread);
if blobstream.size=0 then
begin
blobstream.free;
exit;
end;
//关闭media player
mediaplayer1.close;
//重值文件名
mediaplayer1.filename:='';
//刷新显示窗口
mediaplayer1.display:=panel1;
panel1.refresh;
//创建前删除同名的临时文件
if filename<>'' then
deletefile(filename);
//设置临时文件名
filename:=gettemporaryfilename;
//为临时文件创建文件流
filestream:=tfilestream.create(filename,fmcreate or fmopenwrite);
//拷贝blob到临时文件中
filestream.copyfrom(blobstream,blobstream.size);
//释放流
filestream.free;
blobstream.free;
//设置media player播放AVI文件
mediaplayer1.filename:=filename;
mediaplayer1.devicetype:=dtavivideo;
mediaplayer1.open;
mediaplayer1.play;
end;

procedure tform1.formdestroy(sender:tobject);
begin
//取消临时文件和media player的关联
mediaplayer1.close;
mediaplayer1.filename:='';
//删除临时文件
if filename<>'' then
deletefile(filename);
end;










 
存成blob类型的。
 
使用jpg格式存储图片到数据库中还是jpg格式
,可先使用image控件打开图片,动态建立TJpegImage类将图片转为jpg格式后按流保存
 
用ADO吧!!!
 
顶部