Aufgabenstellung: Aus dem Dateisystem soll ein JPG in ein TImage geladen werden (funktioniert).
Das JPG soll in ein SQLite-Blob gespeichert werden (funktioniert). (Prozedur loadGBildClick)
Beim Retrieve des Blob aus SQLite in ein Stream wird zwar die Größe korrekt ausgegeben,
das Abbilden in ein TImage bleibt ergebnislos. (Prozedur retrieveGBild)
Hat jemand einen Rat für mich?
Code: Alles auswählen
procedure TbilderForm.loadGBildClick(Sender: TObject);
var
Jpg: TJpegImage;
Stream: TMemoryStream;
FileExt: string;
GraphType: TGraphType;
begin
OpenPictureDialog1.Options:=OpenPictureDialog1.Options+[ofFileMustExist];
if not OpenPictureDialog1.Execute then
exit
else begin
Jpg := nil;
Stream := nil;
try
Stream := TMemoryStream.Create;
FileExt := LowerCase(ExtractFileExt(OpenPictureDialog1.FileName));
if (FileExt = '.jpg') or (FileExt = '.jpeg') or (FileExt = '.jpe') then
begin
Jpg := TJpegImage.Create;
Jpg.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Picture.Assign(Jpg);
GraphType := gtJpeg;
Stream.Write(GraphType, 1);
Jpg.SaveToStream(Stream);
end;
Stream.Position := 0;
S:= ' insert into GBild (GName, GBild_Data, AufnameDat, Aktuell) '
+ 'values (:iGName,:iPic,0,0)';
with ZQGBild do begin
Active := False;
SQL.Clear;
SQL.Add(S);
ParamByName('iGName').AsString:= DBEdit8.Text;
ParamByName('iPic').SetBlobData(Stream.Memory,Stream.Size);
ExecSQL;
end;
except
jpg.Free;
Stream.Free;
raise;
end;
jpg.Free;
Stream.Free;
end;
end;
procedure TbilderForm.retrieveGBildClick(Sender: TObject);
var
Stream: TMemoryStream;
Jpg: TJpegImage;
Size: Integer;
myGName: String;
begin
Jpg := nil;
Stream := nil;
with ZQGBild do begin
SQL.clear;
SQL.Add('select * from GBild ');
SQL.Add('where GName = :iGName');
ParamByName('iGName').AsString := DBEdit8.Text;
ExecSQL;
Open;
myGname:= FieldByName('GName').AsString;
if not FieldByName('GBild_Data').IsNull then
try
Stream:= TMemoryStream.Create;
TBlobField(FieldByName('GBild_Data')).SaveToStream(Stream);
if Stream.Size > 0 then begin
showMessage('StreamSize='+intToStr(Stream.Size)+' Jpeg von '+myGName);
Jpg:= TJpegImage.Create;
Stream.Position := 0;
Jpg.LoadFromStream(Stream, Stream.Size);
Image1.Picture.Jpeg.Assign(Jpg);
end
else
Image1.Picture.Assign(nil);
showMessage('StreamSize = 0');
except
Image1.Picture.Assign(nil);
showMessage('McMurphy');
end;
Jpg.Free;
Stream.Free;
end;
end;