Bonjour,
Je suis sur un dev client-serveur Firebird avec Delphi XE2, en utilisant Datasnap. Je rencontre des difficultés pour passer un objet (tstrings par exemple) du serveur au client.
Pour expliquer un peu mieux, sur le serveur, j'ai une methode getList qui fait un select d'un champ sur une table et retourne au client les valeurs dans un tstrings.
J'ai essayé de plusieurs façons :
1 - TStrings en retour
function getList : TStrings;
- Creation du Result (TStringList.Create)
- Creation dynamique IBSQL (select) et remplissage Result
-> Fonctionne quand j'appelle la methode à partir du client (ListBox.Items.AddStrings(Server.getList)), mais fuite mémoire sur le serveur dans la mesure où le "Result" de la fonction getList n'est pas libéré sur le serveur. De plus, à la fermeture du client, j'ai un runtime error 204 si je fais un seul appel à la fonction, runtime error 216 si j'en fais plus d'un...
2 - TStrings en paramètres par valeur ou par variable
Procedure getList(slRetour : TStrings); ou Procedure getList(var slRetour : TStrings);
- Creation dynamique IBSQL (select) et remplissage slRetour
Appel client :
MyList : TStrings;
MyList := TStringList.Create;
Server.getList(MyList);
ListBox.Items.AddStrings(MyList);
MyList.free;
Sur le passage par valeur, ça ne fonctionne pas et j'ai "operation de pointeur incorrecte"
Sur le passage par variable, qui me semble la façon la plus propre (mais est-ce qu'on peut faire un passage par variable d'un client à un serveur...), ça fonctionne la première fois, mais j'ai "operation de pointeur incorrecte" à la fermeture de l'appli (runtime error 204), au second appel, j'ai un message "Interne : le type tkPointer n'est actuellement pas supporté"
C'est dommage parce que le Datasnap, ça a l'air vraiment bien pensé... Je ne sais pas si je ne programme pas comme il faut ou si le problème vient d'XE2. J'ai trouvé ça sur le net (
https://forums.embarcadero.com/thread.jspa?messageID=426045), j'ai modifié le fichier en question, recompilé mon client et mon serveur, mais ça n'a rien changé.
Avez-vous déjà rencontré ce problème ? (et surtout comment l'avez-vous solutionné ?)
Merci d'avance pour vos réponses
Simon