IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Problème incrémentation auto clé primaire : Rupture de continuité [AC-2016]


Sujet :

Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Problème incrémentation auto clé primaire : Rupture de continuité
    Bonjour à vous,

    Je me permets de poser cette question car je ne trouve pas de réponse concrète, ni de solution à ce problème.

    Contexte : J'ai développé une base accès pour faire du relevé terrain, grosso-modo, c'est de la collecte de données via un gros formulaire.
    Ce gros formulaire, via du code VBA, renseigne une table d'environ 200 champs.
    Pas de soucis pour récupérer les informations, bloqués les valeurs "bizarre" et etc.. Elle est fonctionnelle et opérationnelle, sauf qu'un bug, empêche le bon déroulement d'une fonctionnalité.

    Problème : Lors de la saisi de donnée, un événement inconnu crée une ligne d'enregistrement invisible, je m'explique :
    Lors de la sortie de ma table en version excel ma clé primaire, qui est en numérotation automatique, saute un numéro. (j'ai l'enregistrement 300, 301, 302, 304, 305 etc.. et il me manque le 303).
    Or aucune données n'est manquante (dans mon exemple l'enregistrement 304 est bien celui qui doit venir après le 302, pour l'utilisateur c'est comme si l'incrémentation au lieu de faire +1 à fait +2).

    Test de résolution : J'ai pensé que cela pouvait intervenir lors de la fermeture prématurée de la base, pour cela j'ai bloqué la fermeture par un message de validation, et un compactage de la base par la suite.
    Mais le problème persiste au bout de plusieurs centaines d'enregistrements, il y'a un saut de numérotation automatique.


    J'ai créer une solution bidouille, qui me permet de tout réincrémenter (en passant par un table annexe) donc en soit je peux faire avec.
    Mais j'aimerais connaitre d'où vient le problème, pour essayer d'éviter d'avoir de la bidouille.

    Quelqu'un aurait eu un cas similaire, ou saurait d'où peut venir ce problème ?
    Merci par avance de vos retours, j'espère avoir était assez clair dans mon explication, je m'excuse par avance de ne pas pouvoir diffuser un extrait du fichier (par raison de confidentialité)

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2013
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2013
    Messages : 328
    Points : 477
    Points
    477
    Par défaut
    Dans une table ACCESS avec un champ numeroauto a partir du moment ou tu rentres en écriture dans un nouvel enregistrement access incrémente automatiquement le numeroauto de +1.
    si jamais tu ne valide pas ce champ et que tu sors sans sauvegarder ( touche ESC par exemple )
    le numeroauto se "perd" c'est pour cela que tu peux avoir des "trous" dans ton incrémentation automatique et ainsi donc passer de 302 a 304.
    Cldt

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Merci pour ce retour,

    Du coup pour éviter ce problème il faudrait que j'enregistre via VBA les données de mon formulaires (dans des cases non liés à ma table) sur ma table.

    en gros si je fait un dans un formulaire deux cases à renseigner qui s’appelle "Nom_Client" et "Prenom_Client", au moment d'enregistrer il faut que je lui dise :

    La valeur dans "Nom_Client" tu le mets dans un nouvel enregistrement dans la table "Information_Client", Item "Nom"
    la valeur dans "Prénom_Client" tu le mets dans le même enregistrement précédent dans la table "infromation_Client", Item "Prénom"

    Est ce possible un tel raisonnement ? si oui, comment ça peut se traduire en VBA ?

    merci pour votre retour, j'ai le cerveau qui fume sur ce problème

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2013
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2013
    Messages : 328
    Points : 477
    Points
    477
    Par défaut
    J'ai un peu du mal a suivre.
    les numeroaouto ne doivent te servir que dans dans ta structure relationnelle.
    il ne devrait mme pas apparaître dans tes formulaires ni tes extractions.
    Si jamais tu veux un compteur qui se suit il va falloir le créer de toute pièce.
    Avec un exemple de ce que tu veux faire , ca serait peut etre plus simple.
    Bonne journée

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Alors d'après le schéma joint.

    Je créer un formulaire indépendant, avec deux cases à remplir indépendantes (cases en rouge).

    Je souhaite que lorsque je clique sur le bouton vert, les valeurs dans mes cases indépendantes (en rouge) se classent dans une Table Client.

    De ce fait, lorsque le formulaire est saisie et prématurément fermé, aucune valeur n'est automatiquement enregistrer dans les tables. Tout se fait via un clic.

    J'imagine donc que le code est du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Dim rs As Recordset
     
    Set rs = CurrentDb.OpenRecordset("Client")
     
    rs.AddNew
    rs!nom = Me.Nom
    rs!prenom= Me.Prenom
    rs.Update
    Mais avant de me lancer dedans je veux avoir des conseils sur cette méthode, voir si'il n'y a pas une autre méthode,

    En tout cas merci de ton aide James68

    Nom : Sans titre.png
Affichages : 684
Taille : 22,8 Ko

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2013
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2013
    Messages : 328
    Points : 477
    Points
    477
    Par défaut
    Voila comment j'aurai procéder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    Private Sub Commande4_Click()
    On Error GoTo Err_Commande4_Click
     
    Dim Sql As String
    Dim NomClienLib As String
    Dim PrenomClienLib As String
     
    If IsNull(Me.NomClientValue) Or Me.NomClientValue = "" Or IsNull(Me.PrenomClientValue) Or Me.PrenomClientValue = "" Then
        MsgBox "Certaines valeurs sont nulles !"
    Else
        Sql = "INSERT INTO TB_CLIENT ( CLIENT_NOM, CLIENT_PRENOM ) SELECT """ & Me.NomClientValue & """ as nom , """ & Me.PrenomClientValue & """ as prenom ;"
        DoCmd.RunSQL (Sql)
    End If
     
    Exit_Commande4_Click:
        Exit Sub
     
    Err_Commande4_Click:
        MsgBox Err.Description
        Resume Exit_Commande4_Click
     
    End Sub

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Merci du bout de code, je vais regarder ça, après je maîtrise pas trop le SQL.

    Mais je vais regarder pour plutot écrire dans un fichier .txt a part que dans une table, afin d'être indépendant d'accès.

  8. #8
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2013
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2013
    Messages : 328
    Points : 477
    Points
    477
    Par défaut
    Pas de soucis...
    si jamais c'est Ok , ne pas oublier de mettre en "résolu"...
    a plus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème d'auto-incrémentation de la clé primaire
    Par Jasmine80 dans le forum Administration
    Réponses: 5
    Dernier message: 09/07/2012, 10h57
  2. problème d'auto incrémentation
    Par senv33 dans le forum Débuter
    Réponses: 8
    Dernier message: 24/02/2010, 14h43
  3. Réponses: 9
    Dernier message: 18/11/2009, 18h04
  4. Réponses: 1
    Dernier message: 06/11/2008, 15h25
  5. Problème d'auto-incrément
    Par rageice dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/12/2007, 00h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo