[Résolu][Basic] Tester l'égalité entre deux pseudo objets

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
gelinp
Membre OOrganisé
Membre OOrganisé
Messages : 58
Inscription : 12 mars 2011 20:40

[Résolu][Basic] Tester l'égalité entre deux pseudo objets

Message par gelinp »

Bonjour,

J'utilise la programmation pseudo object des macros basics. Je cherche à tester l'égalité de deux pseudo objets avec une simple égalité basée sur l'adresse de chaque objet. Pour cela j'utilise le test suivant (avec l'objet TTestObj vide):

Le pseudo objet TTestObj :

Code : Tout sélectionner

REM  *****  BASIC  *****
Option Compatible
Option ClassModule
Option Explicit
Rem Xray gProfileMap		
		
Private Sub Class_Initialize()
End Sub

Private Sub Class_Terminate()	
End Sub

Code : Tout sélectionner

Dim obj1, obj2 As Object	
	Set obj1 = new TTestObj
	obj2 = obj1
	MsgBox "Sont egaux ? " & (obj1 = obj2)
A l'exécution de ce code, sur la dernière ligne j'obtiens le message d'erreur "Valeur de propriété incorrecte". Il semblerait que l'opérateur d'égalité ne soit pas supporté ... J'ai cherché en vain comment obtenir l'adresse d'un pseudo objet, de façon à tester directement la valeur des deux adresses, mais je n'ai encore rien trouvé ...

Quelqu'un à t-il une idée pour trouver l'adresse d'un pseudo objet ? Notez qu'il n'est pas question d'un test par valeur des propriétés et autres variables internes des deux objets, car dans le cas qui m'intéresse ils ne sont pas encore initialisés.

Merci pour votre aide.
Dernière modification par Bidouille le 09 déc. 2018 20:29, modifié 4 fois.
Raison : [Résolu] remplace [Resolu]
LibreOffice Version 7.4.6.2
Utilisation sur plusieurs systèmes d'exploitation (nomadisme sous windows et Linux)
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 629
Inscription : 09 août 2017 22:15

Re: [Basic] Tester l'égalité entre deux pseudo objets ...

Message par Jurassic Pork »

hello,
à part mettre une propriété d'identification unique dans l'objet et comparer cet identificateur unique, je ne vois pas trop comment faire car l'accès à "l'adresse" (le pointeur) de l'objet ne me semble pas possible en oo basic. Si je raconte une bêtise que quelqu'un me corrige :aie: . Et comment veux-tu qu'un objet soit référencé si il n'est pas encore initialisé (créé) ?
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
gelinp
Membre OOrganisé
Membre OOrganisé
Messages : 58
Inscription : 12 mars 2011 20:40

Re: [Basic] Tester l'égalité entre deux pseudo objets ...

Message par gelinp »

L'objet en question est bien créé par le programme, mais la valeur unique de son champ ID doit venir après par le chargement de ses valeurs depuis al base de donnée. Je me doutais que l'on allait me faire votre réponse, aussi je vais modifier mon algorithme pour différer mon test d'égalité après actualisation de son champs ID depuis le SGBD.
Merci encore.
LibreOffice Version 7.4.6.2
Utilisation sur plusieurs systèmes d'exploitation (nomadisme sous windows et Linux)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Basic] Tester l'égalité entre deux pseudo objets ...

Message par Hubert Lambert »

Bonjour,

Si tu souhaites vérifier que deux variables référencent un même instance, tu dois pouvoir utiliser (sauf erreur) l'opérateur "is" :

Code : Tout sélectionner

   MsgBox "Sont egaux ? " & (obj1 is obj2)
Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 629
Inscription : 09 août 2017 22:15

Re: [Basic] Tester l'égalité entre deux pseudo objets ...

Message par Jurassic Pork »

hello,
:bravo: Hubert, je ne sais pas où tu as dégoté cet opérateur mais çà a l'air de fonctionner :

Code : Tout sélectionner

Sub test()
// Commune est un module de classe
Dim obj1, obj2,obj3 As Object 
   Set obj1 = new Commune
   Set obj3 = new Commune
   obj2 = obj1
   MsgBox "Sont egaux ? " & (obj1 is obj2) // Résultat Vrai
   MsgBox "Sont egaux ? " & (obj1 is obj3) // Résultat Faux
End Sub
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
gelinp
Membre OOrganisé
Membre OOrganisé
Messages : 58
Inscription : 12 mars 2011 20:40

Re: [Basic] Tester l'égalité entre deux pseudo objets ...

Message par gelinp »

10 000 MERCI !!! Bonne semaine à vous :-)
LibreOffice Version 7.4.6.2
Utilisation sur plusieurs systèmes d'exploitation (nomadisme sous windows et Linux)