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 :

Souci SWITCH trop complexe [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Points : 151
    Points
    151
    Par défaut Souci SWITCH trop complexe
    Bonjour,

    J'ai un petit (gros ) souci avec une requête d'ajout et la fonction SWITCH.

    Cette partie de la requête suivante fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Private Sub Commande0_Click()
     
    Dim sql As String
    sql = " INSERT INTO tblReceptionfichierXLCausedesretards ( Client, [v AR-ligne], [v ref# Client : ligne], [Code article],"
    sql = sql & " Article, [v representant], [v planificateur], [Qté ordre], [V fin fab prevue], [Date livraison planifiee],"
    sql = sql & " [v Date modifiée accusé depart], [v Date derniere modification des dates accuses], [OF], CAP, Ligne )"
    sql = sql & " SELECT Sheet1.[Def#Client], [OV] & ' - ' & [ligne] AS [V AR-ligne],"
    sql = sql & " [No commande client] & ' - ' & [Numero comm# client] AS [V réf client ligne],"
    sql = sql & " Sheet1.[Code Article], Sheet1.Designation, Sheet1.[Adv client],"
    sql = sql & " Sheet1.Planner, Sheet1.[Qté backlog], Sheet1.[Ddée EXW],"
    sql = sql & " Sheet1.[reel ddée], Sheet1.[Acc# EXW],"
    sql = sql & " Sheet1.[Modif# EXW],"
    sql = sql & " Sheet1.[Production order],"
     
    ' change le contenu dans le champ CAP
    sql = sql & "  Switch("
    sql = sql & "[Family Newsletter]='Accessories for A Contactors','AU5',"
    sql = sql & " [Family Newsletter]='Contactor Size 1 A9 to A16','A9',"
    sql = sql & " [Family Newsletter]='Contactor Size 1 AL9 to AL16','AL9',"
    sql = sql & " [Family Newsletter]='Accessories for Bar Contactors' and 'Bar Contactors < 800A' and 'Bar Contactors >= 800A','OFR',"
    sql = sql & " [Family Newsletter]='Contactor Size 2 A26','A26',"
    sql = sql & " [Family Newsletter]='Contactor Size 2 A30 to A40','A30-40',"
    sql = sql & " [Family Newsletter]='Contactor Size 2 AL26','AL26',"
    sql = sql & " [Family Newsletter]='Contactor Size 2 AL30 to AL40','AL30-AL40',"
    sql = sql & " [Family Newsletter]='Contactor Size 3 A50 to A75','A50-A75',"
    sql = sql & " [Family Newsletter]='New AF Contactors','AF',"
    sql = sql & " [Family Newsletter]='New SNK Terminal Blocks','SNK',"
    sql = sql & " [Family Newsletter]='Other contactors (UA-RA, AE, GAE, TAE…) Size 1' AND 'Other contactors (UA-RA, AE, GAE, TAE…) Size 2' AND 'Other contactors (UA-RA, AE, GAE, TAE…) Size 3','AE',"
    sql = sql & " [Family Newsletter]='Sensors for Industrial Market','ANR',"
    sql = sql & " [Family Newsletter]='Sensors for Railway Market','ANS' "
    sql = sql & " ) AS CAP,"
     
    ' Change le contenu dans le champ Ligne
    sql = sql & " Switch("
    sql = sql & "[Ligne1]='L1-Terminal Blocks','L1',"
    sql = sql & "[Ligne1]='L2-PCB Connection','L2',"
    sql = sql & "[Ligne1]='L3-Control Signaling','L3',"
    sql = sql & "[Ligne1]='L4 -PLC','L4',"
    sql = sql & "[Ligne1]='L5-Contactors','L5',"
    sql = sql & "[Ligne1]='L7-Current Sensors','L7'"
    sql = sql & " ) AS NumLigne"
    sql = sql & " FROM Sheet1;"
    Debug.Print sql
    DoCmd.RunSQL (sql)
    End Sub
    Je rajoute ce code suivant à la suite du 1er SWITCH, et là ma requête se plante. Soit c'est trop complexe, soit un pb de syntaxe!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    'suite après le 1er switch à la ligne 31
    sql = sql & " [Family Newsletter]='Sensors for Railway Market','ANS',"
    sql = sql & " [Designation]='BAM 2' AND 'BAM 2 GRIS VO' AND 'BAM 2 IVOIRE V0' AND 'BAM2' AND 'BAM3',"
    sql = sql & " AND 'D2.5/5.2L' AND 'D2.5/5.3L' AND 'D2.5/5.4L' AND 'D2.5/5.N.2L' AND 'D2.5/5.N.3L' AND 'D2.5/5.N.4L',"
    sql = sql & " AND 'D4/6' AND 'DA2.5/5' AND 'M4 6 N' AND 'M4/6' AND 'M4/6 TERMINAL GREY' AND 'M4/6.1' AND 'M4/6.D2.1',"
    sql = sql & " AND 'M4/6.N' AND 'M4/6.V0' AND 'M6/8' AND 'M6/8 TERMINAL BLOCK 24-8AWG' AND 'M6/8.1' AND 'M6/8.4 V0',"
    sql = sql & " AND 'M6/8.N' AND 'M6/8.V0' AND 'MA2 5 5' AND 'MA2,5/5.N BLUE TERMINAL BLOCK 22-12AWG' AND 'MA2.5/5',"
    sql = sql & " AND 'MA2.5/5.1' AND 'MA2.5/5.N' AND 'MA2.5/5.V0' AND 'TERMINAL 4mm2 32A GREY' AND 'Terminal block ZS4',"
    sql = sql & " AND 'TERMINAL ENTERLEC 4MM Type:ZS4 1SNK50501' AND 'ZS4' AND 'ZS4-BK' AND 'ZS4-BL' AND 'ZS4-PE' AND 'ZS4-PR','MAB'"
    sql = sql & " ) AS CAP,"
    En SQL, ce n'est pas possible trop de carractère...

    J'aimerai pouvoir comprendre, et y a t'il une autre solution.
    J'ai pensé de passer par une table en définissant les SWITCHs, ou par un module.....
    Mais, je ne vois pas comment faire.

    Merci d'avance de votre aide

  2. #2
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Bonjour,
    Je n'ai pas regardé la requête en détail, mais il faudrait en tout cas ajouter une virgule à la fin de la chaîne de caractères de la ligne 31 pour que ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = sql & " [Family Newsletter]='Sensors for Railway Market','ANS', "

  3. #3
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Points : 151
    Points
    151
    Par défaut
    Bonjour tedo01,

    Effectivement, si j'intègre le code qui me pose souci.
    Autrement c'est la fin du 1er switch, donc il ne faut pas de ','.
    C'est la 1er partie, et celle-ci fonctionne très bien.
    C'est quand je rajoute le code pour continuer le 1er switch que cela se plante.

    Merci

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Rch05 et Tedo01,

    Je me permets de m'immiscer...

    Quand il y "trop" de switch(), c'est qu'il faut, sans doute, attaquer le problème par un autre bout : celui de la conception.

    En fait, Rch05, tu donnes, toi-même, la solution :
    Citation Envoyé par Rch05
    J'ai pensé de passer par une table en définissant les SWITCHs .../...
    ==> Suggestion :
    Table SWICH :
    - Donnee_Source (clé primaire)
    - Donnee_Traduite

    Ensuite, une liaison habituelle fera l'affaire.

  5. #5
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Points : 151
    Points
    151
    Par défaut
    Bonjour Richard_35,

    Merci de ta réponse.

    Donc après avoir créé la table "tblSwitch", je lie les deux tables à la requête et j'effectue l'ajout à la table de destination.

    Est-ce ça?

  6. #6
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Eh bien oui : tu lies Sheet1 à tblSwitch, via Donnee_Source, et tu récupères Donnee_Traduite pour remplir le(s) champ(s) concerné(s) par le switch().

    Je te conseille de passer par l'assistant pour mettre au point tes requêtes ; ensuite, tu peux récupérer le code, si tu veux.

  7. #7
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Points : 151
    Points
    151
    Par défaut
    Ok et merci.
    J'effectue tout ça et je te tiens au courant demain matin.

    Encore merci et bonne soirée

  8. #8
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Points : 151
    Points
    151
    Par défaut
    Bonjour Richard_35,

    J’ai trouvé une solution intermédiaire.
    1) J’ai crée une table SWITCH
    2) J’exécute la 1ère requête d’insertion qui fonctionne, dans la table de destination
    3) Puis j’exécute une mise à jour de cette table avec le critère qui ne fonctionné pas, en liant la table de destination et la table SWITCH.
    De cette manière, je retrouve tous mes enregistrements avec leur modification.
    Merci de ton aide

    Bonne journée

  9. #9
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Rch05,

    Bravo!
    Effectivement, il est souvent efficace de segmenter les tâches.

  10. #10
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Points : 151
    Points
    151
    Par défaut
    Merci Richard

    A bientôt sur ce site qui m'a beaucoup aidé à réaliser divers tâches sous Access.
    Vous êtes d'un grand secour pour des néophytes comme moi.

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

Discussions similaires

  1. Switch fonction trop complexe
    Par Jarod51 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 29/03/2011, 09h47
  2. Simplication d'une requête "trop complexe"
    Par Manopower dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 27/06/2006, 15h22
  3. Erreur sur OpenReport : Expression trop complexe
    Par Mariboo dans le forum Access
    Réponses: 6
    Dernier message: 22/06/2006, 12h52
  4. [VBA-E] Erreur 16 expression trop complexe
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/04/2006, 12h44
  5. Err. 3360 , 'Requete trop complexe'
    Par fabrice518 dans le forum Access
    Réponses: 4
    Dernier message: 18/11/2005, 15h43

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