如何把wav文件存入数据库中?(20分)

  • 主题发起人 主题发起人 pzning
  • 开始时间 开始时间
P

pzning

Unregistered / Unconfirmed
GUEST, unregistred user!
如何把wav文件存入access数据库中,然后在程式中如何调用,请写细些,谢谢.
 
作为二进制数据来保存,都可以的。
Access里面为Ole字段类型。
function DBToDisk(Query_String, Column_Name, Target_Name: string): Boolean;
function DiskToDB(Query_String, Column_Name,Target_Name: string): Boolean;


function TForm1.DBToDisk(Query_String, Column_Name, Target_Name: string): Boolean;
var
l_FileStream: TFileStream;
begin
{从数据库中取出数据}
with Query1 do
begin
Close;
SQL.Text := Query_String;
Open;
end;

{将数据库中Image字段保存到硬盘下,存为文件}
l_FileStream := TFileStream.Create(Target_Name, fmOpenWrite or fmCreate);
l_FileStream.Position := 0;
TBlobField(Query1.FieldByName(Column_Name)).SaveToStream(l_FileStream);
l_FileStream.Free;

Query1.Close;
Result := True; //所有任务彻底完成,Function返回True
end;

function TForm1.DiskToDB(Query_String, Column_Name,Target_Name: string): Boolean;
var
l_FileStream: TFileStream;
begin
with Query1 do
begin
Close;
SQL.Clear;
SQL.Text := Query_String;
Open;
end;
Query1.Edit;

l_FileStream := TFileStream.Create(Target_Name, fmShareDenyNone);
l_FileStream.Position := 0;

TBlobField(Query1.FieldByName(Column_Name)).loadfromStream(l_FileStream);
Query1.Post;
l_FileStream.Free;

Result := True; //一切任务完成,返回True
end;
 
谢谢你写这么多,可是小弟看不明白:),我是说,把wav文件存入数据库,在程序中调用发音.不知
如何
 
从数据库中取出,存到文件里面,怎么调用文件发音,你知道的?
 
<delphi5開發陯指南>里面有一段代碼

和你的要求一樣

建議去看看
 
如何读数据库中的声音文件
 
开发人员指南里没有.
 
下面的從電子書中摘出,代碼弄不下來
你可以自己去看看
第28章982頁

14. BLOB 字段示例
此项目将创建一个使用户能把WAV文件保存到数据库表中并直接
从表中读取并播放的程序。程序开始先创建一个主窗体,所包含的组
件如图2 8 - 1 0所示。T Ta b l e组件通过D D B U t i l s别名映射到Wa v e z表,或
相同结构的其他表。表的结构如下所示:
字段名字段类型字段大小
Wa v e Ti t l e 字符2 5
F i l e N a m e 字符2 5
Wa v e B L O B
A d d按钮用于从磁盘向数据库表中添加一个WAV文件。对应于A d d按钮的O n C l i c k事件处理如下:
在这段代码中首先执行O p e n D i a l o g。当操作成功时,表t b l S o u n d s将被设置为添加模式,然后,
F i l e N a m e字段被赋值,接着B L O B字段Wa v e会被O p e n D i a l o g所指定的文件所填充。请注意,T B l o b F i e l d
字段的L o a d F r o m F i l e ( )方法使用方便,把文件存入B L O B字段的代码因此而更简洁。
与此类似,S a v e按钮用于把当前的Wa v e字段中的WAV声音数据保存到一个外部文件中。其代码
如下所示:

这里的代码可以更精简一些。S a v e D i a l o g对话框的文件名首先被初始化为数据库中的F i l e N a m e字
段。如果成功地打开S a v e D i a l o g对话框,就利用t b l S o u n d s Wa v e的S a v e To F i l e方法来把B L O B字段的内容
保存到一个文件中。
P l a y按钮用来从B L O B字段中读出WAV数据,然后再传递给A P I函数P l a y S o u n d ( ) ,利用它来播放声
音。P l a y按钮对应的代码如下:


在这个方法中,首先创建一个T B l o b S t r e a m的实例B。传递给T B l o b S t r e a m . C r e a t e ( )的第一个参数
是B L O B字段对象,第二个参数则指明是否要打开流,以何种方式打开。一般情况下,对B L O B的访问
是只读的,这时要用b m R e a d作为参数;如果既要可读又要可写,则用b m R e a d Wr i t e作为参数。
提示如果要以b m R e a d Wr i t e方式打开T B l o b S t r e a m流,数据集必须处于编辑、插入或添加模式。
然后,创建一个T M e m o r y S t r e a m的实例M,再把流B复制给流M,此操作需要数秒才能完成。其间,
光标会发生改变。P l a y S o u n d ( )函数用于播放WAV文件,其第一个参数需要传递一个文件名或一个内存
指针,因为T B l o b S t r e a m不支持以指针方式访问流数据,而T M e m o r y S t r e a m却可以通过其M e m o r y属性
实现,所以P l a y S o u n d ( )函数就通过M. Memory来播放指定的数据。在调用P l a y S o u n d ( )后,需要释放流
并恢复光标的形状。
// 初始化文件名
// 执行对话框操作
// 把b l o b数据保存到文件
// 创建b l o b流
// 出现等待光标
// 创建内存流
// 从b l o b复制到内存流
// 播放声音,如果出现问题则触发异常
// 整理
 
Ttable里的BLOB字段用loadfromfile将声音文件读入数据库
用savetofile存入本地文件,然后播放
 
请写例子,谢谢
 
你沒有那本書或電子版么?
上面就有完整代碼呵!
 
一般是将WAV文件及其路径保存到数据库中,而不是将WAV文件直接保存到数据库。
将WAV文件直接保存到数据库将会浪费数据空间,因不同WAV 文件长度不等。再者,不是
所有的数据库都支持存放二进制代码的字段。
 
我主要是想在程序中调用它,使它发音
 
后退
顶部