Загрузка изображений в поля BLOB

Как загрузить изображение в BLOB-поле?

Имеется несколько способов загрузки изображения в BLOB-поле таблицы dBASE или Paradox. Перечислим три самых простых метода:

  • копирование данных из буфера обмена Windows в компонент TDBImage, связанный с полем BLOB;
  • применение метода LoadFromFile компонента TBlobField;
  • использование метода Assign для копирования объекта типа TBitmap в значение свойства Picture компонента TBDBImage. Первый способ, в соответствии с которым происходит копирование изображения из буфера обмена, наиболее удобен, если требуется добавить изображение в таблицу, и с приложением работает конечный пользователь. В этом случае компонент TDBImage выступает в роли интерфейса между BLOB-полем таблицы и изображением, хранящимся в буфере обмена. Метод PasteFromClipboard компонента TDBImage как раз и занимается тем, что копирует изображение из буфера обмена в TDBImage. При сохранении записи изображение записывается в BLOB-поле таблицы.

    Поскольку буфер обмена Windows может содержать данные различных форматов, то желательно перед вызовом метода CopyFromClipboard осуществлять проверку формата хранящихся в нем данных. Для этого необходимо создать объект TClipboard и использовать его метод HasFormat, позволяющий определить формат хранящихся в буфере данных. Имейте в виду, что для создания объекта TClipboard необходимо добавить модуль Clipbrd в секцию uses того модуля, в котором будет создаваться экземпляр объекта.

    Вот исходный код примера, копирующий содержание буфера обмена в компонент TDBImage, если содержащиеся в буфере данные имеют формат изображения:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      C: TClipboard;
    begin
      C := TClipboard.Create;
      try
        if Clipboard.HasFormat(CF_BITMAP) then DBImage1.PasteFromClipboard
        else ShowMessage('Буфер обмена не содержит изображения!');
      finally
        C.Free;
      end;
    end;
    
    Второй способ заполнения BLOB-поля заключается в загрузке изображения непосредственно из файла. Данный способ одинаково хорош как при создании приложения (формирование данных), так и при его использовании.

    Этот способ использует метод LoadFromFile компонента TBlobField, который применяется в Delphi для работы с dBASE-таблицами и двоичными Windows-полями или таблицами Paradox и графическими Windows-полями; в обоих случаях с помощью данного метода можно загрузить изображение и сохранить его в таблице.

    Методу LoadFromFile компонента TBlobField необходим единственный параметр типа String: имя загружаемого файла с изображением. Значение данного параметра может быть получено при выборе файла пользователем с помощью компонента TOpenDialog и его свойства FileName.

    Пример, демонстрирующий работу метода LoadFromFile компонента TBlobField с именем Table1Bitmap (поле с именем Bitmap связано с таблицей TTable, которой присвоено имя Table1):

    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Table1Bitmap.LoadFromFile('c:\delphi\images\splash\16color\construc.bmp');
    end;
    
    Третий способ для копирования содержимого объекта типа TBitmap в свойство Picture компонента TDBImage использует метод Assign. Объект типа TBitmap может быть как свойством Bitmap свойства объекта Picture компонента TImage, так и отдельного объекта TBitmap. Как и в методе, копирующем данные из буфера обмена в компонент TDBImage, данные изображения компонента TDBImage сохраняются в BLOB-поле после успешного сохранения записи.

    Ниже приведен пример, в котором задействован метод Assign. В нашем случае используется отдельный объект TBitmap. Для помещения изображения в компонент TBitmap был вызван его метод LoadFromFile.

    procedure TForm1.Button3Click(Sender: TObject);
    var
      B: TBitmap;
    begin
      B := TBitmap.Create;
      try
        B.LoadFromFile('c:\delphi\images\splashh\16color\athena.bmp');
        DBImage1.Picture.Assign(B);
      finally
        B.Free;
      end;
    end;