OVH Cloud OVH Cloud

[AC97] Problèmes bizarres de 'trous' avec un n° auto

7 réponses
Avatar
dams_
Bonjour,

J'ai dans une table un champ de type n° auto.
Je remarque des trous dans la séquence attribuée et je ne m'explique
pas ce comportement.

Par exemple :

5,6,7,8,15,16,17,18,30,31, etc

La base est dans un contexte multi-utilisateurs.
Il y a bien un index unique qui pourrait empêcher un enregistrement et
donc expliquer ces trous... mais les utilisateurs ne m'ont jamais
remonté le problème...

Il n'y a jamais de suppression dans cette table..

Avez-vous des suggestions ?

Merci

Damien

7 réponses

Avatar
3stone
Salut ".."


".." a écrit:
J'ai dans une table un champ de type n° auto.
Je remarque des trous dans la séquence attribuée et je ne m'explique
pas ce comportement.

Par exemple :

5,6,7,8,15,16,17,18,30,31, etc

La base est dans un contexte multi-utilisateurs.
Il y a bien un index unique qui pourrait empêcher un enregistrement et
donc expliquer ces trous... mais les utilisateurs ne m'ont jamais
remonté le problème...

Il n'y a jamais de suppression dans cette table..




Cela est normal lorsque c'est une clé primaire numéroauto
et provient du simple fait que l'on annule une saisie débutée.

Cela permet de garantir *dans tous les cas* l'unicité de la clé primaire.
Et cette clé ne doit serveir qu'à cela, ne pas être "vu" par l'utilisateur
et ne pas être utilisée pour une numérotation "obligatoirement" sans trous.


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------

Avatar
d
Hello,

Merci poutr ta réponse mais...il n'y a jamais d'insertion avortée.

J'effectue dynamiquement les ajouts via SQL et INSERT INTO.. et je surveille
les erreurs qui remonte de la base.

C'est effectivement une clef primaire et ce champ n'a pas d'autre fonction.

Tu as d'autres idées ?


@+
Damien


"3stone" a écrit dans le message de news:
3fcf33e7$0$285$
Salut ".."


".." a écrit:
J'ai dans une table un champ de type n° auto.
Je remarque des trous dans la séquence attribuée et je ne m'explique
pas ce comportement.

Par exemple :

5,6,7,8,15,16,17,18,30,31, etc

La base est dans un contexte multi-utilisateurs.
Il y a bien un index unique qui pourrait empêcher un enregistrement et
donc expliquer ces trous... mais les utilisateurs ne m'ont jamais
remonté le problème...

Il n'y a jamais de suppression dans cette table..




Cela est normal lorsque c'est une clé primaire numéroauto
et provient du simple fait que l'on annule une saisie débutée.

Cela permet de garantir *dans tous les cas* l'unicité de la clé
primaire.

Et cette clé ne doit serveir qu'à cela, ne pas être "vu" par l'utilisateur
et ne pas être utilisée pour une numérotation "obligatoirement" sans
trous.



--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------







Avatar
3stone
Salut "d",

Merci poutr ta réponse mais...il n'y a jamais d'insertion avortée.

J'effectue dynamiquement les ajouts via SQL et INSERT INTO.. et je surveille
les erreurs qui remonte de la base.

C'est effectivement une clef primaire et ce champ n'a pas d'autre fonction.



Cette clé primaire est en numéroauto ou non ?

Si les ajouts se font par code (Insert Into) regarde de ce coté...

Et si NumAuto et que tu ajoute par 'Insert Into' tu ne peux
renseigner la clé... mais ca tu le sais je présume...


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------

Avatar
d
Hello

"3stone" a écrit dans le message de news:
3fcf3c95$0$285$
Salut "d",

Merci poutr ta réponse mais...il n'y a jamais d'insertion avortée.

J'effectue dynamiquement les ajouts via SQL et INSERT INTO.. et je
surveille


les erreurs qui remonte de la base.

C'est effectivement une clef primaire et ce champ n'a pas d'autre
fonction.




Cette clé primaire est en numéroauto ou non ?

Si les ajouts se font par code (Insert Into) regarde de ce coté...

Et si NumAuto et que tu ajoute par 'Insert Into' tu ne peux
renseigner la clé... mais ca tu le sais je présume...


Oui, cette clef primaire est en numero auto.

J' insère les enregistrements via ADODB.Execute comme ça :

ADODBConnection.Execute sInsertString, , adExecuteNoRecords

avec un INSERT INTO myTable (ch1,ch2, ....) VALUES (val1,val2, ....)
(le champ n° auto ne faisant bien evidemment pas partie de la liste
ch1,ch2, ... )

Donc si ça plante, ADODB me remonte une erreur que je peux traiter. Je sais
donc s'il doit y avoir un trou dans la sequence puisque ce cas correspond à
une saisie abandonnée.

Or ce cas ne se présente jamais... et du coup, je ne peux pas expliquer tous
ces trous dans la séquence.. oouf

Tu me suis ??

@+
Damien


Avatar
J-Pierre
Oui oui, on te suit....

Tu peux publier le code ? En particulier celui où tu gères les erreurs ?

J-Pierre
Avatar
3stone
"J-Pierre"
Oui oui, on te suit....


Bis repetita...

Oui on suit... malgré l'heure tardive ;-))



--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------

Avatar
d
Hello,

Quel abnégation les gars !!
Voilà le code incriminé ..

Private Const ERR_ADO As Long = -2147217900
Private Const ERR_ADO_DUPLICATE_VALUE As Long = -1605


Private Sub cmd_Save_Click()

Dim myDue As CDue, sInsert As String, sValues As String
'-- on enregistre toutes les DUES dans la BDD et on quitte l'application
On Error GoTo Err_Resume

If myDues Is Nothing Then Exit Sub

sInsert = "INSERT INTO tbl_Dues (ID_Societe, ID_Agence, ID_Commercial,
Matricule, NomPrenom, NumSecu, DateEmbauche, HeureEmbauche) VALUES "

For Each myDue In myDues.mCol
With myDue
sValues = "('" & _
.ID_Societe & "','" & _
.ID_Agence & "','" & _
.ID_Commercial & "','" & _
.Matricule & "','" & _
.Nom & "','" & _
.NumSecu & "','" & _
.DateEmbauche & "','" & _
.HeureEmbauche & "')"
End With

If ADODBConnection Is Nothing Then Set ADODBConnection = New
ADODB.Connection
If ADODBConnection.State = adStateOpen Then
Else
ADODBConnection.Open sConnString
End If
ADODBConnection.Execute sInsert & sValues, , adExecuteNoRecords
Next myDue

Exit_Sub:
myDues.Free
Exit Sub

Err_Resume:
Select Case Err.Number
'-- erreur de données
Case ERR_ADO
Select Case ADODBConnection.Errors(0).NativeError
Case ERR_ADO_DUPLICATE_VALUE
MsgBox "Blabla sur les doublons .."
Case Else
MsgBox "Erreur ADO n° " &
ADODBConnection.Errors(0).NativeError & vbCr &
ADODBConnection.Errors(0).Description, vbCritical
End Select
Resume Next
Case Else
MsgBox "Erreur n° " & Err.Number & vbCr & Err.Description,
vbCritical
Resume Exit_Sub
End Select

End Sub


"J-Pierre" a écrit dans le message de
news: #
Oui oui, on te suit....

Tu peux publier le code ? En particulier celui où tu gères les erreurs ?

J-Pierre