// Сохраняемprocedure TForm1.Button1Click(Sender: TObject);
var
blob: TBlobStream;
begin
blob := yourDataset.CreateBlobStream(yourDataset.FieldByName('YOUR_BLOB'), bmWrite);
try
blob.Seek(0, soFromBeginning);
fs := TFileStream.Create('c:\your_name.doc', fmOpenRead or
fmShareDenyWrite);
try
blob.CopyFrom(fs, fs.Size)
finally
fs.Free
end;
finally
blob.Free
end;
end;
// Загружаемprocedure TForm1.Button1Click(Sender: TObject);
var
blob: TBlobStream;
begin
blob := yourDataset.CreateBlobStream(yourDataset.FieldByName('YOUR_BLOB'), bmRead);
try
blob.Seek(0, soFromBeginning);
with TFileStream.Create('c:\your_name.doc', fmCreate) dotry
CopyFrom(blob, blob.Size)
finally
Free
end;
finally
blob.Free
end;
end;
Перевод контента на русский язык:
Код используется для сохранения и загрузки файлов из полей BLOB (Binary Large OBject) в приложении Delphi, использующем компоненты TDataSet и TBlobStream.
Сохранение файла
В этом разделе кода мы сохраняем файл, хранящийся в поле YOUR_IBM_BLOB dataset, в локальный файл с именем 'c:\your_name.doc'.
Мы создаем объект TBlobStream из поля BLOB, используя yourDataset.CreateBlobStream(yourDataset.FieldByName('YOUR_IBM_BLOB'), bmWrite). Параметр bmWrite указывает, что мы хотим записать в BLOB.
Мы перемещаемся к началу потока blob и открываем локальный файл с именем 'c:\your_name.doc' для чтения.
Мы копируем содержимое из потока blob в локальный файл, используя blob.CopyFrom(fs, fs.Size).
Наконец, мы освобождаем локальный файловый поток и поток blob, когда они больше не нужны.
Загрузка файла
В этом разделе кода мы загружаем файл из файла 'c:\your_name.doc' в поле YOUR_IBM_BLOB dataset, используя компоненты TFileStream и TBlobStream.
Мы создаем объект TBlobStream из поля BLOB, используя yourDataset.CreateBlobStream(yourDataset.FieldByName('YOUR_IBM_BLOB'), bmRead). Параметр bmRead указывает, что мы хотим прочитать из BLOB.
Мы перемещаемся к началу потока blob и открываем локальный файл с именем 'c:\your_name.doc' для создания.
Мы копируем содержимое из локального файла в поток blob, используя blob.CopyFrom(fs, fs.Size).
Наконец, мы освобождаем локальный файловый поток и поток blob, когда они больше не нужны.
Альтернативное решение:
Вместо ручного открытия файловых потоков и копирования данных между ними вы можете использовать метод SaveToStream компоненты TField для сохранения поля BLOB в файле, а метод LoadFromStream для загрузки из файла. Вот пример, как можно модифицировать ваш код для этого:
procedureTForm1.Button1Click(Sender:TObject);begin// Сохранение в файлyourDataset.FieldByName('YOUR_IBM_BLOB').SaveToStream(TFileStream.Create('c:\your_name.doc',fmCreate));// Загрузка из файлаTField(yourDataset).LoadFromStream(TFileStream.Create('c:\your_name.doc',fmOpenRead));end;
Эта APPROACH более проста и легче для чтения, так как она обертывает операции ввода-вывода файлов в методы компоненты TField.
Сохранение и чтение файлов в BLOB-полях Delphi-приложения выполняется с помощью класса TBlobStream, который обеспечивает доступ к файлам, хранящимся в БД в виде больших двоичных объектов (BLOB).
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.