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 :

Requete MAJ avec différente conditions DONC différents résultats sur un meme champs ?


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 125
    Points : 62
    Points
    62
    Par défaut Requete MAJ avec différente conditions DONC différents résultats sur un meme champs ?
    Bonjour à tous.

    Voila la situation:

    J'ai plusieurs requete Update. Chacune d'entre elle agit sur un seul et meme champ [Progress]. L'une va par exemple donné la valeur 1 à ce champ en function d'une certaine condition. L'autre va lui donné la valeur 2 si il respecte une condition différente etc

    Je sais, ce serait plus simple de transformer ce champ [Progress] en champs "calculé". C'était le cas avec des calculs de type VraiFaux. Jusqu'au moment ou il a fallut que j'utilise la date du jour avec Now() ce qui est impossible dans un champ calculé.....

    Du coup me voila à transformer mon champ calculé en texte, et à lui relier plusieurs requete update. C'EST LONG.
    Le problem vient du fait que sur une seul requete update je n'arrive pas à mettre plusieurs fois le meme champ [Progress]; mais avec à chaque fois des résultats différents en function de conditions différentes !

    Est-ce seulement possible ? Avoir une seule requete qui me dit pour un seul champ "si tel condition alors il vaut ça/si tel autre condition alors il vaut ça" ???

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Salut,

    ne peux-tu pas faire une fonction qui prend en paramètre tes n champs en entrée et sorte la valeur en sortie que tu appelles dans ta requete UPDATE ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 125
    Points : 62
    Points
    62
    Par défaut
    Salut, en VBA tu veux dire ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Salut,

    oui tout à fait

    une fonction dans un module du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function MaFonction(Param1 as string, Param2 as Date, Param3 as Integer) as Integer
    IF Param1="OK" Then
    'blabla
    End If
    End Function
    appelée dans ta requête update

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TaTable Set TonChamp=MaFonction(Champ1,CHamp2,CHamp3)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 125
    Points : 62
    Points
    62
    Par défaut
    Bonjour,
    Merci pour ces pistes

    Pourrais tu donner un exemple à peine plus précis s'il te plait ? J'ai pas l'habitude du VBA sur acces et je ne sait pas comment s'appelle les divers outils acces dans ce language ^^

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Salut,

    Pour t'en donner plus, il me faudrait avoir un peu plus de détails que
    Citation Envoyé par Rydrake Voir le message
    L'une va par exemple donné la valeur 1 à ce champ en function d'une certaine condition. L'autre va lui donné la valeur 2 si il respecte une condition différente etc
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 125
    Points : 62
    Points
    62
    Par défaut
    Ca marche.
    J'ai un champ [Performance]

    Voici les valurs qu'il peut prendre :

    - "Early" si le champ [X] est plus petit que 0
    - "OnTime" si le champ [X] est entre 0 et 5
    - "Late" si le champ [X] est supérieur à 5

    Jusque la c'est faisable avec un champ calculé, mais il peut prendre une autre valeur qui elle n'est pas calculabe dans ce type de champ car elle utilize la date du jour :

    -"Will be late" si le champ [Y] (qui est une date) est supérieur à la date du jour

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    OK,

    on transformerait alors ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function MaFonction(Param1 as string, Param2 as Date, Param3 as Integer) as Integer
    IF Param1="OK" Then
    'blabla
    End If
    End Function
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function MaFonction(ChampY as Date) as String
    IF ChampY > Date Then
    MaFonction = "Will be late"
    Else
    MaFonction = "Ca passe crême"
    End If
    End Function
    Et donc
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TaTable Set TonChamp=MaFonction(ChampY)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 125
    Points : 62
    Points
    62
    Par défaut
    Merci beaucoup ce code marche bien pour appliquer une valeur à mon champ en fonction du champ [Y]

    Cependant, comme dit dans mon message précédent, la valeur de mon champ dépend aussi du champ [X], et je n'arrive pas à modifier le code pour avoir un truc du style ElseIf (Me.X.Value)=0 Then....etc
    Pour l'instant j'ai juste une requête Mise à Jour qui modifie mon champ en fonction du champ [Y]; comment faire pour que cela vérifie aussi la valeur du champ [X] ?


    Ps : le code que tu m'a gentiment donné (<3) marche parfaitement pour vérifier la date, mais certains enregistrements du champ[Y] sont vide et la ça fait déconner le code, comment y remédier ?? J'ai essayé un truc du style If IsNull(ChampY) Then mais ça ne marche pas trop. Mon champ doit prendre une valeur en fonction du champ [Y] certes, mais même si ce dernier est vide ça va lui donner une certaine valeur.

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Salut,

    je ne connais pas la totalité de tes cas de figure, aussi je te fais avancer petit à petit, mais je n'ai pas vocation à pêcher pour toi, juste t'apprendre à pêcher

    Quel est ton code actuel, quelle erreur rencontres-tu ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 125
    Points : 62
    Points
    62
    Par défaut
    Salut,

    Oui et c'est très bien ainsi. Je préfère comprendre tout ça que je fais que faire un vieux copier coller. Merci encore

    Voici le code que j'ai (J'ai remplacé le champY par ChampStarting_Date)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function MaFonction(ChampStarting_Date As Date) As String
     
    If ChampStarting_Date < Date Then
        MaFonction = "Will be late"
    Else
        MaFonction = "On Time"
    End If
     
    End Function

    C'est donc vraiment la même chose que ce que tu m'as fourni. J'ai donc créé une requête Mise A Jour, y ai entrer le champ nommé [Progress] (c'est celui-ci donc qui change), et ai indiqué dans la ligne miseàjour : MaFonction(Starting_Date).

    Ce qu'il se passe donc, c'est que la fonction s'applique sur le champ [Starting_Date] et en fonction de sa valeur, modifie celle de [Progress]. Grace à ton code, elle prend la valeur "Will be late" si [Starting_Date]<Date; sinon elle prend la valeur "On Time".

    Cependant; [Starting_Date] est parfois vide. Dans ce cas, un message d'erreur apparaît "Microsoft n'arrive pas à mettre à jour tous les enregistrements de la requête mise à jour. Microsoft n'a pas mis à jour 2 champs à cause d'un échec de conversion type" donc j'ai le choix entre continuer ou annuler, je continue. Les enregistrements ou [Starting_Date] est pein fonctionnent normalement, et les enregistrements ou [Starting_Date] est vide laissent le champ [Progress] vide. Or j'aimerai que ce dernier prenne la valeur "Not Started" dans cette situation ! Mais je n'arrive pas à modéliser le code.

    J'ai essayé avec des If IsNull(ChampStarting_Date) mais je n'y suis pas arrive le message d'erreur continue d’apparaître. Je pense que la solution à ce problème ne dois pas être compliqué. Surement quelque chose du style If Error Then...



    DEUXIEMEMENT x)
    J'aimerai que la fonction me change [Progress] en fonction de [Starting_Date] MAIS AUSSI d'un autre champ numérique [TAEW]...et la ça m'a l'air plus complexe...



    Bref je te remercie par avance, en espérant que tu trouves une solution

Discussions similaires

  1. [AC-2013] Requete de MAJ avec comme condition une check box
    Par grpoirier dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 12/05/2016, 16h11
  2. Réponses: 6
    Dernier message: 24/05/2014, 12h38
  3. requete sql avec une condition dans une zone de liste
    Par khilim1 dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/12/2008, 12h00
  4. REQUETE MAJ AVEC 2 TABLES
    Par maverick91 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/09/2007, 15h16
  5. requete update avec une condition
    Par youtou dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/06/2006, 20h55

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