使用Delphi XE2将oracle blob加载到内存中,并使用默认应用程序

时间:2015-06-17 09:05:54

标签: delphi blob delphi-xe2

我想知道是否有人可以帮我解决以下问题。

我已经将几千个文件(MSG,PDF,DOC,DOCX,XLS,XLSX等)上传到我们的Oracle数据库中,因为我们需要开始将文件保存到数据库中。

我想知道是否可以基本上将所选文件从数据库打开到内存中,然后继续使用默认应用程序打开该文件,而不必每次都将文件保存到本地磁盘上。

这意味着如果用户选择查看PDF文档,则应使用Adobe Reader打开,Word文档应使用Word打开,MSG文件应使用Outlook打开等。

我在互联网上搜索过,但在尝试寻找帮助我解决此事的信息方面却没有成功。

1 个答案:

答案 0 :(得分:0)

我设法找到了一个完美无缺的解决方案。

我只需要将'ShellAPI'添加到表单顶部的uses子句中,以便Delphi XE2识别'ShellExecute'命令。

以下是我的代码:

procedure Tdms_displayfiles_frm.download_btnClick(Sender: TObject);
var
  blob: TStream;
  filename : string;
begin
  blob := dms_download_ods.CreateBlobStream(dms_download_ods.FieldByName('fil_file'), bmRead);
  try
    blob.Seek(0, soFromBeginning);

    with TFileStream.Create('c:\Temp\' + dms_download_ods.FieldByName('fil_sequence').AsString + '_' + dms_download_ods.FieldByName('fil_filename').AsString, fmCreate) do
      try
        CopyFrom(blob, blob.Size)
      finally
        Free
      end;
  finally
    blob.Free
  end;
  filename := 'c:\Temp\' + dms_download_ods.FieldByName('fil_sequence').AsString + '_' + dms_download_ods.FieldByName('fil_filename').AsString;
  ShellExecute(0, nil, PChar(filename), nil, nil, SW_SHOWNORMAL);
end;

到目前为止,我尝试使用以下文件格式:PDF,MSG,DOC,DOCX,XLS和XLSX以及所有使用默认程序打开的文件。