|
|
|
|
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
Bonjour,
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 à mali
|