数据库读取二进制文件出现乱码或不能识别

jfsaka 2007-09-18 03:08:05
采用文件流的方法存取二进制文件,包括Word,Excel,Txt文件,BMP图片,MP3,wmv 等,可是在数据库读出来时Word文件等出现乱码,图片和MP3等出现文件不能识别的问题,是否是用文件流存取文件会出现数据丢失的情况呢?查了很多资料,都是推荐用文件流存取二进制文件,可是我这边却不行,找不出原因,请大家看看:

向数据库添加二进制文件:
procedure TUploadForm.btnUploadClick(Sender: TObject);
var
DataStream:TFileStream;
begin
ProgressBar1.Visible:=true;
if (edDataN.Text= ' ')or (edForm.Text= ' ')or(edProjectID.Text= ' ') then
begin
Application.MessageBox( '请输入必要的信息 ', '提示 ',mb_IconInformation+mb_defButton1);
exit;
end;
DataStream:=TFileStream.Create(OpenDialog.FileName,fmOpenWrite or fmCreate); //创建文件流
DataStream.Position:=0;
with qPublic do
begin
Close;
SQL.Clear;
SQL.Add( 'select * from '+DataName);
Open;
Edit;
FieldByName( 'data_id ').Value:=edProjectID.Text;
FieldByName( 'name ').Value:=edDataN.Text;
FieldByName( 'form ').Value:=edForm.Text;
FieldByName( 'capacity ').Value:=edCap.Text;
FieldByName( 'description ').Value:=Memo.Text;
TBlobField(FieldByName( 'data ')).SaveToStream(DataStream); //向数据库提交文件流
Post;
end;
end;

从数据库读出二进制文件:
procedure TDetailForm.btOpenClick(Sender: TObject);
var
tempStream:TFileStream;
begin
SaveDialog.Execute;
tempStream:=TFileStream.Create(SaveDialog.FileName,fmOpenWrite or fmCreate); //创建文件流
tempStream.Position:=0;
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add( 'select * from '+SSelectForm.getDDataName);
Open;
Edit;
TBlobField(FieldByName( 'data ')).LoadFromStream(tempStream); //从数据库读取文件流
end;
tempStream.Free;
end;
...全文
196 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqtkd 2012-04-26
  • 打赏
  • 举报
回复
顶,学习下下

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