Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/12/2010, 13h54   #1
Membre régulier
 
Inscription : octobre 2008
Messages : 224
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 224
Points : 76
Points : 76
Par défaut Eviter de répeter des bouts de requête

Bonjour le forum,

J'ai un formulaire avec un bon nombre de contrôles. Ces contrôles me donnent de variables que j'utilise à la fin dans une requête.

Pour éviter d'avoir à réécrire entièrement la requête à chaque fois que j'en ai besoin, j'ai pensé fractionner le code de la requête sur le modèle suivant:

Code sql :
1
2
strSQL1 = "SELECT DISTINCT Blablabla FROM qry_1 "
strSQL2 = "WHERE Champ1= '" & str1 & "'"

Ma question est: sachant que str1 de ma chaîne strSQL2 est donnée par la valeur d'une combobox, est-ce qu'il existe un moyen de déclarer tous ces bouts de code en tête de module?

J'ai essayé un bête:
Code sql :
Const strSQL2 AS String = "WHERE Champ1= '" & str1 & "'"

Mais évidemment, ça ne peut pas fonctionner.
neiluj26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 14h10   #2
Membre éprouvé
 
Avatar de Tonioyo
 
Anthony Schricke
Développeur informatique
Inscription : juin 2008
Messages : 342
Détails du profil
Informations personnelles :
Nom : Anthony Schricke
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2008
Messages : 342
Points : 455
Points : 455
Bonjour,

Ceci ne peut pas fonctionner car une constante est par définition non modifiable. Elle ne doit donc pas comporter de variable. Ici sémantiquement str1 est une variable.

Citation:
Code :
Const strSQL2 AS String = "WHERE Champ1= '" & str1 & "'"
Une solution serrait d'utiliser des méthodes qui renvoient le morceau de requête SQL.

par exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
Public Function debutDeRequete() As String
    debutDeRequete = "SELECT DISTINCT Blablabla FROM qry_1 "
End Function
 
Public sub constructionDeLaRequete()
   Dim strSql As string
 
   strSql = debutDeRequete() & "WHERE XXX = YYY;"
   doCmd.RunSql strSql
End Sub
il est possible ensuite de jouer sur la visibilité de ces méthodes (Public, Private, etc ...) pour qu'elle puisse s'exécuter que dans un module en particulier par exemple.

Cordialement,
__________________
loi de LeBlanc : Plus tard signifie jamais. extrait de Coder proprement Auteur:Robert C. Martin
Tonioyo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 14h25   #3
Membre régulier
 
Inscription : octobre 2008
Messages : 224
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 224
Points : 76
Points : 76
Bonjour,

Ah oui, effectivement, cette méthode fonctionne et est plutôt simple. Merci.

Est-ce qu'il y a d'autres façons de faire (simplement par curiosité)?
neiluj26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h46.


 
 
 
 
Partenaires

Hébergement Web