Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Recordset et creation formulaire dynamique sous access [ Langages dérivés / VBA ] (fredieuric)

lundi 14 mai 2007 à 14:53:17 | Recordset et creation formulaire dynamique sous access

fredieuric

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é

DoCmd.OpenForm "F_AFFICHAGE", acDesign, , , , acHidden

Set rst = db.OpenRecordset(sql)

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!)???

Merci d'avance et bonne programmation.


lundi 14 mai 2007 à 15:47:02 | Re : Recordset et creation formulaire dynamique sous access

Nicko11

Salut, quelques petites remarques

Premier problème, le rst semble ne pas contenir d'éléments : MsgBox (rst.RecordCount) me renvoie "1"

Bah, la preuve que si puisqu'il te renvoie 1

Deuxième problème: rst(i): item not found in this collection

Je pense que c'est du au fait que i doit etre de type string il me semble (pas sur mais pour un champ c'est sur par contre
 rst.fields("Nom_du_champ")

Ca donnerait donc    rst(format(i,"0")) a la place de rst(i)

J'espere que ca te conviendra


lundi 14 mai 2007 à 16:18:01 | Re : Recordset et creation formulaire dynamique sous access

fredieuric

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é
DoCmd.OpenForm "F_AFFICHAGE", acDesign, , , , acHidden

'--Exécuter requête pour definir component type associés
Set rqMaQuery = CurrentDb.QueryDefs("Rq_Component_Type")
rqMaQuery.Parameters(0) = arg
Set rst = rqMaQuery.OpenRecordset

'Maintenant, en rajoutant le petit bout de code suivant, je fais défiler les résultats de ma requete...
While Not rst.EOF
    MsgBox rst(0)
    rst.MoveNext
Wend

Mais là où je reste bloqué, c'est après, lorsque j'essaie de créér les contrôles:

Dim controle(1 To 100) As Control
If rst.RecordCount <> 0 Then

    i = 1
    j = 1000
    While i < rst.RecordCount
  
    
    Set controle(i) = CreateControl("F_AFFICHAGE", acComboBox)
    ' --lui affecter un nom
    controle(i).Name = "TXT_" & rst(i)

PB: Erreur d'execution 3021: No current record????

Please help!


lundi 14 mai 2007 à 16:29:44 | Re : Recordset et creation formulaire dynamique sous access

Nicko11

Bon la je dois partir mais si tu veux savoir la position de ton recordset,

msgbox rst.AbsolutePosition

 et aussi, tu n'as pas oublié le i = i + 1.

essaies aussi rst(i).name.

Désolé si ca correspond pas mais comme le dis FAF, j'ai pas le temps car mon esprit glisse ailleurs.

A demain.


lundi 14 mai 2007 à 23:03:20 | Re : Recordset et creation formulaire dynamique sous access

MPi

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ôle
i = 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...(?)

MPi



Cette discussion est classé dans : fonction, formulaire, controle, rst, create


Répondre à ce message

Sujets en rapport avec ce message

source controle dans un formulaire continu [ par jpleboucher ] bonjour j'ai créé un formulaire continu en vue de générer un planning de gardes pour des étudiants. je souhaiterais mettre un "source controle" dans formulaire [ par impredaj ] Bonjour à tous.je veux savoir l'équivalent de la fonction "ARRONDI.INF" d'Exel, dans acces.plus exactement je veux avoir comme resultat :1204,85  =  1 Filtre de formulaire = filtre du recordset [ par tri_yann ] Bonjour, Je voudrai savoir qui saurait récupérer dans un recodset les données filtrées d'un formulaire. Je m'explique : L'utilisateur traite des don sous formulaire access et controle [ par mhiste ] MATTBonjour,J'aimerai savoir si il est possible sur un formuliare continu de changer le type de controle en fonction d'une valeur d'enregistrement.Mer Appliquer la meme procedure au clik de tout les boutons d'un form [ par Kahya ] Bonjour! Voila, je crois que mon titre est assez explicite : j'ai un formulaire avec une quarantaine de boutons, et je dois appeller la meme fonction Comment "rejoindre" deux formulaire avec une fonction [ par crazyvbCAN ] Bonjour,   J'essai de faire un programme dans lequel j'ai plusieurs formulaires. Mon formulaire d'ouverture (le principal), contient plusieurs boutons print sous VB6 [ par mamanmarsu ] Bonjour,J'utilise la fonction print pour imprimer du texte sur un formulaire. Aucun problème.Mais je souhaite aussi utiliser cette fonction pour impri access mise en formulaire analyse croisée [ par genaelle ] je debute sur une base de données gestion de planning.j'ai un formulaire tiré d'une analyse croisée qui me renvoie par mois la description des 31 jour Formulaire Excel [ par XGuarden ] Bonjour, je veut charger dans un datagrid un tableau excel.Voila les chose que j'aimerais savoir comment faire.Puis-je récupéré le résultat d'un table creer un controle calculé dans un formulaire [ par penny05 ] Bonjour a tous!J'avais une petite question sur la création de controles calculés dans un formulaire avec vba, à savoir comment faire un calcul en fonc


Nos sponsors

Sondage...

CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,203 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.