OVH Cloud OVH Cloud

[hyperfile] comment faites vous ??

8 réponses
Avatar
patrice
Bonjour

Quelle solution utilisez vous lorsque vous devez créer un fichier contenant
un compteur unique, mais pouvant être nul ??

par exemple, un fichier de colis, chaque colis n'a pas de numéro tant qu'il
est à l'endroit "A".
Des que l'on passe le colis à l'endroit "B" il recoit un numéro unique.

Déclarer une clé unique coince pour les colis à l'endroit A
Déclarer une clé doublon coince en multiuser pour etre sur d'attriber 1 et 1
seul numéro.

ma solution : avoir un fichier "compteur" contenant un seul enregistrement
(le fameux numéro unique) :
Locker fichier "compteur"
prendre le numéro
numéro = numéro+1,
mettre à jour fichier "compteur", Delocker fichier compteur

mais ca me gave profondément, de devoir jongler comme ca ....
y a t'il une solution + élégante ??

8 réponses

Avatar
mat
patrice wrote:
Bonjour

Quelle solution utilisez vous lorsque vous devez créer un fichier contenant
un compteur unique, mais pouvant être nul ??

par exemple, un fichier de colis, chaque colis n'a pas de numéro tant qu'il
est à l'endroit "A".
Des que l'on passe le colis à l'endroit "B" il recoit un numéro unique.

Déclarer une clé unique coince pour les colis à l'endroit A
Déclarer une clé doublon coince en multiuser pour etre sur d'attriber 1 et 1
seul numéro.

ma solution : avoir un fichier "compteur" contenant un seul enregistrement
(le fameux numéro unique) :
Locker fichier "compteur"
prendre le numéro
numéro = numéro+1,
mettre à jour fichier "compteur", Delocker fichier compteur

mais ca me gave profondément, de devoir jongler comme ca ....
y a t'il une solution + élégante ??






Bonjour,

Question bête: puisque le numéro unique est attribué automatiquement,
pourquoi ne peut il pas l'avoir déjà lorsqu'il se trouve à l'endroit A?
Si l'endroit est spécifié sur l'enregistrement des colis, on ne devrait
pas avoir besoin d'une autre distinction par le numéro. Tous les colis à
A ont alors le même statut.

A part cela, on peut aussi verrouiller l'enregistrement automatiquement
au moment de la lecture au lieu de verrouiller le fichier:

tantque vrai
si hLitPremier(monFichier, hBlocageEcriture) alors sortir
fin
monFichier.numéro ++
hModifie(monFichier) // déblocage automatique

Salutations
Mat
Avatar
patrice
"mat" a écrit dans le message de
news:42f231f6$

Question bête: puisque le numéro unique est attribué automatiquement,
pourquoi ne peut il pas l'avoir déjà lorsqu'il se trouve à l'endroit A?
Si l'endroit est spécifié sur l'enregistrement des colis, on ne devrait
pas avoir besoin d'une autre distinction par le numéro. Tous les colis à
A ont alors le même statut.



Parce que l'on veut par exemple, que tous les colis ait un numéro d'entrée
dans la zone, qui se suive dans l'ordre d'arrivée,
par exemple :ex:

Colis 1, A
Colis 2, A
Colis 3, A
Colis 4, B,num 1
Colis 5, A
Colis 6, B, num 2

et maintenant, si le colis 2,A passe dans B, il devient :
Colis 2, B, num 3


A part cela, on peut aussi verrouiller l'enregistrement automatiquement
au moment de la lecture au lieu de verrouiller le fichier:



bien sur, je cherchais plus une solution qui n'aurait pas besoin d'un 2ieme
fichier
par exemple:
prochain= MAX( colis.num )+1
hlitrecherche( le colis à faire entrer dasn B)
colis.zone=B
colis.num=prochain+1
tantque pas hmodifie(COLIS)
si herreurdoublon()úux alors traitement d'erreur
colis.num++
fin

ce genre de truc marche nickel avec la majorité des databases qui
n'enregistre pas les clés dont les colonnes sont nulles
Avatar
mat
patrice wrote:
"mat" a écrit dans le message de
news:42f231f6$


Question bête: puisque le numéro unique est attribué automatiquement,
pourquoi ne peut il pas l'avoir déjà lorsqu'il se trouve à l'endroit A?
Si l'endroit est spécifié sur l'enregistrement des colis, on ne devrait
pas avoir besoin d'une autre distinction par le numéro. Tous les colis à
A ont alors le même statut.




Parce que l'on veut par exemple, que tous les colis ait un numéro d'entrée
dans la zone, qui se suive dans l'ordre d'arrivée,
par exemple :ex:

