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 :

Requête de mise à jour avec plus de 9 critères


Sujet :

Requêtes et SQL.

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut Requête de mise à jour avec plus de 9 critères
    Bonjour le phorum

    voilà j'ai une question sur une requête de mise à jour
    est il possible d'ajouter plus de 9 critères afin de mettre à jour les champs en fonction du test de celui ci
    en effet, j'ai une table que je dois mettre à jour (renseigner les champs vides) mais qui comporte plus de 9 colonnes
    comme je dois tester tous les champs, la requête (dans l'outil de création basique) ne permet que 9 conditions OU (un peu le même principe des requêtes SI imbriquées dans Excel a priori)
    Je suis donc limité

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE CLIENT SET CLIENT.CLI_CATEGORIE = "P", CLIENT.CLI_PAYS_ID = "FR", CLIENT.CLI_NPAI = "0", CLIENT.CLI_CP = "00000", CLIENT.CLI_VILLE = "NR"
    WHERE (((CLIENT.CLI_CATEGORIE)="")) OR (((CLIENT.CLI_PAYS_ID)="")) OR (((CLIENT.CLI_NPAI)="")) OR (((CLIENT.CLI_CP)="")) OR (((CLIENT.CLI_VILLE)=""));

    puis-je contourner ce problème via une astuce ou du vba ?

    merci d'avance pour votre aide ou piste...

    david

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    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 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,

    Une requete peut être saisie en texte (mode SQL) et il n'y a alors pas de limite sur les conditions

    Mais je m'interroge par ailleurs sur la pertinence de cette requete qui vient écrire par exemple CLI_CATEGORIE = "P" pour un client qui avait déjà une catégorie mais pas de pays ?

    Enfin Access distingue "" et null donc quid des client où CLI_CATEGORIE = null ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    merci de ta réponse nico84
    tu soulèves un gros bug de ma part sur la mise à jour que tu évoques ci dessous
    comment faire dans ce cas pour mettre à jour indépendamment les champs
    si categorie est vide ou null alors P
    si cp est vide ou null alors NR
    et ainsi de suite

    si je suis ce que tu me dit il faudrait que je fasse une requête de mise à jour par champs

    je n'y suis plus du tout là.....

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    en plus je viens de me rendre compte que la requête n'a aucune action
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE CARTE SET CARTE.CART_ACTIVE = "O"
    WHERE (((CARTE.CART_ACTIVE)=IsNull([CARTE].[cart_active]) Or (CARTE.CART_ACTIVE)=IsEmpty([CARTE].[cart_rest_id])));

    il trouve aucune valeur vide ou nulle alors que j'en ai 4

    En fait pour résumé mon besoin, je charge 3 tables hebdomadairement
    celle ci sont ajoutées à 3 tables historisées
    les tables historisées comportent des champs qui ne doivent pas être vide donc pour éviter un problème de rejet lors de l'insertion, j'ajoute une valeur par défaut via une requête mise à jour
    mais je dois manquer quelque chose car cela ne fonctionne pas
    si je mets une valeur comme critère comme =1 cela est OK
    Si par contre je mets null ou vide ou "" alors pas de mise à jour
    je ne comprends pas le problème

  5. #5
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    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 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Pour faire simple, s'il n'y a pas trop de lignes on peut reprendre toute la table :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE CLIENT SET CLI_CATEGORIE=iif(nz(CLI_CATEGORIE,"")="","P",CLI_CATEGORIE), ...

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 769
    Points : 14 810
    Points
    14 810
    Par défaut
    bonsoir,
    la requête (dans l'outil de création basique) ne permet que 9 conditions OU (un peu le même principe des requêtes SI imbriquées dans Excel a priori)
    Je suis donc limité
    on peut insérer des lignes avec l'icône "Insérer des lignes" dans l'onglet "Créer" du ruban.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    Oups je ne savais pas mervi de l information
    Mais quen est il des remarques plus haut sur la non mises a jour de la table pour les valeurs nulles ou vides ou egale a ""

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 769
    Points : 14 810
    Points
    14 810
    Par défaut
    Mais quen est il des remarques plus haut sur la non mises a jour de la table pour les valeurs nulles ou vides ou egale a ""
    personnellement je ferai comme te l'as suggéré nico84 et je ferai une requête par champ à mettre à jour, éventuellement par VBA:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Currentdb.Execute("UPDATE CLIENT SET CLI_CATEGORIE=iif(nz(CLI_CATEGORIE,"""")="""",""P"",[CLI_CATEGORIE]);", dbFailOnError)
     
    Currentdb.Execute("UPDATE CLIENT SET CLI_PAYS_ID=iif(nz(CLI_PAYS_ID,"""")="""",""FR"",[CLI_PAYS_ID]);", dbFailOnError)

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    Ok je commence a comprendre certaines choses lors de mon traitement
    La mise a jour modifie l integralite de ma table y compris les champs qui ne devait pas l etre
    Ex
    Si un champ rentre dans les criteres d une des conditions tous les champs a mettre a jour etaient modifies
    Ce qui est faux evidemment
    Je vais donc partir sur une requete par champ
    Je teste demain et voys tiens au courant

  10. #10
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Citation Envoyé par munity Voir le message
    en plus je viens de me rendre compte que la requête n'a aucune action
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((CARTE.CART_ACTIVE)=IsNull([CARTE].[cart_active]) Or (CARTE.CART_ACTIVE)=IsEmpty([CARTE].[cart_rest_id])));
    il trouve aucune valeur vide ou nulle alors que j'en ai 4
    Salut
    Il est peut-être normal que votre req ne fonctionne pas, car il y a un truc que je ne comprends pas dans votre clause WHERE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((CARTE.CART_ACTIVE)=IsNull([CARTE].[cart_active]) Or (CARTE.CART_ACTIVE)=IsEmpty([CARTE].[cart_rest_id])))
    Ce serait plus tôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((CARTE.CART_ACTIVE) Is Null)) OR (((CARTE.CART_ACTIVE)=""));

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 769
    Points : 14 810
    Points
    14 810
    Par défaut
    Citation Envoyé par munity Voir le message
    Ok je commence a comprendre certaines choses lors de mon traitement
    La mise a jour modifie l integralite de ma table y compris les champs qui ne devait pas l etre
    Ex
    Si un champ rentre dans les criteres d une des conditions tous les champs a mettre a jour etaient modifies
    Ce qui est faux evidemment
    Je vais donc partir sur une requete par champ
    Je teste demain et voys tiens au courant
    bonjour
    dans ce cas le plus simple est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Currentdb.Execute("UPDATE CLIENT SET CLI_CATEGORIE=""P"" WHERE Nz([CLI_CATEGORIE],"""")="""";", dbFailOnError)
     
    Currentdb.Execute("UPDATE CLIENT SET CLI_PAYS_ID=""FR"" WHERE Nz([CLI_PAYS_ID],"""")="""";", dbFailOnError)
    le Nz sert à inhiber les valeurs nulles en les remplacant par "", mais on pourrait l'écrire aussi comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Currentdb.Execute("UPDATE CLIENT SET CLI_CATEGORIE=""P"" WHERE (CLI_CATEGORIE="""" OR IsNull([CLI_CATEGORIE]) );", dbFailOnError)
     
    Currentdb.Execute("UPDATE CLIENT SET CLI_PAYS_ID=""P"" WHERE (CLI_PAYS_ID="""" OR IsNull([CLI_PAYS_ID]) );", dbFailOnError)

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    Super ca marche
    Merci a tous

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/08/2013, 08h19
  2. Requete de mise a jour avec une somme defini par critere
    Par kinof dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 18/07/2013, 20h06
  3. Requete de Mise a jour avec une Jointure :
    Par Bonero dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/01/2012, 16h05
  4. mise a jour avec une requete croisee
    Par antoine dpt dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/09/2009, 13h55
  5. Probleme avec une requete mise a jour
    Par mael94420 dans le forum ASP
    Réponses: 2
    Dernier message: 08/03/2006, 20h56

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