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

Access Discussion :

tuto recherche multi-criteres applique à plusieurs tables


Sujet :

Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut tuto recherche multi-criteres applique à plusieurs tables
    Bonjour,

    j'ai appliqué le tuto pour une recherche sur une table, cela fonctionne. Maintenant j'ai essaié de "transformer" le code pour faire une recherche multi criteres mais sur plusieurs tables. Malheureusement sans succès jusqu'ici.

    Voici le code de ma sub
    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
     
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT T_Liste_ETN_Teile.num_projekt, T_Liste_ETN_Teile.Serien_Num_Baumueller, T_Hauptantrieb.hauptantrieb_typ, T_Microguide_Steuerung.generation FROM T_Microguide_Steuerung INNER JOIN (T_Hauptantrieb INNER JOIN T_Liste_ETN_Teile ON T_Hauptantrieb.id_hauptantrieb = T_Liste_ETN_Teile.HA) ON T_Microguide_Steuerung.id_microguide = T_Liste_ETN_Teile.microguide Where T_Liste_ETN_Teile!id_projekt <>0"
     
    If Me.chkprojektnum = True Then
        SQL = SQL & "And T_Liste_ETN_Teile!num_projekt = '" & Me.cmbprojektnum & "'"
    End If
     
    If Me.chksteuerung = True Then
        SQL = SQL & "And T_Liste_ETN_Teile!microguide = '" & Me.cmbsteuerung & "'"
    End If
     
    If Me.chkseriennum = True Then
        SQL = SQL & "And T_Liste_ETN_Teile!Serien_Num_Baumueller like '*" & Me.txtseriennum & "*'"
    End If
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.lblstats.Caption = DCount("*", "T_Liste_ETN_Teile", SQLWhere) & " / " & DCount("*", "T_Liste_ETN_Teile")
    Me.lstresults.RowSource = SQL
    Me.lstresults.Requery
     
    End Sub
    Access me retourne l'erreur : "type de donnée incompatible dans l’expression du critère"

    pour la ligne de code suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.lblstats.Caption = DCount("*", "T_Liste_ETN_Teile", SQLWhere) & " / " & DCount("*", "T_Liste_ETN_Teile")
    J'ai donc modifié la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        SQL = SQL & "And T_Liste_ETN_Teile!microguide = '" & Me.cmbsteuerung & "'"
    Et j'ai mis comme code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        SQL = SQL & "And T_Microguide_Steuerung!generation = '" & Me.cmbsteuerung & "'"
    et là j'obtiens le message : " opération annulé"

    Donc est il possible d'appliquer le tuto pour plusieurs tables et ou dois je orienter ma recherche?

    (Il me semble avoir vu un sujet similaire il y a quelques semaines, mais je ne le retrouve plus.)

    Merci d'avance pour vos lumières.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 72
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    Je ne peux pas t'aider car j'ai le même problème ^^, avec les même messages d'erreurs aux même endroits

    j'ai cherché aussi mais je vois pas ce que ça peut être, donc si qqn connaît une solution svp ...

  3. #3
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 548
    Points
    24 548
    Par défaut
    Bonjour,

    Les espaces avant les AND.


    Conseil : lorsque vous composer des chaines SQL faites une petite visu via le debuggeur, cela ne coute rien est fait souvent apparaitre les problèmes.

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    merci pour ta piste Loufab.

    Mais avec ou sans espace cela ne change rien. De plus, cela fonctionne pour les deux autres critères (qui sont sur la table "T_Liste_ETN_Teile"). Donc je suis toujours au même point.
    Mais maintenant je mettrais des espaces devant les and, merci.

    lorsque vous composer des chaines SQL faites une petite visu via le debuggeur
    je ne suis pas sur de bien comprendre le conseil. Pour ma part, je me sers d'access, je fais des requêtes pour avoir le code et ensuite je l'utilise dans le code. La méthode n'est pas bonne ?

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 548
    Points
    24 548
    Par défaut
    Pour le déboggeur :Dans la fenêtre CODE VBA affiche la fenêtre Exécution (Ctrl+G), met un point d'arrêt (F9) sur la ligne

    Dans la fenêtre d'éxécution tape les instructions suivantes :

    ? SQLwhere

    ? SQL

    le contenu des variables SQL et SQLwhere apparaitrons (c'est de la magie ?)

    D'un simple coup d'oeil tu peux voir les problèmes d'espaces.
    Avec un copié/coller vers la fenetre SQL du QBE tu peux exécuter la requête générée (c'est toujours pas de la magie !)

    Pour ce qui est de l'erreur :
    Vérifie que tes champs sont bien du type traité. Dans ton cas tu traites des champs Texte, il se peut que le type soit numérique dans ce cas les cote n'ont pas lieu d'être.

    Conseil : N'utilise pas les simples côtes. pourquoi ?
    Dans le cas ou ta valeur (Me.xxxxx) contient une simple cote (apostrophe, symbôle minute...) ta requete renverra une erreur.

    Cordialement,

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    merci pour le deboggeur, effectivement on voit beaucoup mieux les espaces oublié.
    Je ne sais pas si c'est de la magie, en tout cas tu es un bon mage (ou sorcier)

    Pour ce qui est de l'erreur :

    mes champs sont bien en text. Cependant voici des précisions (peut être importante?)

    La table "T_Microguide_Steuerung" comporte les champs "id_microguide" (clé primaire autoincrémenté) et "generation" (de type text)

    La Table "T_Liste_ETN_Teile" comporte le champs "microguide" (clé étrangère de type numérique relié à "id_microguide")

    Par rapport à ton conseil sur les cotes:

    j'ai testé, mais lorsque le champs est de type text par quoi remplacer les cotes ? Car si je les enlève access m'indique une erreur de syntaxe.

    Amicalement

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Lorsque le champ est de type texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQL = SQL & "And T_Liste_ETN_Teile!microguide = " & chr(34) &  Me.cmbsteuerung & chr(34) &"

  8. #8
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Merci DMboup, cela complète à merveille le conseil de Loufab.
    Cependant tu excuseras ma curiosité, mais à quoi fait référence le chiffre 34 dans Aurais tu une idée, une piste pour la recherche multi critères sur plusieurs tables ?
    Le tuto est il applicable pour une telle recherche ?

  9. #9
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 548
    Points
    24 548
    Par défaut
    à la double cote.

    ce qui est équivalent à doubler le symbôle.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where champ like """ & me.toto & """"
    Cordialement.

  10. #10
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    merci Loufab pour tes explications.

    je reste ouvert à toutes idées, suggestions, intuitions de la part de tous quant à mon problème initial.

  11. #11
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 548
    Points
    24 548
    Par défaut
    un peu perdu là !!

    C'etait quoi ton problème initial ?

    Ps: je rentre at my home... donc petit standby pendant quelques minutes.

    à+

  12. #12
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Citation Envoyé par Tokay
    Aurais tu une idée, une piste pour la recherche multi critères sur plusieurs tables ?
    Le tuto est il applicable pour une telle recherche ?
    Dans ce tutoriel, le formulaire est basé sur un SQL scripté via VBA.
    Or, ce SQL peut porter soit sur une table, soit sur une requête.
    Cette dernière requête peut croiser des informations de plusieurs tables, dès lors, il est possible de rechercher sur plusieurs tables.

    Pour t'en assurer, fais donc une requête qui croise tes tables, puis écris une requête de recherche qui porte sur cette requête.

    Si ton modèle de données est correct, rien ne devrait s'y opposer.

  13. #13
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Je te prie de m'excuse pour mon abscence Loufab et merci de ta réponse Cafeine.
    J'essaie en ce moment ce que Cafeine m'a dit et vous tiens au courant de l'évolution dans la matiné. En espèrant que mon modèle de données est correct

  14. #14
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par cafeine
    Pour t'en assurer, fais donc une requête qui croise tes tables, puis écris une requête de recherche qui porte sur cette requête.
    J'ai fais cela (du moins si j'ai bien compris), mais cela ne fonctionne pas. Mais est ce que mes actions étaient les bonnes, je sais pas donc je vais vous expliquer ma démarche. Ainsi vous pourrez me dire si j'ai bien fais ce que Cafeine m'a dit.


    Avant je vous rappel la liaison de mes tables :

    La table "T_Microguide_Steuerung" comporte les champs "id_microguide" (clé primaire autoincrémenté) et "generation" (de type text)

    La Table "T_Liste_ETN_Teile" comporte les champs "microguide" (clé étrangère de type numérique relié à "id_microguide") et "id_projekt" (clé primaire de la table autoincrémenté)

    Citation Envoyé par cafeine
    Pour t'en assurer, fais donc une requête qui croise tes tables
    J'ai fais une requete basé sur les deux tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_Liste_ETN_Teile.num_projekt, T_Liste_ETN_Teile.Serien_Num_Baumueller, T_Microguide_Steuerung.generation
    FROM T_Microguide_Steuerung INNER JOIN T_Liste_ETN_Teile ON T_Microguide_Steuerung.id_microguide = T_Liste_ETN_Teile.microguide
    WHERE (((T_Liste_ETN_Teile.id_projekt) Is Not Null));
    Citation Envoyé par cafeine
    ... puis écris une requête de recherche qui porte sur cette requête.
    Puis j'ai fais une requete basé sur cette requete (qui ce nomme "A_croise_les_tables"):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [A_croise_les_tables].[num_projekt], [A_croise_les_tables].[Serien_Num_Baumueller], [A_croise_les_tables].[generation]
    FROM A_croise_les_tables
    WHERE ((([A_croise_les_tables].[num_projekt]) Is Not Null));
    [Au passage, j'ai pas compris pourquoi écrire une requete qui porte sur l'autre, le résultat de ces requetes est identique (pour moi )]

    J'ai ensuite intégré ce code dans le "Sub RefreshQuery()", mais rien n'y fait, que j'utilise le code de la première requete ("A_croise_les_tables") ou de la deuxième ou le code du début du post, je n'obtiens pas ce que je souhaite.

    A savoir :
    avoir un formulaire de recherche qui comporte les critères suivant :

    - "num_projekt" de la table "T_Liste_ETN_Teile" à choisir dans une liste déroulante (cela fonctionne)
    - "generation" de la table "T_Microguide_Steuerung" à choisir dans une liste déroulante (c'est cela que je n'arrive pas à mettre en place)
    - "Serien_Num_Baumueller" de la table "T_Liste_ETN_Teile" à écrire dans un champs text (ce sera un critère non exact pour la recherche)

    Voilà, j'espère être clair et que vous comprennez ce que je veux dire.
    En tout cas grâce à vous, l'espoir reste permis, merci. Je suis sur que l'on trouvera un solution, donc courage Le Mage Noir et merci de ton soutien car c'est toujours bon de savoir qu'on est pas tout seul à ramer

  15. #15
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    J'ai peut être compris d'ou venait mon souci .
    Je vais encore faire quelques tests pour être sûr. Dès que cela sera fait je viendrais expliquer avant de mettre le post en résolu.

    Finalement, je ne comprends plus rien.

    En effet, j'ai obtenu le resultat escompté pour ma recherche multi critères, mais en ne respectant pas le tuto de Cafeine.
    Plus précisément, j'ai attribué une source de donnée (une requete qui contenait tous les éléments voulu) à mon formulaire. Je sais que sais pas bien, mais c'était la seule solution que j'ai trouvé. Cela me permettais de choisir un critère situé dans une autre table.

    Ce matin, je me suis dit aller soyons fou et cherchons une autre solution. J'ai donc supprimé la source du formulaire, le rendant ainsi à nouveau indépendant. Et là magie... la recherche multi critères sur plusieurs tables fonctionnait.

    Je suis donc totalement dans le brouillard et ne comprends plus rien, car je n'ai pas modifié autre chose. Donc le mistère règne dans mon esprit. Je ne peux malheuresement pas donné une explication, qui aurais pu aider Le Mage Noir ou d'autre. Je suis désolé.

    Voici le code actuel qui fonctionne (si ca peut aider quelqu'un):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If Me.chkprojektnum = True Then
       SQL = SQL & " And T_Liste_ETN_Teile!num_projekt = " & Chr(34) & Me.cmbprojektnum & Chr(34) & " "
    End If
     
    If Me.chksteuerung = True Then
        SQL = SQL & " And T_Microguide_Steuerung!generation = " & Chr(34) & Me.cmbsteuerung & Chr(34) & ""
    End If
    Merci à ceux qui ont su éclairer la pénombre de mon ignorance avec leur lanterne de connaissance.

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

Discussions similaires

  1. Recherche multi-critères sur plusieurs tables
    Par destinynova dans le forum IHM
    Réponses: 33
    Dernier message: 25/09/2013, 22h42
  2. [AC-2003] Recherches multi criteres et multi tables
    Par cosmonaute666 dans le forum VBA Access
    Réponses: 3
    Dernier message: 13/05/2009, 10h36
  3. [formulaire] recherche multi critere multi table
    Par luz_negra dans le forum IHM
    Réponses: 21
    Dernier message: 28/11/2007, 00h22
  4. Réponses: 6
    Dernier message: 18/03/2007, 16h22
  5. Comment rechercher une chaine dans plusieurs tables ?
    Par tsing dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/11/2005, 18h04

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