Как вставить картинку jpg в базу ms access 2003 из Lazarus
Добавлено: 29.01.2013 23:52:38
Потратил на решение много времени, нормальных средств нет, есть только такие хаки
Сама процедура
- Код: Выделить всё
var
aJpg:TJPEGImage;
InBMP: TBitmap;
begin
aJpg :=TJPEGImage.Create;
InBmp := TBitmap.Create;
aJpg.LoadFromFile(SysToUTF8('c:\test.jpg');
aJpg.CompressionQuality:=100;
InBmp.PixelFormat:=pf24bit;
InBmp.Assign(aJpg);
SavePictureToDB(InBmp,TBlobField(SQLQueryPictBase.FieldByName('picture')));
Сама процедура
- Код: Выделить всё
procedure SavePictureToDB(p:TBitmap;blob_field_stream:TBlobField);
var str,strb:TMemoryStream;
h:longint;
hb:array [1..4] of byte;
i:integer;
const
head1=#21#28#51#0#2#0#0#0#17#0#14#0#20#0#37#0;
head2='яяяяТочечный рисунок'#0'Paint.Picture';
head3=#0#1#5#0#0#2#0#0#0#7#0#0#0;
head4='PBrush'#0#0#0#0#0#0#0#0#0;
tail1=#0#0#0#0#0#0#0#0;
tail2=#0#0#1#5#0#0#0#0#0#0#0#173#5#254;
begin
str:=TMemoryStream.Create;
strb:=TMemoryStream.Create;
p.SaveToStream(strb);
str.Write(head1,16);
str.Write(head2,34);
str.Write(head3,13);
str.Write(head4,15);
h:=strb.Size+26;
for i:=1 to 4 do begin
hb[i]:=h mod 256;
h:=h div 256;
end;
str.Write(hb,4);
strb.Seek(0,soFromBeginning);
str.CopyFrom(strb,strb.Size);
str.Write(tail1,8);
str.Write(tail1,8);
str.Write(tail1,8);
str.Write(tail2,14);
strb.Seek(0,soFromBeginning);
blob_field_stream.LoadFromStream(str);
strb.Free;
str.Free;
end;