如何使用Blob数据类型在MS-Access数据库中存储图像? 我想使用记录类型来存储数据。那么,如何处理Record Type中的图像以保存在数据库中?
编辑: 我想用Image存储数据。 我有以下记录类型:
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;
答案 0 :(得分: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.