AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Speichern Image als Blob-Field

Speichern Image als Blob-Field

Ein Thema von jangbu · begonnen am 15. Jun 2020 · letzter Beitrag vom 17. Jun 2020
Antwort Antwort
jangbu

Registriert seit: 6. Apr 2006
157 Beiträge
 
Delphi 10.3 Rio
 
#1

Speichern Image als Blob-Field

  Alt 15. Jun 2020, 18:35
Datenbank: MSSQL • Version: 2016 • Zugriff über: SDAC
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
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
280 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Speichern Image als Blob-Field

  Alt 15. Jun 2020, 21:36
CreateBlobStream ist dein Freund.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.730 Beiträge
 
Delphi XE4 Professional
 
#3

AW: Speichern Image als Blob-Field

  Alt 15. Jun 2020, 21:50
Hallo,
Delphi-Quellcode:
MStream.Position := 0;
Image2.Bitmap.SaveToStream(MStream);
Kann es sein, dass danach wieder das Zurücksetzen fehlt
MStream.Position := 0;
fehlt?

Sonst lädt das
TBlobField(MSQuery1.FieldByName('image1')).LoadFro mStream(MStream);
gar nichts in dein image1-Feld.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.149 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Speichern Image als Blob-Field

  Alt 15. Jun 2020, 23:14
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/...)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
jangbu

Registriert seit: 6. Apr 2006
157 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Speichern Image als Blob-Field

  Alt 17. Jun 2020, 17:10
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;
Miniaturansicht angehängter Grafiken
2020-06-17-18_08_12-von-vcl-applikation-mit-loadfromfile-eingelesene-jpgs-funktionieren.png  
  Mit Zitat antworten Zitat
Pfaffe

Registriert seit: 29. Jan 2009
225 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Speichern Image als Blob-Field

  Alt 17. Jun 2020, 18:02
Muss man bei FMX auch die unit jpeg einbinden ...
  Mit Zitat antworten Zitat
jangbu

Registriert seit: 6. Apr 2006
157 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Speichern Image als Blob-Field

  Alt 17. Jun 2020, 20:14
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf