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

VBA Access Discussion :

SQL dans une procédure évènementielle en VBA [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Kaera
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 185
    Par défaut SQL dans une procédure évènementielle en VBA
    Bonjour à tous !

    Dans le sous-formulaire d'un formulaire, j'ai un champ1 sous forme de liste déroulante qui "pointe" vers le champ d'une table, j'ai ensuite un champ2 qui est saisi par l'utilisateur et le champ3 est rempli automatiquement en fonction de la valeur saisie précédemment en champ2 et de la valeur du champ1, il (champ3) récupère sa valeur dans un autre champ de la table.
    J'ai donc créé une Procédure évènementielle sur sortie du champ1.
    Pour plus de flexibilité, je souhaite récupérer une information dans une table, toujours en fonction de ce qui est saisi dans le champ1.

    En sachant que :
    - Fleurs est le nom de ma table sur laquelle "pointe" le champ1
    - Type est le nom du champ contenu dans Fleurs et sur lequel pointe le champ1
    - Taille est le nom du champ contenu dans Fleurs dans lequel champ3 récupère les données
    - saisieFleurs est le nom du formulaire
    - Fleurs_SF est le nom du sous-formulaire,
    quelle est la syntaxe à adopter ?

    Pour l'instant, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    sql= "SELECT [Fleurs].[Taille] FROM [Fleurs]
    WHERE ((Forms![saisieFleurs]![Fleurs_SF].Form!champ1 = [Fleurs].[Type]) AND ([Fleurs].[Taille] BETWEEN 100 AND 200));"
     
    If (Forms("saisieFleurs")("Fleurs_SF")("champ2").value >=150) Then  'donc le champ du sous-formulaire saisi par l'utilisateur
        Forms("saisieFleurs")("Fleurs_SF")("champ3").value = sql
    End if
    Mais j'ai une erreur de syntaxe sur le WHERE.

    Quelqu'un saurait-il me dire d'où vient l'erreur ?

    Merci beaucoup, d'avance.

    Kaera*

  2. #2
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    Jettes un coup d’œil ici.

    PS : dev.com te dit "Étudiant[?]" Là il faut te plaindre! Mais, comme le 8 mars est passé il faut attendre l'année prochaine

  3. #3
    Membre éclairé
    Avatar de Kaera
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 185
    Par défaut
    Salut alassane,

    Merci pour ta réponse.
    J'ai lu le tutoriel et je n'ai pas tout compris...

    Ici :
    DLookup("dteNote", "qry_TriDate", "strNom='Dupond' and strPrenom='Marc' and bytNote between 1 and 9")

    Où sont définis "dteNote", "qry_TriDate", etc. ?

    Comment et où dois-je intégrer cette expression ?

    Merci d'avance.

  4. #4
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    Dans ton évènement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     'on remplace Forms("saisieFleurs")("Fleurs_SF")("champ2") par Me si tous les champs sont dans le sous-formulaire!!!
    If (Me.champ2.value >=150) Then  'donc le champ du sous-formulaire saisi par l'utilisateur
        Me.champ3.value = DLookup("Taille", "Fleurs", "(Taille BETWEEN 100 AND 200) AND Type='" & Me.champ1)
    End if
    @+

  5. #5
    Membre éclairé
    Avatar de Kaera
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 185
    Par défaut
    Salut alassane,

    merci pour ce bout de code, je comprends mieux la syntaxe de DLookup.
    Très efficace et pratique comme fonction donc je te remercie du tuyau !

    Cependant, c'est en l'appliquant à mon cas que je me suis rendue compte qu'il me faut l'intégrer différemment à mon code.

    Ce que je cherche à faire peut être traduit comme suit :
    << Si le champ2 du sous-formulaire est compris entre 100 et 200 alors
    si, pour le champ Type(table Fleurs) égal à la valeur du champ1, la valeur 150 dans le champ Taille(table Fleurs) existe alors
    le champ3 prend la valeur "150"
    sinon le champ3 prend la valeur "100".>>

    En reprenant tes conseils, j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    test = DLookup("Taille", "Fleurs", "Taille='150' AND Type='" & Me.champ1 & "' ")
     
    If (Me.champ2.Value >= 250) And (Me.champ2.Value < 290) Then
                If IsNull(test) Then
                    Me.champ3.Value = "100"
                Else: Me.champ3 = "150"
                End If
            End If
    Mais j'obtiens une erreur sur ma ligne "test=...." : Type de données incompatible dans l'expression du critère.
    Ne sachant pas comment déclarer ma variable "test", je l'ai mise en integer parce que le résultat du DLookup est un nombre, mais c'est probablement incorrect et ça génère l'erreur.
    Qu'en penses-tu ? Comment dois-je déclarer ma variable "test" ?
    Merci d'avance alassane.


    PS: En effet, y a un chouïa de discrimination de la part de dev.com !
    J'essaierai le 8 mars prochain de réclamer le "e" manquant !

  6. #6
    Membre éclairé
    Avatar de Kaera
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 185
    Par défaut
    Je suis parvenue à m'auto-corriger !

    Et ceci fonctionne à merveille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    test = Nz(DLookup("Taille", "Fleurs", "Taille=150 AND Type='" & Me.champ1 & "' "), 0)
     
            If (Me.champ2.Value >= 100) And (Me.champ2.Value < 200) Then
                If test = "0" Then
                    Me.champ3.Value = "100"
                Else: Me.champ3.Value = "150"
                End If
            End If
    C'est grâce à toi alassane, merci encore !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/11/2014, 10h47
  2. [AC-2007] Affecter une procédure événementielle en vba
    Par morinxav dans le forum VBA Access
    Réponses: 1
    Dernier message: 27/04/2012, 10h20
  3. [XL-2003] Problème de format de cellules imposés dans une procédure évènementielle
    Par Joloma dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/02/2011, 18h41
  4. [SQL Server] Passage d'un paramètre dans une procédure
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 14/01/2005, 13h19
  5. Appel d'un script SQL dans une procdure stockée
    Par doudou10000 dans le forum Oracle
    Réponses: 10
    Dernier message: 01/12/2004, 10h01

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