Rechercher : dans
Par :

[VBA]Requete & fonction

Dernière réponse le 9 jun 2009 à 16:04:57 nicolas, le 22 fév 2006 à 13:24:40 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [VBA]Requete & fonction » dans :
VBScript - Les fonctions de chaînes de caractères VoirLes fonctions de chaînes de caractères Fonction Description Filter(InputStrings, Value[, Include[, Compare]]) Sélectionne des chaînes de caractères parmi un tableau de chaînes...
VBScript - Les fonctions et les procédures VoirLa notion de procédure On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel dans le corps du programme principal. Cette notion de sous-programme est généralement appelée fonction (ou procédure)...

1

Lupin, le 22 fév 2006 à 14:41:45

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

Répondre à Lupin

2

mali, le 22 fév 2006 à 15:03:26

Elle te sert a quoi cette requete precisement g pas compris

Répondre à mali

4

Lupin, le 23 fév 2006 à 03:37:51

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

Répondre à Lupin

5

Lupin, le 23 fév 2006 à 03:44:58

        ...
        RefreshDatabaseWindow
        ChangeRequeteDef = True
        Set Definition = Nothing
    End If
...

Répondre à Lupin

3

Nicolas, le 22 fév 2006 à 16:00:28

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;)

Répondre à Nicolas

6

aloux18, le 5 jun 2008 à 10:39:19
  • +1

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

Répondre à aloux18

7

 baone, le 9 jun 2009 à 16:04:57

à quoi sert une requet dans l'access
à quoi sert formulaire dans l'access
à quoi sert les etats dans l'access
ba1 salam

Répondre à baone