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

Сохранение страницы TF1Book в BLOB-поле

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

Сохранение страницы TF1Book в BLOB-поле

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

uses vcf1, dbtables;


 procedure SaveSpreadsheet(F1Book: TF1Book);
 var
   BlobStream: TBlobStream;
   MyBlob: HGlobal;
   pblob: Pointer;
 begin
   with Datamodule1.Query1 do
   begin
     Set8087CW($133f);
     try
       Application.ProcessMessages;
       F1Book.SaveWindowInfo;
       MyBlob := GlobalAlloc(GMEM_MOVEABLE, 2000);
       try
         F1Book.WriteToBlob(MyBlob, 0);
         pBlob := globalLock(MyBlob);
         try
           Blobstream := TBlobStream.Create(TBlobField(FieldByName('QUOTE_BLOB')),
             bmWrite);
           try
             Blobstream.Write(pBlob^, GlobalSize(myBlob));
           finally
             Blobstream.Free;
           end;
         finally
           globalUnlock(MyBlob);
         end;
         F1book.IF1Book_Modified := False;
       finally
         globalFree(myblob);
       end;
     finally
       Set8087CW(Default8087CW);
       Application.ProcessMessages;
     end;
   end;
 end;

 //Depending on your Delphi Version (<D4), you will need: 
//D4 und fruhere Versionen brauchen noch: 

var
   Default8087CW: Word = $1332;

 procedure Set8087CW(NewCW: Word);
 asm
   MOV     Default8087CW,AX
   FLDCW   Default8087CW
 end;

Программный код на языке Delphi для сохранения содержимого объекта TF1Book в поле BLOB (Binary Large OBject) в базе данных. Вот подробное описание каждого участка кода:

Главная процедура: SaveSpreadsheet(F1Book: TF1Book)

  • Эта процедура принимает экземпляр объекта TF1Book как входной параметр и сохраняет его содержимое в поле BLOB в базе данных.
  • Процедура использует несколько переменных:
    • BlobStream: Объект TBlobStream, который будет использоваться для записи blob-данных в базу данных.
    • MyBlob: Переменная HGlobal, которая представляет собой блок памяти, где будут храниться blob-данные.
    • pblob: Переменная Pointer, которая указывает на блок памяти.

Установка соединения с базой данных: with Datamodule1. Query1 do

  • Этот кодовый блок устанавливает соединение с базой данных используя компонент Query1 из модуля Datamodule1.
  • Он устанавливает контрольное слово 8087 (CPU-related setting) в значение $133f и затем вызывает Application.ProcessMessages() для обработки любых pending сообщений.

Сохранение blob-данных: F1Book.WriteToBlob(MyBlob, 0);

  • Эта строка сохраняет содержимое F1Book в блоке памяти, представленном MyBlob.
  • Второй аргумент 0 указывает на начальный позицию в блоке памяти, где должны быть записаны данные.

Запись blob-данных в базу данных: BlobStream.Write(pBlob^, GlobalSize(MyBlob));

  • Эта строка записывает содержимое блока памяти MyBlob в базу данных используя BlobStream.
  • Метод Write() принимает два аргумента: указатель на блок памяти (pBlob) и размер блока памяти в байтах (GlobalSize(MyBlob)).

Очистка: globalFree(MyBlob);

  • Эта строка освобождает блок памяти, представленный MyBlob, используя функцию globalFree().
  • Другие переменные также очищаются: F1book.IF1Book_Modified устанавливается в False, а контрольное слово 8087 возвращается к своему 기본ному значению.

Альтернативное решение: Если вы используете более современную версию Delphi (D2009 или позднее), можно использовать метод TBlobField.SaveToFile() вместо создания собственного потока blob. Например:

F1Book.WriteToBlob(MyBlob, 0);
MyBlob := GlobalAlloc(GMEM_MOVEABLE, 2000);
try
  F1Book.SaveToFile(MyBlob, 'C:\Path\To\Save\File.blob');
finally
  globalFree(MyBlob);
end;

Этот код более компактен и легче для чтения, чем оригинальный код. Однако стоит отметить, что TBlobField.SaveToFile() требует Delphi D2009 или позднее, в то время как оригинальный код совместим с ранними версиями Delphi.

В статье описывается процедура сохранения страницы TF1Book в BLOB-поле с использованием компонента TBlobStream и функций GlobalAlloc, GlobalLock, GlobalFree для работы с глобальным памятью.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 10:38:27/0.0036370754241943/0