OVH Cloud OVH Cloud

[WD8] DonneIdentifiant

24 réponses
Avatar
Phil
Bonjour,

Concernant la fonction DonneIdentifiant(), le manuel et l'aide en ligne
mentionnent
«Calcule un identifiant unique de type entier pour un exécutable donné.».

J'avais compris par là que si on exécute le même .exe - soit du même poste
en multi-instance ou en réseau en cliquant sur le .exe de l'application,
l'identifiant serait incrémenté séquentiellement quel que soit le poste ou
l'instance qui provoque l'incrémentation.

Mais ce n'est pas ce qui se passe; chaque incrémentation se fait
individuellement dans chaque instance.

Y a-t-il un truc pour obtenir que l'incrémentation de DonneIdentifiant()
soit gérée par un .exe unique et se répercute sur chaque instance qui
appelle la fonction? En d'autres mots, que chaque incrémentation se
répercute ou soit vue de toutes les instances ou tous les postes branchés à
la même application?

--
Cordialement,

Réal Philippon

10 réponses

1 2 3
Avatar
Gilles G.
In article <xOQOc.70498$,
says...
Bonjour,
Concernant la fonction DonneIdentifiant(), le manuel et l'aide en ligne
mentionnent
«Calcule un identifiant unique de type entier pour un exécutable donné.».
J'avais compris par là que si on exécute le même .exe - soit du même poste
en multi-instance ou en réseau en cliquant sur le .exe de l'application,
l'identifiant serait incrémenté séquentiellement quel que soit le poste ou
l'instance qui provoque l'incrémentation.



Non, ca serait d'ailleurs impossible sans passer par un moyen externe
(fichier, base), ou si l'un des postes servait de serveur, etc...

Mais ce n'est pas ce qui se passe; chaque incrémentation se fait
individuellement dans chaque instance.



C'est ce qu'il fallait comprendre dans la doc.

appelle la fonction? En d'autres mots, que chaque incrémentation se
répercute ou soit vue de toutes les instances ou tous les postes branchés à
la même application?



Non, il faut le gérer manuellement.
Avatar
ted
Gilles G. écrivait
news::

In article <xOQOc.70498$,
says...
Bonjour,
Concernant la fonction DonneIdentifiant(), le manuel et l'aide en
ligne mentionnent
«Calcule un identifiant unique de type entier pour un exécutable
donné.». J'avais compris par là que si on exécute le même .exe - soit
du même poste en multi-instance ou en réseau en cliquant sur le .exe
de l'application, l'identifiant serait incrémenté séquentiellement
quel que soit le poste ou l'instance qui provoque l'incrémentation.



Non, ca serait d'ailleurs impossible sans passer par un moyen externe
(fichier, base), ou si l'un des postes servait de serveur, etc...

Mais ce n'est pas ce qui se passe; chaque incrémentation se fait
individuellement dans chaque instance.



C'est ce qu'il fallait comprendre dans la doc.

appelle la fonction? En d'autres mots, que chaque incrémentation se
répercute ou soit vue de toutes les instances ou tous les postes
branchés à la même application?



Non, il faut le gérer manuellement.




Salut,

Il y a une solution par identifiant auto d'un fichier hyperfile.

--
En esperant t'avoir aidé.
ted
Avatar
Pisseur de code
Pour obtenir un identifiant unique facilement vous pouvez mettre en suffixe
l'adresse IP (en supprimant les points) du poste en question, suivie de la
valeur retournée par DonneIdentifiant() :

MonId = remplace(NetAdresseIP(), ".", "") + DonneIdentifiant()


"Phil" a écrit dans le message de
news:xOQOc.70498$
Bonjour,

Concernant la fonction DonneIdentifiant(), le manuel et l'aide en ligne
mentionnent
«Calcule un identifiant unique de type entier pour un exécutable donné.».

J'avais compris par là que si on exécute le même .exe - soit du même poste
en multi-instance ou en réseau en cliquant sur le .exe de l'application,
l'identifiant serait incrémenté séquentiellement quel que soit le poste ou
l'instance qui provoque l'incrémentation.

Mais ce n'est pas ce qui se passe; chaque incrémentation se fait
individuellement dans chaque instance.

