![]() |
Datenbank: MSSQL • Version: 2016 • Zugriff über: SDAC
Speichern Image als Blob-Field
Hallo,
ich versuche mit Delphi 10.3.3. FMX Images (Kamera Bilder) in MSSQL zu speichern und verwende dabei folgenden Code: In der Datenbank wird zwar der Datensatz angelegt, jedoch bekomme ich beim Auslesen der Daten aus der DB die Meldung: "Nicht unterstütztes Stream-Format". MSQuery ist die Query-Komponente von SDAC. Images, die ich in der VCL-Version mit LoadFromFile eingelesen und in die DB geschrieben habe, lassen sich korrekt auslesen und anzeigen. procedure TForm2.save_blob_to_DB(Sender: TObject); var MStream: TMemoryStream; sql_str : string; _rec_cnt : integer; begin MStream := TMemoryStream.Create; try MSQuery1.Close; MSQuery1.SQL.Clear; sql_str := 'select * from sign'; MSQuery1.SQL.Add(sql_str); MSQuery1.Open; _rec_cnt := MSQuery1.RecordCount; MStream.Position := 0; Image2.Bitmap.SaveToStream(MStream); MSQuery1.Append; MSQuery1.FieldByName('ID').AsInteger := _rec_cnt + 1; MSQuery1.FieldByName('DateTime').AsDateTime := now; TBlobField(MSQuery1.FieldByName('image1')).LoadFro mStream(MStream); MSQuery1.Post; MSQuery1.Close; except on E: Exception do begin ShowMessage('Error: ' + E.ClassName + ' ' + E.Message); end; end; MStream.Free; end; Wo könnte mein Problem liegen? Gruß jangbu |
AW: Speichern Image als Blob-Field
CreateBlobStream ist dein Freund.
|
AW: Speichern Image als Blob-Field
Hallo,
Delphi-Quellcode:
Kann es sein, dass danach wieder das Zurücksetzen fehlt
MStream.Position := 0;
Image2.Bitmap.SaveToStream(MStream); MStream.Position := 0; fehlt? Sonst lädt das TBlobField(MSQuery1.FieldByName('image1')).LoadFro mStream(MStream); gar nichts in dein image1-Feld. |
AW: Speichern Image als Blob-Field
Jupp, viel LoadFrom- und SaveTo-Methoden arbeiten ab der aktuellen Position (bis zum Ende).
Ist Position nicht am Anfang oder gar ganz am Ende, dann das eine Länge von 0 ergeben. Wenn an der Codeposition die Quelle nicht 100% bekannt ist, weil nicht erst wenige Zeilen davor der Stream erstellt wurde und definitiv am Anfang steht, und wenn immer alles behandelt werden muß, dann am Besten direkt davor immer Position:=0 einfügen. Eventuell auch nochmal danach, wenn der Stream raus aus der Methode geht und du sicherstellen willst, dass es später nicht ebenfalls vergessen. (z.B. nach dem Laden des Streams mit LoadFrom/Write/Copy/...) |
AW: Speichern Image als Blob-Field
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, keine Ahnung was hier falsch ist!?
Ich habe jetzt auch noch das abschließende Zurücksetzen hinzugefügt, ändert aber nichts!
Code:
procedure TForm2.save_blob_to_DB(Sender: TObject);
var MStream: TMemoryStream; sql_str : string; _rec_cnt : integer; begin MStream := TMemoryStream.Create; try MSQuery1.Close; MSQuery1.SQL.Clear; sql_str := 'select * from sign'; MSQuery1.SQL.Add(sql_str); MSQuery1.Open; _rec_cnt := MSQuery1.RecordCount; MStream.Position := 0; Image2.Bitmap.SaveToStream(MStream); MStream.Position := 0; MSQuery1.Append; MSQuery1.FieldByName('ID').AsInteger := _rec_cnt + 1; MSQuery1.FieldByName('DateTime').AsDateTime := now; TBlobField(MSQuery1.FieldByName('image1')).LoadFromStream(MStream); MSQuery1.Post; MSQuery1.Close; except on E: Exception do begin ShowMessage('Error: ' + E.ClassName + ' ' + E.Message); end; end; MStream.Free; end; |
AW: Speichern Image als Blob-Field
Muss man bei FMX auch die unit jpeg einbinden ...
|
AW: Speichern Image als Blob-Field
Nein, wenn man eine Komponente verwendet die die Unit jpeg braucht, also z.B. wenn man im OpenPictureDialog nicht nur *.png angezeigt bekommt aber das ist hier nicht der Fall.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz