从数据库中读取docx格式的文件,显示内容有错误,点确认后又能打开;代码如下:
procedure TForm1.RzGroup7Items0Click(Sender: TObject);
var MemSize: Integer;
Buffer: PChar;
MyFile: TFileStream;
Stream: TadoBlobStream;
begin
MyFile:=TFileStream.Create( 'd:\temp.tmp ',fmCreate);
with adoQuery1 do
begin
open;
last;
Stream := TadoBlobStream.Create(FieldByName( 'text') as TBlobField, bmRead);
MemSize := Stream.Size;
Inc(MemSize);
Buffer := AllocMem(MemSize);
try
Stream.Read(Buffer^,MemSize);
MyFile.Write(Buffer^,MemSize);
finally
MyFile.Free;
Stream.Free;
end;
end;
if FileExists( 'd:\temp.DOCX')
then
DeleteFile( 'd:\temp.DOCX');
if FileExists( 'd:\temp.tmp ')
then
begin
RenameFile( 'd:\temp.tmp ', 'd:\temp.DOCX');
ShellExecute(handle, 'open', 'd:\temp.DOCX',Nil, nil,SW_SHOWNORMAL); end;end;
procedure TForm1.RzGroup7Items0Click(Sender: TObject);
var MemSize: Integer;
Buffer: PChar;
MyFile: TFileStream;
Stream: TadoBlobStream;
begin
MyFile:=TFileStream.Create( 'd:\temp.tmp ',fmCreate);
with adoQuery1 do
begin
open;
last;
Stream := TadoBlobStream.Create(FieldByName( 'text') as TBlobField, bmRead);
MemSize := Stream.Size;
Inc(MemSize);
Buffer := AllocMem(MemSize);
try
Stream.Read(Buffer^,MemSize);
MyFile.Write(Buffer^,MemSize);
finally
MyFile.Free;
Stream.Free;
end;
end;
if FileExists( 'd:\temp.DOCX')
then
DeleteFile( 'd:\temp.DOCX');
if FileExists( 'd:\temp.tmp ')
then
begin
RenameFile( 'd:\temp.tmp ', 'd:\temp.DOCX');
ShellExecute(handle, 'open', 'd:\temp.DOCX',Nil, nil,SW_SHOWNORMAL); end;end;
TBlobField(DataSet1.FieldByName('FileData')).SaveToFile(Path+FileName);
FileFormatConverters.exe