![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: Firedac
DataSnap überträgt kein Firebird Bynary Blob Feld
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.
Delphi-Quellcode:
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 |
AW: DataSnap überträgt kein Firebird Bynary Blob Feld
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
Delphi-Quellcode:
.
TFDJSONDataSets
|
AW: DataSnap überträgt kein Firebird Bynary Blob Feld
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz