[VBA]Requete & fonction

Résolu/Fermé
nicolas - 22 févr. 2006 à 13:24
 Utilisateur anonyme - 9 juin 2009 à 16:04
Bonjour,
Je réalise un petit projet vba dans lequel j'ai une page contenant une dizaine de combox dont les valeurs de chaque combo proviennent d'une requete: En voici un exemple:

'// Initialisation de la liste des pests ///////////////

req = "select Pests from VisitDetail group by Pests"
exec_req (req)
For i = 0 To max
If rst!Pests <> " " Then
ls_pests.AddItem (rst!Pests)
End If
rst.MoveNext
Next i

'// Procedure permettant d'executer les différentes requetes de chargement des listes ///////

Sub exec_req(req)
Set rst = dbLocal.OpenRecordset(req) ', dbOpenForwardOnly, dbReadOnly)
rst.MoveLast
max = rst.RecordCount - 1
rst.MoveFirst
End Sub


Je souhaiterais pouvoir créer une fonction me permettant (ameliorant cette derniere) de pouvoir chargé les listes en passant comme parametre (si cela est possible):
- le nom de la colonne dans la requete
-ainsi que le nom du controle
Les problemes que je rencontre actuellement sont liés aux types de données a passer en parametre.
En effet je ne c est pas sous qu'elle type de donnée récupérer le nom de la colonne.
Merci d'avance

5 réponses

Bonjour,

J'ai trouvé dans un bouquin pour acces 97 une procédure
qui fait le travail à merveille pour modifier des requètes
par programmation.

Je l'ai suggérré plus d'une fois mais a prime abord elle peut
paraitre compliqué. En voici un apercu.

La fonction qui sert à modifier la requête :

Public Function ChangeRequeteDef(ChaineRequete As String, _
                           ChaineSQL As String) As Boolean
    
    Dim Definition As QueryDef
    
    If ((ChaineRequete = "") Or (ChaineSQL = "")) Then
        ChangeRequeteDef = False
    Else
        Set Definition = CurrentDb.QueryDefs(ChaineRequete)
        Definition.SQL = ChaineSQL
        Definition.Close
        RefreshDatabaseWindow
        ChangeRequeteDef = True
    End If
    
End Function


Cette requete dans être placé dans la section Module de Access.
Au préalable, il te faut créer une requete standard.

Deux parametres sont passer à la fonction, soit le nom de la
requete et la requête elle même.

Pour faire appel a cette requete, voici comment proceder :

Private Sub Liste_Cassette_AfterUpdate()
    
    ' Ici l'exemple porte sur ma BD de ma vidéothèque.
    ' Une liste déroulante me permet de sélectionner
    ' un paramètres quelconque de ma requete, ici
    ' c'est le numéro de cassette

    Dim Chaine As String
    Dim Critere As String
    Dim CassetteVidéo As String
    Dim Ensemble As Recordset
    
On Error GoTo Liste_Cassette_Err

    ' Capture du paramètre
    CassetteVidéo = Forms![Formulaire Table Vidéo].[Liste Cassette]

    ' Création de la chaine SQL, ici la création se fait en 2 lignes
    ' par concaténation dans le but de simplifié la compréhension
    Chaine = "Select * from [Table Vidéo] where [Cassette] = "
    Critere = Chaine & """" & CassetteVidéo & """"
    
    ' La variable critere contient ici la chaine SQL
    If (ChangeRequeteDef("Requête Liste Spécifique Cassette", Critere)) Then
        
        ' Ouverture de la requete modifié
        Set Ensemble = CurrentDb.OpenRecordset("Requête Liste Spécifique Cassette")
        Ensemble.MoveLast
        Ensemble.MoveFirst

        ' Le but ici étant de déterminer le nombre d'enregistrement
        'de la requete.
        NbrRecherche.Value = Ensemble.RecordCount
        Ensemble.Close
        ' Ouverture du formulaire accroché sur cette requete.
        DoCmd.OpenForm "Formulaire Liste Spécifique Cassette", acNormal, "", "[Cassette]", , acNormal
    End If

Liste_Cassette_Exit:
    Exit Sub

Liste_Cassette_Err:
    MsgBox Error$
    Resume Liste_Cassette_Exit

End Sub


Lupin
1
elle te sert a quoi cette requete precisement g pas compris
0
une autre façon,

problème posé :

je cite :

Je souhaiterais pouvoir créer une fonction me permettant (ameliorant cette derniere) de pouvoir chargé les listes en passant comme parametre (si cela est possible):
- le nom de la colonne dans la requete
-ainsi que le nom du controle

Fin citation


la requete ici dans mon exemple est :

Chaine = "Select * from [Table Vidéo] where [Cassette] = "
Critere = Chaine & """" & CassetteVidéo & """"

qui se traduit aussi par :

Critere = "Select * from [Table Vidéo] where [Cassette] = " & """" & CassetteVidéo & """"

en fait j'ai commencé par créer une simple requête global
de ma table, je n'accède que très rarement à une table
directement.

la variable "Critère" est la syntaxe de la requête de Type "String"

cette variable est modifiable facilement comme ceci :

Critere = "Sel" & "ect" & " " & "*" & " from " & monNomdeTable.macolonne & " ..."

si j'ai compris l'exercice soumis, il est plus efficace de modifier
la requete elle-même que de passer ces paramêtres à la requête.

la modification de la requete se fait à l'appel de :

If (ChangeRequeteDef("Requête Liste Spécifique Cassette", Critere)) Then

Le nom de la requête à modifier et la "syntaxe" de la requête.

de plus en procédant ainsi, si chaque liste est basé sur une requête, cela multiplit les possibilités de combiné des requëtes
sur les objets d'un formulaire.

c'est très efficace et ça me vient du boucquin sur VBA Access,
si je mets la main dessus je pourrai te fournir la référence
exact mais pour le moment il brille de son abscence :-(

la fonction ChangeRequeteDef est simple !

Public Function ChangeRequeteDef(ChaineRequete As String, ChaineSQL As String) As Boolean
    
    Dim Definition As QueryDef
    
    If ((ChaineRequete = "") Or (ChaineSQL = "")) Then
        ChangeRequeteDef = False
    Else
        Set Definition = CurrentDb.QueryDefs(ChaineRequete)
        Definition.SQL = ChaineSQL
        Definition.Close
        RefreshDatabaseWindow
        ChangeRequeteDef = True
    End If
    
End Function



Lupin
0
Lupin > Lupin
23 févr. 2006 à 03:44
        ...
        RefreshDatabaseWindow
        ChangeRequeteDef = True
        Set Definition = Nothing
    End If
...
0
Merci de vos réponses,
Apres quelque heures de recherche j'ai finit par trouver ma reponse la ou je ne l'attendait pas :)
Encore un grand merci pour l'attention que vous m'avez accordé e;)
0
bjr,
je voudrais savoir a quoi sert le public function!
je viens de commencer!
la reponse fonction publique ne m'interesse pas bien sur lol!
une explication serait mieux!
merci d'avance


alex
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
9 juin 2009 à 16:04
à quoi sert une requet dans l'access
à quoi sert formulaire dans l'access
à quoi sert les etats dans l'access
0