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 :

Insertion avec valeur incrémentée [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 10
    Points
    10
    Par défaut [Résolu] Insertion avec valeur incrémentée
    Bonjour,

    Je n'arrive pas créer une requête qui répond à mon besoin.

    J'ai une table de "factures" qui ont deux champs servant à les identifier: [N° fournisseur] et [Incrément].

    J'aimerais faire une requête qui crée une nouvelle facture en incrémentant le champs [Incrément] automatiquement. Par exemple si la facture 012-01 existe déjà, j'aimerais que ma requete, à laquelle je fournis simplement le paramètre [N° fournisseur]=012, qu'elle crée une nouvelle entrée avec [Incrément]=02.

    Est-ce possible?

    Merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    Oui cela est possible en exécutant une requête avec l'agrégat MAX par exemple sur le champs "[Incrément]" et tu lui ajoutes 1.

    En gros tu peux tout imbriquer dans une requête =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO factures([N° fournisseur], [Incrément]) 
    SELECT '012', max([Incrément]) + 1
    FROM factures
    WHERE [N° fournisseur] = '012'

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Merci Tassin , ça marche mais il me reste un problème. Lorsque la table est vide, max([Incrément]) me rend Null, et Null + 1 = Null aussi..

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    J'ai fini par trouver, c'est tordu cet Access.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIf(Max([Incrément]) Is Null, 1, Max([Incrément]) +1)
    me crée un nouvel enregistrement [Incrément] = 1 lorsqu'il s'agit du tout premier enregistrement. Ensuite 2,3,4 .. c'est exactement ce qu'il me faut.

    Attention tout de même à ne pas confondre avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    max(IIf([Incrément] Is Null, 0, [Incrément])) + 1
    Cette variante ne marchera pas si la table est vide (max rendra Null), mais marchera tout de même s'il y a déjà des enregistrements Null. Nuance..

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par walker34 Voir le message
    J'ai fini par trouver, c'est tordu cet Access.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIf(Max([Incrément]) Is Null, 1, Max([Incrément]) +1)
    me crée un nouvel enregistrement [Incrément] = 1 lorsqu'il s'agit du tout premier enregistrement. Ensuite 2,3,4 .. c'est exactement ce qu'il me faut.

    Attention tout de même à ne pas confondre avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    max(IIf([Incrément] Is Null, 0, [Incrément])) + 1
    Cette variante ne marchera pas si la table est vide (max rendra Null), mais marchera tout de même s'il y a déjà des enregistrements Null. Nuance..
    Je t'aurai proposé cette méthode car je ne vois qu'elle.

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

Discussions similaires

  1. Requête INSERT avec compteur incrémental (sans curseur)
    Par FMJ dans le forum Développement
    Réponses: 10
    Dernier message: 04/01/2014, 13h03
  2. INSERT multiple avec valeur à incrémenter
    Par Thibault69009 dans le forum Requêtes
    Réponses: 2
    Dernier message: 31/12/2013, 15h22
  3. INSERT avec valeur connue et résultat d'un SELECT.
    Par itokia dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/09/2011, 17h07
  4. Réponses: 31
    Dernier message: 28/04/2006, 12h09
  5. INSERT avec valeur connue et résultat d'un SELECT...
    Par snoop dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 27/04/2005, 09h54

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