Y a-t-il un truc pour obtenir que l'incrémentation de DonneIdentifiant()
soit gérée par un .exe unique et se répercute sur chaque instance qui
appelle la fonction? En d'autres mots, que chaque incrémentation se
répercute ou soit vue de toutes les instances ou tous les postes branchés


à
la même application?

--
Cordialement,

Réal Philippon




Avatar
Phil
Bonjour,

MonId = remplace(NetAdresseIP(), ".", "") + DonneIdentifiant()



Mais c'est que j'adore cette solution astucieuse.

Y a-t-il des exceptions possible qu'un poste n'ait pas d'adresse IP ?

--
Cordialement,

Réal Philippon

"Pisseur de code" a écrit dans le message de
news:4hnPc.120445$
Pour obtenir un identifiant unique facilement vous pouvez mettre en


suffixe
l'adresse IP (en supprimant les points) du poste en question, suivie de la
valeur retournée par DonneIdentifiant() :

MonId = remplace(NetAdresseIP(), ".", "") + DonneIdentifiant()


"Phil" a écrit dans le message de


Avatar
Roumegou
Phil a utilisé son clavier pour écrire :
Bonjour,

MonId = remplace(NetAdresseIP(), ".", "") + DonneIdentifiant()



Mais c'est que j'adore cette solution astucieuse.

Y a-t-il des exceptions possible qu'un poste n'ait pas d'adresse IP ?



Si tu n'utilises pas le protocole IP. (cela devient rare, mais un
réseau en ipx par ex)
Si tu es derrière un firewall, tout tes postes auraient la meme IP
(surtout vrai en internet)


--
Cordialement,

Réal Philippon



--
Eric Roumégou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Phil
Merci Éric de cette information précieuse.

--
Cordialement,

Réal Philippon

"Roumegou" a écrit dans le message de
news:
Phil a utilisé son clavier pour écrire :
> Bonjour,
>
>> MonId = remplace(NetAdresseIP(), ".", "") + DonneIdentifiant()
>
> Mais c'est que j'adore cette solution astucieuse.
>
> Y a-t-il des exceptions possible qu'un poste n'ait pas d'adresse IP ?
>
Si tu n'utilises pas le protocole IP. (cela devient rare, mais un
réseau en ipx par ex)
Si tu es derrière un firewall, tout tes postes auraient la meme IP
(surtout vrai en internet)


> --
> Cordialement,
>
> Réal Philippon

--
Eric Roumégou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)



Avatar
Bertrand
> Si tu es derrière un firewall, tout tes postes auraient la meme IP (surtout
vrai en internet)



niet
ils auront la même adresse vu de l'extérieur, mais ca ne les empêche
pas d'avoir une adresse local obligatoirement différente.
Avatar
Eric Demeester
dans (in) fr.comp.developpement.agl.windev, Bertrand
ecrivait (wrote) :

Bonsoir,

niet



Pile-poil.

ils auront la même adresse vu de l'extérieur, mais ca ne les empêche
pas d'avoir une adresse local obligatoirement différente.



Ca s'appelle la NAT [*] (Network Address Translation) :)

Reste un problème, pas forcément pénalisant dans ce cas précis, pour
identifier précisément les clients s'ils sont derrière un serveur DHCP
(adresses IP attribués à la volée à chaque chaque fois que le client se
connecte au serveur, pour simplifier).

[*] http://www.guideinformatique.com/DICO/N/NAT.htm

--
Eric
Avatar
farplus
Phil a émis l'idée suivante :
Bonjour,

Concernant la fonction DonneIdentifiant(), le manuel et l'aide en ligne
mentionnent
«Calcule un identifiant unique de type entier pour un exécutable donné.».

J'avais compris par là que si on exécute le même .exe - soit du même poste
en multi-instance ou en réseau en cliquant sur le .exe de l'application,
l'identifiant serait incrémenté séquentiellement quel que soit le poste ou
l'instance qui provoque l'incrémentation.

Mais ce n'est pas ce qui se passe; chaque incrémentation se fait
individuellement dans chaque instance.

