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

Requêtes et SQL. Discussion :

Numéro auto table access


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 57
    Points
    57
    Par défaut Numéro auto table access
    Bonjour

    j'ai une table client avec les champs Nom, Prénom, date de naissance, adresse, telephone, commentaires, index, date_ajout

    une clé primaire a été attribuée au champ Nom, Prénom, date de naissance, telephone.

    Etant un numéro auto, le champ index s'incrémente tout seul de 1, comment est-il possible que j'ai des nombre identique sur ce champ index?

    et pourquoi existe-il des trous dans la numérotation de ce champ (exemple on passe de la valeur 5 à 15 ou 56 à 80) ?

    Petite précision :

    cette table client est alimentée via une requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into client( Nom, Prénom, date de naissance, adresse, telephone)
     
    select  Nom, Prénom, date de naissance, adresse, telephone from activité_jour
    cette requete insert permet de rajouter seulement les personnes qui sont absentes dans la table client

    Merci de votre aide

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    Bonjour,

    Citation Envoyé par moimemessssssssss Voir le message
    comment est-il possible que j'ai des nombre identique sur ce champ index?
    C'est pas possible sur un champ numauto dans la table où il est défini. Il n'y a pas une jointure qqpart ?

    Citation Envoyé par moimemessssssssss Voir le message
    pourquoi existe-il des trous dans la numérotation de ce champ (exemple on passe de la valeur 5 à 15 ou 56 à 80) ?
    Quand une ligne est supprimée le n° auto libéré n'est pas repris

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 57
    Points
    57
    Par défaut
    en fait j'utilise une jointure pour remplir la table activité_jour à partir de laquelle je renseigne la table client sans jointure.

    ca peut venir de la?

    je ne supprime pas de lignes :j'insere juste des lignes dans la table.
    dans ce cas la lorsque j'insere des lignes qui sont deja presentent dans la table client est ce les numero correspondant à ces lignes sont ignorées puisque j'ai mis des clé primaires évitant d'avoir des doublons?


    merci

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    Sur la jointure il peut y avoir des doublons d'index, mais pas sur la table elle même !

    Dans l'insert, la clé primaire n'est pas renseignée donc il ne peut jamais y avoir de doublon sur l'index si c'est une clé primaire numauto, par contre le même client peut s'insérer plusieurs fois (avec un index différent)...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 57
    Points
    57
    Par défaut
    bonjour,

    en fait je comprends pas trop...
    dans la jointure qui permet de remplir la table activité_jour, il ne peut pas avoir de doublons d'index puisque je n'ai pas de champs index ni de champ num auto dans la table activité_jour. et la jointure s'effectue à partir de table qui n'ont pas de champs numauto...

    justement il existe des doublons d'index : cest bien un numero auto mais ce n'est pas une clé primaire...
    les clés primaire se trouvent sur les autres champs de la table pour éviter d'avoir le même client donc je comprends pas votre phrase
    "par contre le même client peut s'insérer plusieurs fois (avec un index différent)... "

    merci de votre aide

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    J'ai du mal à être plus clair en restant abstrait...

    Dans une table T avec un index I numauto il n'y a pas de doublon de I
    Dans une jointure certains champs de T peuvent être dupliqués et alors I aura des doublons

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    et pourquoi existe-il des trous dans la numérotation de ce champ (exemple on passe de la valeur 5 à 15 ou 56 à 80) ?
    Les champs autonum te garantissent un numéro unique pas que la numérotation soit sans trou.

    Comme l'a dit nico84, si tu supprimes un enregistrement son numéro est perdu.

    Et si tu crées un enregistrement et que tu l'abandonnes sans le sauvegarder, le numéro est perdu lui aussi.

    Enfin il arrive parfois que la numérotatoion automatique fasse des bétises, le compteur repart à une valeur inférieure à la valeur maximale. La seule méthode pour se sortir de ce cas TRÈS rare est de compacter ta BD puis de reinitialiser le compteur à une valeur valide. Cela se fait avec du SQL uniquement mais je ne me souviens pas de la syntaxe.

    Personnellement j'utilise toujours les autonums comme clef primaire et je mets un index unique composé pour garantir que mes données soient unique. Cela me permet d'avoir toujours une clef valide même si les éléments de l'unicité ne sont pas complet.

    Attention dans un index unique si l'un des champs est null alors Access autorise des duplicats (ex : E1, C1 : Toto, C2 :Null et Index unique C1 et C2, alors on peut créer autant d'enr avec C1 : Toto et C2 : Null) ... pas cool !

    A+

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 57
    Points
    57
    Par défaut
    Bonjour

    merci marot_r
    Les champs autonum te garantissent un numéro unique pas que la numérotation soit sans trou.

    Comme l'a dit nico84, si tu supprimes un enregistrement son numéro est perdu.
    non mais j'ai explqué que ce champ automun ne me donne pas du numéro unique bien que par définition cela devrait être le cas...
    j'ai aussi ajouté que je ne supprimé pas de lignes mais jen insere juste


    Attention dans un index unique si l'un des champs est null alors Access autorise des duplicats (ex : E1, C1 : Toto, C2 :Null et Index unique C1 et C2, alors on peut créer autant d'enr avec C1 : Toto et C2 : Null) ... pas cool !
    j'ai pas saisi cette partie la , pourriez-vous svp expliquer? merci

    merci nico84 mais

    Dans une table T avec un index I numauto il n'y a pas de doublon de I
    justement dans cette table T j'ai des doublons sur le numauto I

    Dans une jointure certains champs de T peuvent être dupliqués et alors I aura des doublons
    je ne fais pas de jointure avec T mais avec une table T' qui permet d'insérer dans T des lignes et les champs de T ne sont pas dupliqués dans la jointure

    voila peut etre que je m'explique mal
    je ne sais pas quoi dire...

    merci

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    As-tu fais un compactage de ta BD ?

    Tu es peut-être victime d'un des rares cas de béguement de NumAuto.

    Essaye de le reinitialiser à une vaeur valide (c-à-d supérieure à la valeur max actuelle) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE NomTaTable ALTER COLUMN NomTonAutonumField COUNTER(TaValeurDepart,1)
    avec un Docmd.RunSQL pour l'exécuter.

    A+

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Citation:
    Attention dans un index unique si l'un des champs est null alors Access autorise des duplicats (ex : E1, C1 : Toto, C2 :Null et Index unique C1 et C2, alors on peut créer autant d'enr avec C1 : Toto et C2 : Null) ... pas cool !

    j'ai pas saisi cette partie la , pourriez-vous svp expliquer? merci
    Lorsqu'on défini un index unique, les champs qui le composent peuvent être null, contrairement à une clef primaire où tous les champs doivent être non null.

    Le problème c'est que si un des champs est Null Access accepte que plusieurs enregistrements aient la même valeur d'index unique. Ce qui fait que l'index n'est finalement plus unique du tout !!!

    On peut corriger cela par programme en vérifiant à la création qu'il n'y a pas déjà un enregistrement sous cette valeur d'index mais c'est dommage que la base ne le fasse pas elle-même.

    A+

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 57
    Points
    57
    Par défaut
    bonjour

    merci
    alors compactage fait, réinitilisation du numéro à une valeur valide fait et j'ai relancer mes requetes pour remplir la table mais ca change rien

    j'ai le meme numero auto pour 2 clients différents:!!
    je ne sais pas pourquoi
    et j'ai toujours des trous
    dans la numérotation mais peut etre que j'ai sais d'ou viennent ces trous :

    par exemple dans la table mon numero max est 15
    je veux insérer 10 lignes mais les 5 premieres lignes ne sont pas insérée car déja presentes dans la table la 6 eme ligne insérée aura alors le numero 21 ce qui explique les trous...
    est ce possibE?

    merci

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Les trous sont "normaux" et ne sont pas inquiétant du tout par contre obtenir des doubles ne l'est pas.

    Essaye cela qui prend environ 5mn:

    1. Crée une nouvelle base de données vide.
    2. Importe tous les objets de ta base actuelle dans ta nouvelle base.
    3. Compresse
    4. Reessaye.


    Si cela ne donne rien et que tu utilises une version de Access inférieure ou égale à 2007, veux-tu mon adresse email perso pour m'envoyer une copie de ta BD pour que je regarde à la maison ?

    A+

  13. #13
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 591
    Points
    3 591
    Billets dans le blog
    8
    Par défaut
    Salut
    Citation Envoyé par marot_r Voir le message
    Citation:
    Le problème c'est que si un des champs est Null Access accepte que plusieurs enregistrements aient la même valeur d'index unique. Ce qui fait que l'index n'est finalement plus unique du tout !!!
    Encore un piège du NULL à connaitre: toute comparaison avec NULL donne INCONNU et non TRUE ou FALSE.
    Par ailleurs, un pro dit que ce pas normale que sql server refuse deux NULL dans une colonne avec propriété unique. Sa preuve: NULL n'est pas une donnée mais une marque.
    Apparemment la logique n'est pas forcement logique!
    Merci de l'info marot_r
    @+

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    À vrai dire d'après la norme SQL n'importe quoi (addition, compraison, calcul) et Null donne Null.

    Dans la pratique Access traite les nulls comme des nulls ou des 0 ou des chaînes vides et qu'il n'est pas évident de deviner quand il fait quoi.

    Une bonne pratique serait de tester systématiquemnet soi-même si une valeur peut être null et la remplacer par une valeur non null. ex : iif(îsnull([monChamp]);0;[monChamp]). cela permet de garantir comment les nulls seront traités.

    Et attention à Nz() qui dans certaines circonstances (qui dépendent de la langue de Access et du paramétrage régional pour le séparateur de décimal) peut faire sauter les décimales des nombres.

    A+

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 57
    Points
    57
    Par défaut
    bonjour

    merci j'ai réessayé de recréer une nouvelle base mais rien n'y fait ca change pas
    c'est sur acess 2010 et je ne prefere pas transmettre les données pour des raison de confidentialité
    desolé

    sinon pourquoi c'est "normal' les trou?

  16. #16
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 591
    Points
    3 591
    Billets dans le blog
    8
    Par défaut
    Salut
    Si le champ à auto incrément est ciblé dans l'insertion alors les doublons sont bien possibles! Sinon il n'y a pas de raison.
    @+

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 57
    Points
    57
    Par défaut
    bonjour

    Citation Envoyé par alassanediakite Voir le message
    Salut
    Si le champ à auto incrément est ciblé dans l'insertion alors les doublons sont bien possibles! Sinon il n'y a pas de raison.
    @+
    euh ce champ auto num n'est pas rempli par la requete insertion mais est rempli automatiquement par access lorsqu"une ligne s'insere dans la table

    a+

  18. #18
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 591
    Points
    3 591
    Billets dans le blog
    8
    Par défaut
    Salut
    ->fais une copie de la base
    ->Vide la table de destination
    ->compacte la base
    >exécute l'insertion
    Dis-nous le résultat.
    @+

  19. #19
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    sinon pourquoi c'est "normal' les trous ?
    Avec l'autonum Access te garanti (quand il fonctionne correctement) un numéro unique mais il ne te garanti pas une numérotation continue sans trous.

    Les trous on généralement 2 sources :
    1. Les enregistrements supprimés
    2. Les créations avortées.


    Pour ton problème de doublon je n'ai jamais vu cela.

    Essaye d'ajouter un enregistrement à la main, est-ce que la numérotation est correct ?

    Essaye d'ajouter un enregistrement avec une requête d'insertion (pas celle dont tu te serts actuellement, une qui ne fait qu'ajouter un enregistrement), est-ce que la numérotation est correct ?

    Pour la BD à envoyer tu peux peut-être la vider de ses données pour éviter les problèmes de confidentialité.

    A+

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 57
    Points
    57
    Par défaut
    bonjour

    lorsque j'insere une ligne à la main il me prend bien le dernier numero disponible +1
    mais quand j'insere via une requete c'est le dernier numero +1 c'est un numéro intermédiaire vide non pris qu'access attribue
    et je ne sais pas pourquoi

    A+

Discussions similaires

  1. numéro auto positif access
    Par jollyjohn dans le forum Access
    Réponses: 8
    Dernier message: 26/07/2011, 20h18
  2. [AC-2007] Comment récupérer la valeur du dernier numéro auto inséré dans une table ?
    Par marot_r dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2010, 17h17
  3. Réponses: 2
    Dernier message: 05/03/2009, 14h42
  4. [Table]augmenter le nombre de numéro automatique dans access
    Par cedric_balme dans le forum Modélisation
    Réponses: 2
    Dernier message: 27/03/2007, 08h12

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