La méthode GetGroupState de TClientDataSet renvoie une information sur la position de l'enregistrement en cours par rapport au groupe en cours ( Premier, Milieu, Dernier, Premier et Dernier, voir pour cela DefIndexs ou AddIndex et GroupingLevel ) Soit !
Quelqu'un at-il tenté d'utiliser cela pour grouper des enregistrements comme le ferait la clause Group by d'une requête ?
J'ai essayé sans succès les solutions suivantes :
A - Définir un champ calculé ( Premier : Boolean par exemple ) et le mettre à true si GetGroupState me dit que je suis sur le premier en registrement du groupe .
Ca marche mais au moment de filtrer l'ensemble sur Premier tous les enregistrements sont filtrés ! ( L'ensemble semble vide ). Le résultat est le même quand Premier est défini comme champs calculé interne.
B - Cloner l'ensemble de donnée et renseigner le champs calculé (Premier : Boolean) du nouvel ensemble ( nouveau curseur en fait ) avec le résultat de la méthode GetGroupState du premier ensemble ( premier curseur ), après avoir fait un locate sur le premier ensemble pour synchroniser les enregistrements.
Ca marche jusque là mais le deuxième curseur ne filtre pas ( sans message d'erreur d'ailleurs).
C- Proceder comme pour B mais copier le Data du premier ensemble au lieu de le cloner. Là ca marche. Mais cette solution ne convient pas dans mon cas.
En effet, l'ensemble de donnée sous-jacent ( structure imposée ) n'a pas de clé primaire et pas de champs permettant d'en composer une non plus. De ce fait je suis dans l'impossibilité de localiser dans le premier ensemble l'enregistrement à synchronizer avant de renseigner Premier du second ensemble. ( à moins d'utiliser RecNo ? Tiens !)
Une requête permetterait bien entendu de faire ça mais je laisse cette solution en dernier recours.
Partager