2016-06-06 12 views
3

Ich habe einen DataSnap Client/Server in Delphi XE6DataSnap Server Methoden - Rangierung Verschachtelung Objekte

ich im folgenden Servermethodenaufruf auf der Client-Seite eine ungültige Zeigeroperation erhalten.

S := ClientModule1.ServerMethods1Client.getReport(RunReportObj, 
     ReturnFileSize); 

wenn I (Schritt in) debuggen, es den Fehler sieht, ist innerhalb eines geschachtelten Aufgabe der TRunReportObj I auf die Server-Methode am Passieren

TRunReportObject 
private 
    ... 
    fCriteria: TCriteriaList; 
    ... 
public 
    function AddCrit(Const aField, aOperation: String; Const aValues: TStrings): TCriteriaObject; 
    property CritObjects[index: Integer]: TCriteriaObject read GetCritObject; 
    property Criteria: TCriteriaList read fCriteria write fCriteria; 
... 
end; 

TCriteriaList ist TObjectList

TCriteriaObject = class(TJSONParamObject) 
    private 
    fField: String; 
    fOperation: String; 
    fValues: TStringList; 
    function GetJSONObject: TJSONObject; override; 
    public 
    property Field: String read fField write fField; 
    property Operation: String read fOperation write fOperation; 
    property Values: TStringList read fValues write fValues; 
    constructor create; 
    destructor destroy;override; 
    end; 

Wenn ich fValues: TStringList zu einer Zeichenfolge ändern, funktioniert es gut

So ist das Problem mit th e string Eigenschaft „Werte“, die ich sicher gemacht haben, wird es erstellt und zerstört

constructor TCriteriaObject.create; 
begin 
    inherited Create; 
    fValues := TStringList.create; 
end; 

destructor TCriteriaObject.destroy; 
begin 
    fValues.Free; 
    inherited destroy; 
end; 

Ich denke, es ein Rangier-Problem sein kann ??? Kann das jemand bestätigen?

+1

Sie könnten versuchen, das folgende Attribut zu Ihrem FValues ​​hinzu: TStringList Feld in TCriteriaObject - '[JSONReflect (ctTypeObject, rtTypeObject, TStringListInterceptor, nil, True)]' und 'Data.DBXJSONReflect' Klausel uses hinzuzufügen. – Jason

Antwort

2

Ich hatte ähnliche Probleme in Delphi XE6. Ich musste jede TStringList in String konvertieren.

In Ihrem Fall: -

fValues: String;

Eigenschaftswerte: String read GetValues ​​write SetValues;

In den Routinen GetValues ​​und SetValues ​​müssen Sie in und aus der Zeichenfolge konvertieren.

+1

Entschuldigung, es hat so lange gedauert, das zu überprüfen. Ja Peter, das habe ich als sofortige Lösung getan, ich hatte gehofft etwas über die TStringList zu lernen. Vielen Dank! Ich werde Ihre Antwort akzeptieren, da Sie die richtige Antwort angegeben haben. – John