数据库中存放不规则数据方法!
2005-01-11 01:08
411 查看
将要存入的文件定义为Tfilestream,可通过流式文件保存的BLOB型的数据库字段中.
至于从数据库字段中取出,也是首先将该字段保存为流savetostream,然后定义一个文件
流tfilestream,采用loadfromsteam即可.
该方法可以实现对任意文件类型的数据库存储.
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;
至于从数据库字段中取出,也是首先将该字段保存为流savetostream,然后定义一个文件
流tfilestream,采用loadfromsteam即可.
该方法可以实现对任意文件类型的数据库存储.
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;
相关文章推荐
- 将本地数据根据规则导入到数据库表的几种方法
- C#关于向数据库中插入数据时,有不规则自增列的处理方法
- 关于.net程序中读取不规则的excle表格中的数据,并插入到数据库的方法
- ormlite数据库存放sd卡,android卸载应用保留数据的方法
- 在VB.NET中 用代码 利用SQL语句创建数据库、表、存储过程、视图、索引、规则、修改表、查看数据等的方法
- 删除数据库中重复数据的几个方法
- PHP 数据库,读取数据集中数据的三种方法
- EntityFramework从数据库更新实体数据模型不成功的解决方法
- 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释
- 使用list方法插入datatable中的数据到数据库
- 四种数据库随机获取10条数据的方法
- jsp数据库基础之---使用post和get方法获取表单数据
- 数据库数据去重方法
- mysql学习碎片---数据库查询指定条数数据的方法
- ORACLE 快速批量导入文本数据到数据库(sqlldr工具)方法与分析
- 生成数据库测试数据的方法
- Java实现从数据库导出大量数据记录并保存到文件的方法
- 修改mysql数据引擎的方法- 提高数据库性能
- 向数据库添加数据有三种方法
- jvm 堆栈方法区数据存放和操作流程