Recordset et creation formulaire dynamique sous access
fredieuric
Messages postés24Date d'inscriptionmercredi 10 juillet 2002StatutMembreDernière intervention 2 octobre 2008
-
14 mai 2007 à 14:53
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 2018
-
14 mai 2007 à 23:03
Bonjour à tous,
Sous Access 2003 SP2,
J'ai récupéré un code source que j'essaye d'adapter à mes besoins (à savoir créer dynamiquement un formulaire en fonction du résultat d'une requête):
Pour être clair:
en bleu le code de la fionction "create_form" définie dans un module
en rose les problèmes que je rencontre
en vert les commentaires
en gris l'évènement faisant appel à la fonction create_form
Je sais, c'est un peu long, mais j'esaie d'être clair.
Public Function create_form(sql As String) As Boolean
Dim frm As Form
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim ctl As Control
Dim i, j As Integer
Set db = CurrentDb
' --Ouvrir le formulaire en mode modification et caché
Premier problème, le rst semble ne pas contenir d'éléments : MsgBox (rst.RecordCount) me renvoie "1"
'--Création des contrôles
Dim controle(1 To 100) As Control
If rst.RecordCount <> 0 Then
i = 1
j = 1000
While i < rst.RecordCount
' -- Créer le contrôle i
Set controle(i) = CreateControl("F_AFFICHAGE", acTextBox)
' --lui affecter un nom
controle(i).Name = "TXT_" & rst(i)
Deuxième problème: rst(i): item not found in this collection
' --le positionner sur le formulaire
controle(i).Left = 100 + j
' --Définir sa largeur
controle(i).Width = 1150
' --source de données de ce contrôle
controle(i).ControlSource = rst.Fields(i).Name
i = i + 1
j = j + 1150
Wend
End If
Voila pour la fonction... Maintenant pour le code appelant cette fonction:
Private Sub Product_variant_name_AfterUpdate()
Dim MySql As String
MySql = "SELECT [Component type].[Component type name]"
MySql = MySql & " FROM [Component type];"
create_form (MySql)
DoCmd.OpenForm "F_AFFICHAGE", acNormal
End sub
Quelqu'un peut-il m'expliquer ce qui ne va pas (si possible avant que je ne pète un cable!)???
fredieuric
Messages postés24Date d'inscriptionmercredi 10 juillet 2002StatutMembreDernière intervention 2 octobre 20081 14 mai 2007 à 16:18
Tout d'abord, merci pour ta réponse!
J'ai résolu une partie de mon pb en créant une requète en dehors du code:
Public Function create_form(arg As String) As Boolean
Dim frm As Form
Dim rst As DAO.Recordset
Dim ctl As Control
Dim i, j As Integer
Dim rqMaQuery As QueryDef
' --Ouvrir le formulaire en mode modification et caché
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 14 mai 2007 à 23:03
Combien penses-tu créer de contrôles à partir de cette boucle ?
While i < rst.RecordCount
Set controle(i) = CreateControl("F_AFFICHAGE", acComboBox)
Si ta table contient 10 colonnes, disons
ton recordset devrait contenir 10 valeurs
S'il n'y a qu'un enregistrement trouvé, ta boucle ne pourra te créer aucun contrôlei 1> While i < rst.RecordCount (recordcount = 1)
Il faudrait que tu boucles sur les champs du Recordset
For i = 0 to rst.Fields.Count - 1
Set Controle(I) = ???
là je ne sais pas comment tu vas définir le genre de contrôle par rapport au champ visé...
Pour ce qui est de l'erreur, je ne sais pas trop...(?)