Einzelnen Beitrag anzeigen

Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Image in Blob field (Web-Application)

  Alt 27. Nov 2020, 10:57
Du hast recht, so müsste es gehen. Ich habe mittlerweile einen Teil-Erfolg erzielt. Mit folgenden Proceduren kann ich ein Image in der DB speichern und auch wieder auslesen. Aber dazu muss ich es als ein VARCHAR() definieren. Wenn ich es mit einem Blob versuche, kommen irgendwie keine Daten wieder zurück...

Speicher-Procedure
Delphi-Quellcode:
function TDataModule_Client.Save_NewLogo(Logo_string: string): boolean;
begin
   Try
      if DataSet_NewLogo.State=dsBrowse then
         DataModule_Client.DataSet_NewLogo.Insert;
      DataSet_NewLogo.FieldByName('company_id').AsInteger:=DataSet_NewCompany.FieldByName('company_id').AsInteger;
      if Logo_string<>'then begin
         DataSet_NewLogo.FieldByName('logo').AsString:=Logo_string; //Das ist das Blob-Feld
         DataSet_NewLogo.FieldByName('logo_string').AsString:=Logo_string; //Der gleiche Wert noch einmal in das VARCHAR Feld
      end;
      DataSet_NewLogo.Post;
      DataSet_NewLogo.ApplyUpdates;
      Result:= true;
   Except
      Result:= false;
   End;
end;
Dabei wurde der Logo_String beim Aufruf erzeugt und übergeben:
Delphi-Quellcode:
var IMG_Base64: string;
begin
   IMG_Base64:=Img_Logo2.DataURL;
   DataModule_Client.Save_NewLogo(Img_Base64);
Wenn ich das Image wieder aus der DB lade weise ich es mit dieser Procedure dem Image wieder zu:
Delphi-Quellcode:
var Img_Base64: string;
begin
   DataModule_Client.DataSet_NewLogo.Cancel;
   DataModule_Client.DataSet_NewLogo.Open;
   Img_Base64:='data:image/png;base64,'+DataModule_Client.DataSet_NewLogo.FieldByName('logo_string').AsString;
   Img_Logo2.URL:=Img_Base64;
end;
Das klappt, wenn ich das mit dem VARCHAR-Feld "Logo_String mache, wenn ich stattdessen das Blob-Feld "logo" heranziehe, erhalte ich keinen auslesbaren Wert.

Verwenden tue ich eine MariaDB 10 und definiert ist das Feld einfach als Blob...

Ich würde es wirklich gerne mit einem Blob realisieren, denn sonst darf das Feld nur ca. 21.800 Zeichen haben. Und ich muss im weiteren Programm-Verlauf auch noch PDF-Dokumente speichern...

Vielen Dank für jede Anregung

Patrick
Patrick
  Mit Zitat antworten Zitat