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

Load oracle blob into memory with Delphi XE2 and open with default application

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

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

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

这意味着如果用户选择查看 PDF 文档,它应该用 Adob​​e 打开 Reader,Word 文档应该用 Word 打开,MSG 文件应该用 Outlook 打开,等等。

我已经在互联网上进行了搜索,但未能找到对解决此问题有帮助的信息。

好的

我已经找到了一个完美的解决方案。

我只需要将 '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,所有文件都使用默认程序打开。