数据库读取二进制文件出现乱码或不能识别
采用文件流的方法存取二进制文件,包括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;