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
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