본문 바로가기

데이터 엑세스

BLOB 컬럼에서 (이미지 등의)데이터 읽고 쓰기

(해당 내용은 모든 데이터셋(TDataSet을 상속받은 컴포넌트) 즉, FireDAC, dbExpress, dbGo(ADO) 등에 적용할 수 있습니다.)


대부분의 DBMS에서 Blob(Binary Large object) 타입의 컬럼을 만들 수 있습니다. 이 컬럼에는 이미지등의 큰 바이너리 데이터를 취급할 수 있습니다.


아래 코드는 Blob 컬럼에서 이미지를 읽고, 쓰는 델파이 예제입니다.


Blob 컬럼에 이미지 데이트 쓰기

var
  wic: TWICImage; // Microsoft Windows Imaging Component
  Stream: TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  try
    Image1.Picture.SaveToStream(Stream);
    qryPhoto.Edit; // 데이터셋 수정
    (qryPhoto.FieldByName('PHOTO_PHOTO') as TBlobField).LoadFromStream(Stream);
    qryPhoto.Post;
  finally
    Stream.Free;
  end;
end;


Blob 컬럼에서 이미지 데이터 읽기

var
  wic: TWICImage; // Microsoft Windows Imaging Component
  Stream: TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  wic := TWICImage.Create;
  try
    (qryPhoto.FieldByName('PHOTO_FIELD') as TBlobField).SaveToStream(Stream);
    if Stream.Size > 0 then
    begin
      try
        wic.LoadFromStream(Stream);
        Image1.Picture.Assign(wic);
      except
      end;
    end;
  finally
    Stream.Free;
    wic.Free;
  end;
end;

위에서 사용한 TWICImage는 Microsoft Windows Imaging Component를 캡슐화한 클래스로, 다양한 이미지 형식(Bitmap, JPEG, PNG, GIF, TIFF 등)을 로드할 수 있는 컨테이너 입니다.(http://docwiki.embarcadero.com/Libraries/en/Vcl.Graphics.TWICImage)