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 :

Incrément sans numeroauto


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Par défaut Incrément sans numeroauto
    Bonjour,

    Dans ma table principale, l'un des champs a pour valeurs:
    (...)
    2008-11-0045
    2008-11-0046
    2008-11-0047

    J'utilisais jusque là une table intermédiaire et un numéroauto pour l'incrémentation , mais trop contraignant ...

    J'extrait donc la liste d'incréments suivante:
    (...)
    0045
    0046
    0047

    Je voudrais, par une requete mise à jour, générer le 0048 (dans la demande que je précise).

    J'ai essayé de mettre dans la requete de mise à jour

    "2008-11"& ( (Max([liste_dincrements]![increment]) ) +1 )


    Mais ca ne fonctionne pas ...

    Quelqu'un a une idée ? une suggestion?

    merci

    G.

    matériel: W. XP Office 2007
    connaissance: touche F1

  2. #2
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Par défaut
    (1ere discussion donc un loupé)


    il faut lire:


    "2008-11"&"-"& ( (Max([liste_dincrements]![increment]) ) +1 )

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut Toute la requête STP
    Bonjour et bienvenue,

    Pour que nous puissions t'aider efficacement, ce serait sympa de nous donner toute la requête, STP.

    Merci.
    _

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Par défaut
    J'avais essayer d'occulter certains élkéments pour simplfier ma question mais ce n'est visiblement pas la meilleure chose à faire.
    Autant pour moi.

    Voici ma requete:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table_unique SET table_unique.date_fact_nwe = Date(), table_unique.num_fact_nwe = Year(Now()) & "-" & Month(Now()) & "-" & Max([fact_mois_encours]![index_fact_nwe])
    WHERE (((table_unique.date_fact_nwe) Is Null) AND ((table_unique.num_fact_nwe) Is Null) AND ((table_unique.Ref_W)=[Ref_W ?]));

    Elle ne fonctionne pas.

    Access me donne le message suivant:"Vous avez essayé d'éxecuter une requete ne comprenant pas l'expression spécifiée "date_fact_nwe" comme une partie de la fonction d'agrégat.

    NB: j'ai coller le code SQL de la requete mais je passe par le mode création (plus visuel) car je ne connais pas le SQL.

    J'espère que ca précise ma question.

    Merci d'avance

    G.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut
    Bonjour,
    Citation Envoyé par Viggen0020 Voir le message
    J'avais essayer d'occulter certains élkéments pour simplfier ma question mais ce n'est visiblement pas la meilleure chose à faire.
    En fait, bien souvent il faut demander des précisions ce qui pourrait être évité si les participants donnent des informations complètes, précises, voire des exemples.
    La présente discussion illustre parfaitement l'importance de bien poser son problème
    Citation Envoyé par Viggen0020 Voir le message
    Voici ma requete:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table_unique SET table_unique.date_fact_nwe = Date(), table_unique.num_fact_nwe = Year(Now()) & "-" & Month(Now()) & "-" & Max([fact_mois_encours]![index_fact_nwe]) 
    WHERE (((table_unique.date_fact_nwe) Is Null) AND ((table_unique.num_fact_nwe) Is Null) AND ((table_unique.Ref_W)=[Ref_W ?]));

    Elle ne fonctionne pas.
    Ce n'est pas étonnant...

    Si je comprends bien, table_unique.num_fact_nwe est de type texte.
    Aussi, soit on encadre l'expression avec des guillemets, soit on l'inclut dans une fonction de conversion de type de données, ici CStr() (CChaîne en français).

    Pas besoin d'utiliser Now() (Maintenant) si tu n'utilises que le mois et l'année.
    Date() fera l'affaire.

    La fonction Max() que tu veux utiliser ici est une instruction SQL et ne peut pas fonctionner correctement dans ce contexte:
    - soit tu la remplaces par une fonction Access DMax() (MaxDom en français)
    ______ DMax("index_fact_nwe", "fact_mois_encours")
    - soit tu la remplaces par une sous-requête SQL:
    ______ SELECT Max(fact_mois_encours.index_fact_nwe) FROM fact_mois_encours

    Tu pourrais utiliser la fonction Access Format() qui est plus flexible et puissante qu'une construction par concaténation (opérateur &).

    Voilà une proposition qui utilise la variante CStr() / DMax():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE table_unique 
    SET table_unique.date_fact_nwe = Date(), 
        table_unique.num_fact_nwe = CStr( Format(Date(), "yy-mm-") & Format(DMax("index_fact_nwe", "fact_mois_encours"), "0000") ) 
    WHERE (((table_unique.date_fact_nwe) Is Null) AND ((table_unique.num_fact_nwe) Is Null) AND ((table_unique.Ref_W)=[Ref_W ?]));
    Evidemment, je n'ai pas pu tester.
    Tu peux créer une nouvelle requête, afficher le SQL et y copier le texte SQL de ma proposition.

    Bon courage.
    _

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Par défaut
    C'es tout bon !

    Merci JBO.

    J'ai juste un peu modifié ta requete pour l'adapter a mon besoin original: l"incrémentation.

    pour info:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table_unique SET table_unique.date_fact_nwe = Date(), table_unique.num_fact_nwe = CStr(Format(Date(),"yyyy-mm-") & Format((DMax("index_fact_nwe","fact_mois_encours"))+1,"0000"))
    WHERE (((table_unique.date_fact_nwe) Is Null) AND ((table_unique.num_fact_nwe) Is Null) AND ((table_unique.Ref_W)=[Ref_W ?]));
    et je me m'emm... plus avec numeroauto.

    Peut etre a plus pour une prochaine.

    G.

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

Discussions similaires

  1. Numéro de facture qui s'incrémente sans être numéroAuto
    Par joseedaccess dans le forum VBA Access
    Réponses: 15
    Dernier message: 05/09/2017, 11h26
  2. Requête INSERT avec compteur incrémental (sans curseur)
    Par FMJ dans le forum Développement
    Réponses: 10
    Dernier message: 04/01/2014, 12h03
  3. [XL-2010] Recopie incrémentée sans ligne masquées
    Par Eyrymone dans le forum Excel
    Réponses: 0
    Dernier message: 03/01/2014, 15h19
  4. Réponses: 5
    Dernier message: 03/12/2013, 16h10
  5. Réponses: 1
    Dernier message: 06/11/2008, 14h25

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