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

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : septembre 2007
    Messages : 646
    Points : 264
    Points
    264

    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
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 2 576
    Points : 4 118
    Points
    4 118

    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 ?
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : septembre 2007
    Messages : 646
    Points : 264
    Points
    264

    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 actif
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : septembre 2007
    Messages : 646
    Points : 264
    Points
    264

    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
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 2 576
    Points : 4 118
    Points
    4 118

    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), ...
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  6. #6
    Expert confirmé
    Avatar de tee_grandbois
    Homme Profil pro
    retraité mais encore activé
    Inscrit en
    novembre 2004
    Messages
    3 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité mais encore activé

    Informations forums :
    Inscription : novembre 2004
    Messages : 3 349
    Points : 5 772
    Points
    5 772

    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 actif
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : septembre 2007
    Messages : 646
    Points : 264
    Points
    264

    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 confirmé
    Avatar de tee_grandbois
    Homme Profil pro
    retraité mais encore activé
    Inscrit en
    novembre 2004
    Messages
    3 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité mais encore activé

    Informations forums :
    Inscription : novembre 2004
    Messages : 3 349
    Points : 5 772
    Points
    5 772

    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 actif
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : septembre 2007
    Messages : 646
    Points : 264
    Points
    264

    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
    Membre expérimenté Avatar de hyperion13
    Homme Profil pro
    Calot120 - Enseignant Post Bac
    Inscrit en
    octobre 2007
    Messages
    1 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Calot120 - Enseignant Post Bac
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2007
    Messages : 1 120
    Points : 1 726
    Points
    1 726

    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)=""));
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    GMT+4 - 21°19'18" S - 055°25'32" E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse est pertinente. N'oubliez pas svp de clôturer le sujet en cliquant sur

  11. #11
    Expert confirmé
    Avatar de tee_grandbois
    Homme Profil pro
    retraité mais encore activé
    Inscrit en
    novembre 2004
    Messages
    3 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité mais encore activé

    Informations forums :
    Inscription : novembre 2004
    Messages : 3 349
    Points : 5 772
    Points
    5 772

    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 actif
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : septembre 2007
    Messages : 646
    Points : 264
    Points
    264

    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, 09h19
  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, 21h06
  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, 17h05
  4. mise a jour avec une requete croisee
    Par antoine dpt dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/09/2009, 14h55
  5. Probleme avec une requete mise a jour
    Par mael94420 dans le forum ASP
    Réponses: 2
    Dernier message: 08/03/2006, 21h56

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