从数据库中读取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;

解决方案 »

  1.   

    直接写文件不行吗:
    TBlobField(DataSet1.FieldByName('FileData')).SaveToFile(Path+FileName);
      

  2.   

    谢谢,以上代码对doc 文档,没有任何问题,对docx就会出现打开错误,可能是word2010与word2003不同的问题,但是我也不知道有什么不同。
      

  3.   

    docx是2007版,doc是2003以下版。这个问题是你的系统安装的是office2003版,不能打开兼容docx文件。建议你安装一下支持2007的兼容包,约40M。另一办法,使用与Office兼容的WPS。问题应该能解决。如果找不到兼容包,我可以传给你。
      

  4.   

    兼容包文件名:
    FileFormatConverters.exe