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

jfsaka 2007-09-18 08:51:21
采用文件流的方法存取二进制文件,包括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;

...全文
139 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jfsaka 2007-09-18
  • 打赏
  • 举报
回复
原来我已经没有分数可给了,各位大哥们请见谅啊~~

2,497

社区成员

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

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