Hi Sir Rufo
Zitat:
Ersichtlich ist da gar nichts, denn wir können nicht sehen, was in BildInsertQuery mit dem Stream passiert.
Delphi-Quellcode:
function TFDMySQLDml.BildInsertQuery(LThumbMemory: TMemoryStream; FolderId: TStringstream): integer;
var SQLString: string;
begin
SQLString := 'Insert Into Bildtabelle(Thumbnail, FolderID) Values (:LThumbMemory, :FolderID)';
FDQueryMain.SQL.Text := SQLString;
FDQueryMain.Params[0].AsStream := LThumbMemory;
FDQueryMain.Params[1].AsStream := FolderId;
FDQueryMain.ExecSQL(false);
if FDQueryMain.Active then
FDQueryMain.Close;
SQLString := 'Select Last_Insert_ID()AS LastID';
FDQueryMain.SQL.Text := SQLString;
FDQueryMain.Open;
if not FDQueryMain.IsEmpty then
result := FDQueryMain.FieldByName('LastID').AsInteger; //
end;
Wie gesagt: Im ersten Durchlauf scheint der Stream FolderId akzeptiert zu werden - ExecSQL läuft scheinbar(?) problemlos ab.
Soll dann im zweiten Durchlauf LThumbmemory neu befüllt werden, muss es erstmal geleert werden. Ich könnte wohl auch die Position zurücksetzen, dass hätte aber zur Folge, dass Reste des vorigen Bildes angezeigt werden, wenn das aktuelle Bild kleiner ist.
Zitat:
Diese Kopierorgie mit Picture, Bitmap, JpegImage, Stream ist schon sehr abstrus und könnte bequem auf ein Picture und JpegImage reduziert werden
Diese Kopierorgie macht durchaus Sinn - das Jpeg(LThumbnail) dient der Navigation in der Datenbank. Diese Dinger bringen es auf gerade mal 1.2 KB. Grössere Bilder würden die Navigation deutlich verlangsamen. Die Bitmap brauche zum einen, um ein Thumbnail im BMP-Format herzustellen. Ausserdem wollte ich sie ursprünglich auch in der
DB speichern, tue dies aber aktuell noch nicht, da die Dinger gut dreimal grösser sind. Benötigt werden die Bitmaps für die Bearbeitung der Bilder. Und zu guter letzt werden damit Jpegs in "normaler" Grösse hergestellt.
Zitat:
Eine
GUID als StringStream ist auch sehr merkwürdig
Da ich bei der Erzeugung der
GUID diese in eine Stringvariable speichere (Embarcadero-Vorschlag), schien mir dies naheliegend.
Embarcadero äussert sich nicht darüber (oder ich habs gründlich überlesen), wie ein
GUID binär gespeichert werden kann.
Einzig TPictur ist eventuell überflüssig; bei der Erstellung der Procedur schien es mir aber der einfachste weg zu sein, ein Bild zu laden. Das wäre allenfalls zu optimieren...
Gruss
Delbor
PS:
LPicture.LoadFromFile(FPathList[i]);
Das lädt erstmal ein NEF-Bild. Und davon brauche ich eine Bitmap und ein Jpeg. Nef-Bilder könnten auch mit WICImage geladen werden, aber das hab ich wieder verworfen. Soweit ich mmich erinnere, sind die WicImage-Bilder nicht mehr im Original vorhanden, wenn sie erstmal, in was auch immer, umgewamdelt wurden.