1

Blob データ型を使用して MS-Access データベースに画像を保存する方法は? Record Type を使用してデータを保存したいと考えています。では、レコード タイプで画像を処理してデータベースに保存するにはどうすればよいでしょうか。

編集:画像でデータを保存したい。次のレコード タイプがあります。

type
  TPersonInfoRecType = Record
     FirstName: string[20];
     MiddleName: string[20];
     LastName: string[20];
     DateOfBirth: TDateTime;
     Age: integer;
     Gender: string[8];
     Mobile: string[11];
     LandLine: string[13];
     Adderss1: string[50];
     City: string[15];
     State: string[20];
     Country: string[20];
     ZipCode: string[6];
     Photo: TBlobField;
  end;
4

1 に答える 1

1

さまざまなタイプの画像を保存できる1つの可能性として、RegisterClassesのリストを短縮または拡張できます。

unit LoadSaveImageBlobs;

// 20120224 by Thomas Wassermann

interface
uses Classes,DB,Graphics,Jpeg,PngImage;

Procedure SavePicture2Blob(Blob: TBlobField; Picture: TPicture);
Procedure LoadPictureFromBlob(Picture: TPicture; Blob: TBlobField);
implementation

Procedure SavePicture2Blob(Blob: TBlobField; Picture: TPicture);
var
  ms, ms2: TMemoryStream;
  theClassName: AnsiString;
  len: Byte;
begin
  ms := TMemoryStream.Create;
  try
    Blob.Clear;
    theClassName := Picture.Graphic.ClassName;
    len := Length(theClassName);
    ms.WriteBuffer(len, 1);
    if len > 0 then
      ms.WriteBuffer(theClassName[1], len);
    ms2 := TMemoryStream.Create;
    try
      Picture.Graphic.SaveToStream(ms2);
      ms2.Position := 0;
      if ms2.Size > 0 then
        ms.CopyFrom(ms2, ms2.Size);
    finally
      ms2.Free;
    end;
    Blob.LoadFromStream(ms);
  finally
    ms.Free;
  end;
end;

Procedure LoadPictureFromBlob(Picture: TPicture; Blob: TBlobField);
var
  ms, ms2: TMemoryStream;
  len: Byte;
  theClassName: AnsiString;
  Graphic: TGraphic;
  GraphicClass: TGraphicClass;
begin
  ms := TMemoryStream.Create;
  Blob.SaveToStream(ms);
  ms.Position := 0;
  try
    ms.ReadBuffer(len, 1);
    SetLength(theClassName, len);
    if len > 0 then
      ms.ReadBuffer(theClassName[1], len);
    GraphicClass := TGraphicClass(FindClass(theClassName));
    if (GraphicClass <> nil) and (len > 0) then
    begin
      Graphic := GraphicClass.Create;
      ms2 := TMemoryStream.Create;
      try
        ms2.CopyFrom(ms, ms.Size - len - 1);
        ms2.Position := 0;
        Graphic.LoadFromStream(ms2);
      finally
        ms2.Free;
      end;
      Picture.Assign(Graphic);
    end;
  finally
    ms.Free;
  end;
end;


initialization
RegisterClasses([TIcon, TMetafile, TBitmap, TJPEGImage,TPngImage]);

end.
于 2012-12-18T12:18:37.130 に答える