Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Загрузка BLOB из Oracle в память и открытие файлов в Delphi XE2

Delphi , Базы данных , BLOB поля

Открытие файлов из Oracle BLOB в памяти с помощью Delphi XE2

Вопрос о том, как загрузить файлы из базы данных Oracle, хранящиеся в виде BLOB (Binary Large Object), в память и открыть их с помощью стандартных приложений без сохранения на локальный диск, является актуальным для многих разработчиков. В данной статье мы рассмотрим, как решить эту задачу, используя Delphi XE2.

Проблема

Разработчики часто сталкиваются с необходимостью сохранения файлов в базе данных, что может быть вызвано различными причинами, например, обеспечением безопасности данных или ускорением доступа к ним. В случае с использованием Oracle, файлы могут быть сохранены в виде BLOB, что позволяет их хранить и обрабатывать как бинарные данные.

Однако, для пользователей удобно иметь возможность просматривать файлы непосредственно из базы данных, не сохраняя их на диск. Это может быть реализовано, если загрузить файл в память и открыть его с помощью стандартного приложения, ассоциированного с его типом.

Решение

Комментарии к вопросу указывают на то, что большинство приложений не поддерживают работу с потоками данных напрямую, а требуют наличия файла на диске. Таким образом, для реализации задачи необходимо создать временный файл на диске, который затем можно будет открыть с помощью стандартного приложения.

Пример кода на Object Pascal, который решает поставленную задачу:

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;

В этом коде используется компонент ShellExecute для открытия файла с помощью ассоциированного приложения. Перед этим файл извлекается из BLOB в память, но для этого создается временный файл на диске, что является необходимым условием для большинства приложений.

Примеры форматов файлов

Автор вопроса успешно применил данный метод для открытия файлов следующих форматов: PDF, MSG, DOC, DOCX, XLS и XLSX, и все они открылись с помощью стандартных программ.

Заключение

Для реализации загрузки BLOB из Oracle в память и последующего открытия файлов с помощью Delphi XE2 необходимо создать временный файл на диске и использовать функцию ShellExecute для запуска стандартного приложения. Это решение позволяет избежать необходимости сохранения файлов на локальный диск каждый раз, когда пользователь хочет их просмотреть.

Создано по материалам из источника по ссылке.

Вопрос касается загрузки файлов из Oracle BLOB в память и открытия их с помощью Delphi XE2 без сохранения на диск.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: BLOB поля ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-14 11:37:28/0.0033860206604004/0