Colis 1, A
Colis 2, A
Colis 3, A
Colis 4, B,num 1
Colis 5, A
Colis 6, B, num 2

et maintenant, si le colis 2,A passe dans B, il devient :
Colis 2, B, num 3


A part cela, on peut aussi verrouiller l'enregistrement automatiquement
au moment de la lecture au lieu de verrouiller le fichier:




bien sur, je cherchais plus une solution qui n'aurait pas besoin d'un 2ieme
fichier
par exemple:
prochain= MAX( colis.num )+1
hlitrecherche( le colis à faire entrer dasn B)
colis.zone=B
colis.num=prochain+1
tantque pas hmodifie(COLIS)
si herreurdoublon()úux alors traitement d'erreur
colis.num++
fin

ce genre de truc marche nickel avec la majorité des databases qui
n'enregistre pas les clés dont les colonnes sont nulles





je vois...

Il y a une solution pour éviter l'usage un autre fichier mais elle est
au moins aussi compliqué. On peut utiliser un 2e curseur sur le même
fichier (hAlias/hChangeNom), faire une lecture/blocage du dernier
enregistrement (recherche générique avec clé sur zone et num)
hLitRecherchePremier(Colis2, cleZoneNum, hConstruitValCle(Colis,
cleZoneNum, "B"), hBlocageEcriture)
Colis.Num = Colis2.Num + 1
modifier enregistrement Colis
débloquer enregistrement Colis2

des doublons ne sont pas possible dans ce cas, mais est-ce une solution
meilleure ?

Salutations
Mat
Avatar
mat
mat wrote:

hLitRecherchePremier(Colis2, cleZoneNum, hConstruitValCle(Colis,



pardon, ce n'est pas top du tout. devrait plutôt être quelque chose comme

hLitRechercheDernier(Colis2, cleZoneNum, hConstruitValCle(Colis,
cleZoneNum, "B"), hBlocageEcriture + hGénérique)
Avatar
patrice
"mat" a écrit dans le message de
news:
Il y a une solution pour éviter l'usage un autre fichier mais elle est
au moins aussi compliqué. On peut utiliser un 2e curseur sur le même
fichier (hAlias/hChangeNom), faire une lecture/blocage du dernier
enregistrement (recherche générique avec clé sur zone et num)
hLitRecherchePremier(Colis2, cleZoneNum, hConstruitValCle(Colis,
cleZoneNum, "B"), hBlocageEcriture)
Colis.Num = Colis2.Num + 1
modifier enregistrement Colis
débloquer enregistrement Colis2

des doublons ne sont pas possible dans ce cas, mais est-ce une solution
meilleure ?




l'idée est interessante, mais si l'enregistrement est déjà vérouillé, on ne
peut plus créer de nouveau numéro.

bon je crois que l'on ne peut pas échapper au 2ieme fichier

merci pour vos lumières.
Avatar
mat
patrice wrote:
l'idée est interessante, mais si l'enregistrement est déjà vérouillé, on ne
peut plus créer de nouveau numéro.




Non, c'est comme une nouvelle instance (contexte hyper file
indépendant). Le dernier enregistrement est verrouillé dans une instance
et le nouveau créé dans l'autre. Essaye, c'est quand-même assez simple.

Salutations
Mat
Avatar
Patrice Labracherie
"mat" a écrit dans le message de
news:42f38e80$
Non, c'est comme une nouvelle instance (contexte hyper file
indépendant). Le dernier enregistrement est verrouillé dans une instance
et le nouveau créé dans l'autre. Essaye, c'est quand-même assez simple.



ce que je voulais dire, c'est que si quelqu'un est entré en modif sur la
fiche colis (pendant plusieurs secondes, le temps de modifier des données
quelconque)
l'instruction
hLitRechercheDernier(Colis2, cleZoneNum, hConstruitValCle(Colis,
cleZoneNum, "B"), hBlocageEcriture + hGénérique)
devrait renvoyer faux en refusant de bloquer le colis.
Avatar
mat
Patrice Labracherie wrote:
ce que je voulais dire, c'est que si quelqu'un est entré en modif sur la
fiche colis (pendant plusieurs secondes, le temps de modifier des données
quelconque)
l'instruction
hLitRechercheDernier(Colis2, cleZoneNum, hConstruitValCle(Colis,
cleZoneNum, "B"), hBlocageEcriture + hGénérique)
devrait renvoyer faux en refusant de bloquer le colis.




très vrai, alors retour au fichier séparé... personnellement, j'utilise
un fichier "Configuration" pour des valeurs par défaut et, entre autre,
les numéros de documents. Donc pas besoin d'un fichier additionnel.