Stocker enregistrement, pointeur dans un objet

Bonsoir,

Je souhaite stocker un pointeur sur un champ de la base dans une variable objet qui contient d’autres informations. Donc, pour simple, j’ai quelque chose du genre :

<code 4D>
C_OBJET ($Ob)
OB SET ($Ob;“Mon champ”;->[MaTable]MonChamp)
</code 4D>

Je stocke cet objet dans un champ objet d’une autre table par :

<code 4D>
LECTURE ECRITURE ([AutreTable])
[AutreTable]ChampObjet:=OB Copy($Ob)
STOCKER ENREGISTREMENT ([AutreTable])

LECTURE SEULEMENT([AutreTable])
LIBERER ENTREGISTREMENT ([AutreTable])

</code 4D>
Lorsque je recherche mon enregistrement, le contenu du champ objet est :
{
“Mon champ”:{}
}

J’ai donc perdu l’information du pointeur et récupéré un objet vide.
Les tests que j’ai réalisé montre que la transformation est réalisée au moment du STOCKER ENREGISTREMENT.

Standard ou Bug :?:
Si pas Bug, comment faire car je n’ai pas trouvé dans la doc ni sur le forum. :pray:

Patrick

Ça ne répond pas à ta question mais si tu es en 16R6 ou mieux peut-être pourrais-tu utiliser la commande http://livedoc.4d.com/4D-Langage-16-R6/Objets-Langage/Storage.301-3649498.fr.htmlstorage> en remplacement de [AutreTable]

Bonjour Bertrand,

Bien que je sois effectivement en v16R6, l’utilisation de Storage ne permet pas de répondre au besoin, car l’information stockée doit être disponible sur les autres clients.

Bien à toi

Patrick

http://doc.4d.com/4Dv16R6/4D/16-R6/OB-Copier.301-3548256.fr.htmlOB Copier ( objet {; résoudrePtrs} )>.

Bonjour Arnaud,

je ne veux pas résoudre le pointeur dans l’objet, je veux le conserver en tant que tel pour pouvoir le réutiliser dans une listbox (attribution d’une colonne).
Tant que la variable existe en mémoire cela est possible, mais dès que l’on passe par un enregistrement, c’est la cata

Patrick

m’en doutais un peu… :mrgreen:
Un pointeur ne se stocke pas (sic) mais tu peux stocker de quoi le reconstituer ; tu as ce qu’il te faut dans http://forums.4d.com/Post/FR/14528346/1/14531890#14531890ce fil>.

Merci

Dommage que la doc ne le précise pas et que la recherche sur le forum ne m’ait pas permise de trouver le fil (que j’avais vu mais oublié).

: Patrick EMANUEL

Dommage que la doc ne le précise pas
Un pointeur est une “référence à” (variable, tableau, élément de tableau, table, champ) qui n’est valable que dans le contexte mémoire de l’exécutable 4D. Sorti de ce contexte, elle n’a plus de sens. Je pense qu’on peut faire le parallèle à ces références retournées par 4D (Creer menu, Nouvelle liste, etc.) : la référence ne se stocke pas, on doit la reconstituer quand on veut s’en servir à nouveau.

Cela a effectivement un sens.
Merci

Patrick