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

Langage SQL Discussion :

Trouver les trous ou le max


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Par défaut Trouver les trous ou le max
    bonjour,
    je pose mon problème :
    j'ai une base access avec une table.
    je remplis cette table par l'intermédiaire d'une IHM VB
    Lorsque je supprime une entrée et que j'ajoute la suivante elle sera stockée sur la suivante et non celle supprimée
    je cherche donc de l'aide pour trouver une requête qui m'identifierait le premier trou rencontré pour qu'ensuite je le remplisse par la nouvelle entrée.

    J'ai trouvé http://www.developpez.net/forums/d79...e/#post4602718, mais j'ai du mal a l'adapter.
    J'ai aussi trouvé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT     MIN([N°] - 1) AS NextID
    FROM         Arbres AS T1
    WHERE     ((([N°] - 1) > 0) AND
                              (((SELECT     [N°]
                                   FROM         Arbres T2
                                   WHERE     T2.[N°] = T1.[N°] - 1)) IS NULL))
    mais cela m'identifie seulement le premier index à remplir et si tout les trous sont comblés cela retourne la valeur "NULL"

    Existe-t-il donc une requête qui ferait la même chose et qui en plus si null est trouvé me renverrait l'index le plus élevé ?

    Cordialement

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Si ces trous que tu cherches à combler sont sur la colonne clé primaire de la table, laquelle est probablement de type NumAuto, ne le fais pas !

    Une clé primaire doit être invariable, sans signification, non présentée à l'utilisateur et utile seulement pour le SGBD pour gérer les associations entre tables.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Par défaut
    Bon, d'accord, ça c'est fait comme on dit ^^

    Mais cela ne pose pas de problème plus tard dans le temps ?
    si dans l'avenir j'ai 100 entrées et que j'en supprime 40, il y aura un trou de 40, ce n'est pas "grave" ? Cela ne grossit pas la base pour rien ?

    et pour précision c'est en effet une clé primaire Auto-Incrémenté.

    Mais lors de ma requête INSERT INTO je dois mettre une valeur, sinon j'ai une erreur : "Le nombre de valeurs de la requête doit coïncider avec le nombre de champs destination"
    Pour info voici ma requète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO MaTableVALUES ('000000000A','1121','20','14','161','134','225',True)

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    Pour info, les "trous", n'ont aucune importance ! ça ne grossit pas la base, puisque justement ils n'y sont pas, et que le vide ne prend pas de place

    pour ton insertion, si tu as une clef auto-incrémentée, il faut que tu nommes explicitement les colonnes que tu renseignes, dans l'ordre dans lequel tu les mets dans la liste qui suit VALUES

    Code sql :

    INSERT INTO MaTable(Colonne2, Colonne3,...) VALUES('valeur pour la colonne2', 'Valeur pour la colonne 3',...)


    Ta colonne en autoincrément prendra automatiquement sa valeur

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Par défaut
    je connaissais le fait de donner avant le VALUES les intitulés de colonne, mais je voulais être sûr qu'il n'y avait pas d'autre possibilité que celle-ci, car lorsqu'il y a plus de 10 colonnes, ça fait long dans la requête

    Et merci pour la précision du vide

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour

    Pour info, les "trou", n'ont aucune importance ! ca ne grossit pas la, puisque justement ils n'y sont pas, et que le vide ne prend pas de place
    Euh, ne fait de ce cas une généralité tu risquerais d'être surpris.

    Je ne connais pas le fonctionnement d'Acces mais sous d'autres sgbd des "trous" suite à des delete qui peuvent prendre de la place.

    edit :avant qu'on me saute dessus, ce n'est pas le saut de numéro de clef qui en prendra mais plutôt l'espace disque engendré par un delete qui peut ne pas être réutilisé.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Par défaut
    Erf, et je peux le savoir comment si mon SGBD prend de la place ?

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 18/02/2014, 17h27
  2. Trouver les trous dans des périodes sur la même table
    Par CinePhil dans le forum Requêtes
    Réponses: 5
    Dernier message: 11/04/2009, 08h56
  3. Réponses: 12
    Dernier message: 26/11/2008, 10h50
  4. ou trouver les samples de 3ds max 6
    Par m_jaz3 dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 20/05/2006, 11h36
  5. Problème pour trouver les MAX
    Par Erakis dans le forum Requêtes
    Réponses: 5
    Dernier message: 02/05/2006, 19h58

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