Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Image in Blob field (Web-Application) (https://www.delphipraxis.net/206153-image-blob-field-web-application.html)

Ykcim 19. Dez 2020 23:14

AW: Image in Blob field (Web-Application)
 
Hallo zusammen,

endlich habe ich einen Weg gefunden, um ein Logo in der Datenbank zu speichern und auch wieder zu laden...

Ich habe meine App komplett auf den Aufruf von Services umgebaut.

Wenn ich das Logo in das TWebImageControl geladen habe, kann ich es jederzeit mit
Delphi-Quellcode:
WebImageControl1.Base64
als String bekommen. Ich habe festgestellt, dass ich diesen String zwar problemlos in ein DataSet laden kann, bei dem Versuch, daraus dann ein JSONObject zu machen, wird der String irgendwie verändert.

Ich habe daher selber ein JSONObject erstellt und dieses dem Service-Aufruf als Parameter mitgegeben. Damit funktioniert es.

Delphi-Quellcode:
procedure TDataModule_Client.Save_NewLogo(AOnDataRecieved: TDataRecievedCallback; Image_String: string);
   procedure OnResponse(Response: TXDataClientResponse);
   begin
      if Assigned(AOnDataRecieved) then begin
         AOnDataRecieved();
      end;
   end;

var  JSVal: JSValue;
      JSObj: TJSObject;
      JSString:string;
begin
   Try
      JSString:= '{"company_id": '+IntToStr(DataSet_NewCompanycompany_id.AsInteger)+', '+
                 '"picture": "'+'data:image/png;base64,'+Image_String+'"}';
      JSObj:=TJSJSON.parseObject(JSString);
      TVc_XDataWebClient.RawInvoke('ITV_CreateNewCustService.Insert_Logo',[JSObj], @OnResponse);
   Except
      MessageDlg('Es hat einen Fehler beim Speichern gegeben',WEBLib.Dialogs.mtError, [mbOK]);
      Exit;
   End;
end;
Auf der Server-Seite passiert Folgendes:
Delphi-Quellcode:
function TTV_CreateNewCustService.Insert_Logo(JSObj: TJSONObject): integer;
var  Query: TFDQuery;
begin
   Query:= TFDQuery.Create(nil);
   Query.Connection:=MySQL.MySQL_Cnnctn;
   Try
      Query.SQL.Clear;
      Query.SQL.Add('insert into company_logo '+
                                       '(company_id, logo_image) '+
                                  'values '+
                                       '(:company_id, :logo_image); '+
                                  'select last_insert_id() as ID ');
      Query.ParamByName('company_id').AsInteger:= StrToIntDef(TJSONString(JSObj.GetValue('company_id')).Value, 0);
      Query.ParamByName('logo_image').AsString:=  TJSONString(JSObj.GetValue('picture')).Value;

      Query.Open;
      Result:= Query.FieldByName('id').AsInteger;
   Finally
      Query.Free;
   End;
end;
Auslesen tue ich es mit einem normalen Select und behandle das Ganze wie einen String.

Vielleicht hilft es jemandem weiter.

Vielen Dank für die Unterstützung
Patrick


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz