AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken DataSnap überträgt kein Firebird Bynary Blob Feld
Thema durchsuchen
Ansicht
Themen-Optionen

DataSnap überträgt kein Firebird Bynary Blob Feld

Ein Thema von Kostas · begonnen am 26. Aug 2015 · letzter Beitrag vom 7. Sep 2015
Antwort Antwort
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

DataSnap überträgt kein Firebird Bynary Blob Feld

  Alt 26. Aug 2015, 20:47
Datenbank: Firebird • Version: 2.5 • Zugriff über: Firedac
Hallo Zusammen,

kann es sein dass DataSnap keine Binary Blob Feld transportieren kann?
Die Remote Methode überträgt ein TDataSet. Ein Feld der Tabelle ist ein Bild dessen Größe auf 100KB begrenz ist.
Das Dataset wird komplett ohne Fehlermeldung übertragen lediglich ist das Bild leer.

Die Methode zum Übertragen:
Delphi-Quellcode:
function TdmDAL.GetADRESS(conn: TFDConnection; TransferID: integer; out RecordCount: integer): TDataSet;
var
  oQuery: TFDQuery;
begin
  result := nil;
  if conn=nil then exit;

  oQuery := nil;



  oQuery := TFDQuery.Create(nil);
  try
    TThread.Synchronize(nil, procedure
    begin
      oQuery.Connection := conn;
      oQuery.FetchOptions.AutoFetchAll := afAll;
      oQuery.FetchOptions.RecordCountMode := cmTotal;


      oQuery.SQL.add('/*Alle Adressen*/');
      oQuery.SQL.add('select f.*');
      oQuery.SQL.add('from ADRESS f');
      oQuery.SQL.add('where ((f.transferid is null) or (f.transferid > :transferid))');
      oQuery.Params[0].AsInteger := TransferID;
      oQuery.Open;
    end);

    result := oQuery;
    RecordCount := oQuery.RecordCount;
  finally
// oQuery.Free;
  end;

end;

Clientseitig wird das DataSet in eine MemTable per CopyDataSet kopiert. Dabei ist das Binary Memo immer leer.
mtPostfachPaketIDsForDownload.CopyDataSet(LDataSet, [coStructure, coRestart, coAppend]);
Falls meine Vermutung stimmen sollte, hoffe ich dass es doch eine Möglichkeit gibt Binary Blobs zu übertragen. Die Bilder zu extrahieren und
per FTP gesondert zu übertragen ist nur relativ Schlecht umsetzbar.

Schöne Grüße
Kostas
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: DataSnap überträgt kein Firebird Bynary Blob Feld

  Alt 26. Aug 2015, 21:29
Ich kann das jetzt gerade nicht nachprüfen, aber als ich damals für meinen Delphi-Vortrag den DataSnap-Server auf Windows Azure betrieben hatte, kamen die Bilder schon problemlos mit rüber. In einem aktuellen DS-REST-Projekt gab es auch keine Probleme, allerdings arbeiten wir da mit TFDJSONDataSets .
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: DataSnap überträgt kein Firebird Bynary Blob Feld

  Alt 7. Sep 2015, 18:16
Hallo Uwe,

das mit dem Blob ist eine sehr gemeine Sache.
Das Bild wird Übertragen wenn ich nicht zu viele Datensätze habe!

Also nochmal: In meiner Tabelle habe ich etwa 550.000 Datensätze. Davon hat nur ein Datensatz ein kleiner Bild ca. 20KB.
Rufe ich genau diesen Dantesatz ab, ist das Bild enthalten.
Testweise habe ich einfach die PersonID + 200000 Datensätze abgerufen. Das Bild wird noch übertragen.
Erweitere ich jedoch den Range auf PersonID + 300000 werden alle Records übertragen jedoch nicht das Bild.

Die Records ruft der Client vom Server in ein lokales TDataSet ab. Danach wird per CopyDataSet in eine FDMemTable kopiert.

Es scheint also ein Speicherproblem zu sein. Doch leider bekomme ich keine Fehlermeldung.


//am Server
Delphi-Quellcode:
function TdmDAL.GetPERSON(conn:TFDConnection; PersonID: integer): TDataSet;
var
  oQuery: TFDQuery;
begin
  result := nil;
  if conn=nil then exit;
  oQuery := nil;

  oQuery := TFDQuery.Create(nil);
  try
    TThread.Synchronize(nil, procedure
    begin
      oQuery.Connection := conn;
      oQuery.FetchOptions.AutoFetchAll := afAll;
      oQuery.FetchOptions.RecordCountMode := cmTotal;

      oQuery.SQL.add('/*Eine Person abrufen*/');
      oQuery.SQL.add('SELECT p.*');
      oQuery.SQL.add(' FROM personen p');

// oQuery.SQL.add(' WHERE (p.personid :personid)');
// oQuery.ParamByName('personid').AsInteger := personid;

      oQuery.SQL.add(' WHERE (p.personid between :personid1 and :personid2)');
      oQuery.ParamByName('personid1').AsInteger := personid;
      oQuery.ParamByName('personid2').AsInteger := personid+300000;

      oQuery.Open;
    end);

    result := oQuery;
  finally
// oQuery.Free;
  end;

end;


//am Client
Delphi-Quellcode:
procedure TfrMain.Button9Click(Sender: TObject);
var LDataSet: TDataSet;
    RecordCount:integer;
begin
  if not dmComm.InitConnection(false) then Exit;

  //Die Proxy Methode holt die aktuelle Connection und ruft damit die GetPERSON vom Server auf.
  LDataSet := dmComm.ClientContainer.FProxyInst.GetPERSON(443025);

  cxDBImage1.DataBinding.DataField := 'BILD';
  cxDBImage1.DataBinding.DataSource := dsPersonen;

  fdPersonen.CopyDataSet(LDataSet, [coStructure, coRestart, coAppend, coEdit]);
  fdPersonen.Open;
  fdPersonen.Locate('PERSONID',443025,[]);



end;

Kennst du diesen Fall?
Hier im Forum habe ich in anderen Beiträgen gelesen die über Speicherprobleme bei Binären Datenübertragung von DataSnap berichtet haben.
Mein aktuelles Problem könnte ich schon umschiffen wenn ich die Records mit den Bildern einzeln übertragen würde. Die Frage ist nur ist es
nur ein Problem von Bildern in Blobfeldern oder kann es passiert dass auch andere Feldinhalte plötzlich leer sind, String abgeschnitten werden,
oder Memos die RTF Texte beinhalten verworfen werden? Es ist also eine generelle Frage der Zuverlässigkeit von DataSnap in Verbindung mit
FireDAC.

Dir noch eine schöne Zeit.

Gruß Kostas
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:30 Uhr.
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