Y a-t-il un truc pour obtenir que l'incrémentation de DonneIdentifiant()
soit gérée par un .exe unique et se répercute sur chaque instance qui
appelle la fonction? En d'autres mots, que chaque incrémentation se
répercute ou soit vue de toutes les instances ou tous les postes branchés à
la même application?



Bonjour,

j'aimerais savoir quelle est ton idée précise; je pense qu'en la
exposant tu t'apercevras qu'au fond tu n'as pas besoin d'acceder une
fenetre ouverte par <instance1> avec <instance2>. Ou je me trompe ?
A+

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com
Avatar
Phil
"farplus" a écrit dans le message de
news:
Phil a émis l'idée suivante :
> Bonjour,
>
> Concernant la fonction DonneIdentifiant(), le manuel et l'aide en ligne
> mentionnent
> «Calcule un identifiant unique de type entier pour un exécutable


donné.».
>
> J'avais compris par là que si on exécute le même .exe - soit du même


poste
> en multi-instance ou en réseau en cliquant sur le .exe de l'application,
> l'identifiant serait incrémenté séquentiellement quel que soit le poste


ou
> l'instance qui provoque l'incrémentation.
>
> Mais ce n'est pas ce qui se passe; chaque incrémentation se fait
> individuellement dans chaque instance.
>
> Y a-t-il un truc pour obtenir que l'incrémentation de DonneIdentifiant()
> soit gérée par un .exe unique et se répercute sur chaque instance qui
> appelle la fonction? En d'autres mots, que chaque incrémentation se
> répercute ou soit vue de toutes les instances ou tous les postes


branchés à
> la même application?

Bonjour,

j'aimerais savoir quelle est ton idée précise; je pense qu'en la
exposant tu t'apercevras qu'au fond tu n'as pas besoin d'acceder une
fenetre ouverte par <instance1> avec <instance2>. Ou je me trompe ?
A+

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com


--------------------------------------------------------------
Salut farplus,

Je me disais aussi que c'était trop beau pour être vrai ce
DonneIdentifiant() ;-)

Selon ce que j'avais compris dans l'aide je pensais utiliser
DonneIdentifiant() pour obtenir des noms de fichiers temporaires uniques -
en réseau ou non. Mais comme l'incrémentation est individuelle sur chaque
poste, je ne peux l'utiliser sans risquer des conflits de noms pareils.

En fait, ce serait pas compliqué du tout de faire un petite routine qui
donnerait une incrémentation en réseau ou non.

D'autre part, il y a la fonction fFichierTemp() qui est censé créer des noms
uniques mais on ne peut s'y fier non plus.
En réseau, il arrive fréquemment qu'on ait besoin de plusieurs fichiers
temporaires qui sont créé au début d'un processus particulier.

Par exemple, le code suivant...
Fichier1,Fichier2,Fichier3 sont des chaines
Fichier1ÿichierTemp("ABC","C:TEMP")
Fichier2ÿichierTemp("ABC","C:TEMP")
Fichier3ÿichierTemp("ABC","C:TEMP")

Donnera 3 noms de fichiers identiques même sur un Pentium relativement lent.
On ne peux donc pas s'y fier.
Un Multitâche(20) entre chacun règle probablement le problème mais ce n'est
pas très élégant, ni fiable.

Je constate aussi que la solution suivante (que j'aime bien)
MonId = remplace(NetAdresseIP(), ".", "") + DonneIdentifiant()
expose à des exceptions très rares, mais possible quand meme.

Tout cela pour conclure que je crois que la meilleure solution possible est
de faire une petite Procédure/Fonction pour générer un nom de fichier
temporaire qui sera unique et fiable dans tous les cas sans aucune exception
d'environnement ou autre.

FONCTION NomUnique()
InitHasard()
FicTemp est une chaîne
I est un entier
POUR I=1 A 8;FicTemp=FicTemp+Caract(Hasard(65,90));FIN
RENVOYER FicTemp

Cette fonction génère un nom (à gauche du .fic ou autre) qui offre 208 827
064 576 combinaisons possibles, alors on oublie les risques de duplication
de noms et le problème est réglé.

Merci à tous pour vos réponses.

--
Cordialement,

Réal Philippon
Programmation Ultra Ltée -o- www.ultra.ca
L'informatique sur mesure depuis plus de 24 ans
1 2 3