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 :

Variable SQL dans du VBA [AC-2007]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Stagiaire en Développement Economique
    Inscrit en
    Juin 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Stagiaire en Développement Economique

    Informations forums :
    Inscription : Juin 2012
    Messages : 52
    Par défaut Variable SQL dans du VBA
    Bonjour,

    Loin d'être un expert en VBA et SQL, je viens chercher de l'aide pour simplifier mon code au sein d'un formulaire de traitement statistique. L'objectif de celui-ci est de fournir des agrégats en fonction de certains critères. Mon problème est qu'il y a environ 50 agrégats dans mon formulaire.

    Pour l'instant, chacun est calculé de façon indépendante (une fonction par agrégat). La fonction en question ressemble à ça :

    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
    Public Function CompteSA() As Long
        Dim R_Cpt As String
        R_Cpt = "SELECT COUNT (T_IdentiteStructure.IDS) as Result "
        R_Cpt = R_Cpt & " FROM T_IdentiteStructure,T_CategorieJuridique,T_GrpCJ,T_LienCJ,T_Membre"
        R_Cpt = R_Cpt & " WHERE T_IdentiteStructure.CodeCJ = T_CategorieJuridique.CodeCJ"
        R_Cpt = R_Cpt & " AND T_CategorieJuridique.CodeCJ = T_LienCJ.CodeCJ"
        R_Cpt = R_Cpt & " AND T_LienCJ.CodeGrpCJ = T_GrpCJ.CodeGrpCJ"
        R_Cpt = R_Cpt & " AND T_GrpCJ.LibGrpCJ =  'SA'"
        R_Cpt = R_Cpt & " AND T_IdentiteStructure.Membre = T_Membre.CodeM"
        If cboMembre.Value <> "" Then
            R_Cpt = R_Cpt & " AND T_IdentiteStructure.Membre=" & cboMembre.Value & ""
        End If
        'Lancement de la requête
        Dim db As dao.Database: Set db = CurrentDb
        Dim r As dao.Recordset: Set r = db.OpenRecordset(R_Cpt)
        If r.RecordCount <> 0 Then
            result = r![result]
          Else
            result = 0
        End If
        r.Close: Set r = Nothing
        Set db = Nothing
        'Affectation du résultat de la requête
        CompteCJ = result
    End Function

    Ma question :
    est-il possible de mettre des variables dans la partie SQL ? par exemple, dans la ligne suivante, est -il possible de changer 'SA' par une variable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    R_Cpt = R_Cpt & " AND T_GrpCJ.LibGrpCJ =  'SA'"
    Pour avoir une ligne de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    R_Cpt = R_Cpt & " AND T_GrpCJ.LibGrpCJ =  VARIABLE "
    Avec dans mon événement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public VARIABLE AS String
     
    Private Sub txtCompteSA_AfterUpdate()
    VARIABLE = 'SA'
    Call MAJ_SF
    End Sub

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Par défaut
    Bonjour,

    Ta question me semble étrange, car en effet, il me semble que tu y réponds déjà dans ton code.
    En effet, tu utilises ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    R_Cpt = R_Cpt & " AND T_IdentiteStructure.Membre=" & cboMembre.Value & ""
    où tu viens insérer avec les & un élément, une variable de ton code. Donc oui, il est possible d'insérer une variable dans un code SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim ta_commande_SQL as String
    ta_commande_SQL = "Select Count .... from .... where Bidule = " & VARIABLE & chr(34)
    Dim db As dao.Database: Set db = CurrentDb
    Dim r As dao.Recordset: Set r = db.OpenRecordset(ta_commande_SQL )
    Après il te reste plus qu'à rajouter dans l'intitulé de ton code :
    Public Function CompteSA(VARIABLE as String) As Long

    et que dans ton événement tu appel ton code avec :
    Call CompteSA(Variable)
    (en ayant définit ta variable dans ton événément)

    J'espère avoir bien compris le sens de ta question et avoir pu t'aider

    Tyrael

  3. #3
    Membre averti
    Homme Profil pro
    Stagiaire en Développement Economique
    Inscrit en
    Juin 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Stagiaire en Développement Economique

    Informations forums :
    Inscription : Juin 2012
    Messages : 52
    Par défaut
    Salut tyrael5,

    merci pour cette réponse (oui tu as bien compris le sens de ma question).
    N'étant pas un expert, j'aurais oublié quelques petits détails, comme la déclaration de la variable dans la ligne d'appel.

    Il reste cependant une petite erreur de compilation. Mon nouveau code ressemble donc à :

    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
    Public Function CompteSA() As Long
        Dim VARCJ As String
        VARCJ = "SA"
        CompteSA = CompteCJ(VARCJ)
    End Function
     
    Public Function CompteCJ(Variable As String) As Long
        Dim R_Cpt As String
        MsgBox (Variable)
        R_Cpt = "SELECT COUNT (T_IdentiteStructure.IDS) as Result "
        R_Cpt = R_Cpt & " FROM T_IdentiteStructure,T_CategorieJuridique,T_GrpCJ,T_LienCJ,T_Membre"
        R_Cpt = R_Cpt & " WHERE T_IdentiteStructure.CodeCJ = T_CategorieJuridique.CodeCJ"
        R_Cpt = R_Cpt & " AND T_CategorieJuridique.CodeCJ = T_LienCJ.CodeCJ"
        R_Cpt = R_Cpt & " AND T_LienCJ.CodeGrpCJ = T_GrpCJ.CodeGrpCJ"
        R_Cpt = R_Cpt & " AND T_GrpCJ.LibGrpCJ =" & Variable & Char(34) ""
        R_Cpt = R_Cpt & " AND T_IdentiteStructure.Membre = T_Membre.CodeM"
        If cboMembre.Value <> "" Then
            R_Cpt = R_Cpt & " AND T_IdentiteStructure.Membre=" & cboMembre.Value & ""
        End If
        'Lancement de la requête
        Dim db As dao.Database: Set db = CurrentDb
        Dim r As dao.Recordset: Set r = db.OpenRecordset(R_Cpt)
        If r.RecordCount <> 0 Then
            result = r![result]
          Else
            result = 0
        End If
        r.Close: Set r = Nothing
        Set db = Nothing
        'Affectation du résultat de la requête
        CompteCJ = result
    End Function
    Grace à ligne 9, j'ai put vérifier que je récupère bien ma variable déclaré avant:

    L'erreur de compilation apparait pour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        R_Cpt = R_Cpt & " AND T_GrpCJ.LibGrpCJ =" & Variable & Char(34) ""
    aurais tu une idée d'où se trouve l'erreur ?

    petitpom

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Par défaut
    Le problème vient du Char(34), il y a un 'a' en trop, il s'agit de Chr(34)

    Ensuite :
    Ton champ T_GrpCJ.LibGrpCJ est-il au format Texte/String dans ta table ?

    Si c'est le cas, il faut rajouter des guillemets autour de ta variable qu'il puisse l'interpréter comme un format texte.

    La ligne de code devient donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    R_Cpt = R_Cpt & " AND T_GrpCJ.LibGrpCJ =" & Chr(34) & Variable & Chr(34)
    le terme Chr(34) correspond au code Ascii des guillemets, tu n'as donc pas besoin de faire "" et ne te trompe pas en utilisant Chr(34) et non Char(34).
    Sinon, tu peux utiliser les ' (apostrophe) pour ne pas avoir de problème de syntaxe avec les guillemets.

    Tyrael

  5. #5
    Membre averti
    Homme Profil pro
    Stagiaire en Développement Economique
    Inscrit en
    Juin 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Stagiaire en Développement Economique

    Informations forums :
    Inscription : Juin 2012
    Messages : 52
    Par défaut
    Oui, mon champs T_GrpCJ.LibGrpCJ est de format String/Texte.
    J'ai donc fait la modif. Plus de souci avec le code, par contre je n'ai pas de retour dans ma txtbox.
    A la place j'ai un ####Erreur ?

    je suppose donc que ma variable n'est pas prise ne compte en tant que tel. Une autre idée pour régler ce problème ?

  6. #6
    Membre averti
    Homme Profil pro
    Stagiaire en Développement Economique
    Inscrit en
    Juin 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Stagiaire en Développement Economique

    Informations forums :
    Inscription : Juin 2012
    Messages : 52
    Par défaut
    C'est excuse moi, le problème est résolu. Je n'avais pas fait attention mais j'avais un & chr(34) en trop.

    Merci pour ce coup de main, ça va drolement simplifier mon code et le rendre du coup bien plus maniable pour le prochain utilisateur.
    Bonne fin de semaine

    petitpom

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Par défaut
    Tant mieux alors.

    Bonne continuation

    Tyrael

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

Discussions similaires

  1. Syntaxe SQL dans le VBA
    Par Pithonnette dans le forum VBA Access
    Réponses: 1
    Dernier message: 27/06/2008, 12h00
  2. requete sql dans code vba
    Par kernel57 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/01/2008, 15h30
  3. Mettre des guillemets dans une chaine SQL dans du VBA ?
    Par Marie_2116 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/07/2007, 10h43
  4. Problème SQL dans code VBA
    Par benjisan dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 15/05/2007, 13h22
  5. interprétation de sql dans le vba
    Par en_gel_ho dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 07/07/2006, 10h18

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