(해당 내용은 모든 데이터셋(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)