Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/07/2011, 23h27   #1
Invité de passage
 
Inscription : avril 2008
Messages : 11
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 11
Points : 3
Points : 3
Par défaut subform avec control unbound

Bonsoir,
Ok le titre est un peu étrange mais voici mon probleme.
J'extrais un recordset de données via un SQL un peu complexe (incluant un UNION de 2 SELECT sur 2 tables différentes et du coup si je l'utilise directement ce recordset comme datasource pour mon subform et les controles de ce subform ensuite je ne peux rien updater car message d'erreur "this recordset is not updatable".
Mon idée est dont d'essayer de tout gérer en code et donc d'utiliser des controles unbound + un bouton save.
J'espère que mes controles unbound pourront etre updatés par l'utilisateur et derrière je gererai les fonctionnalités d'update dans la base.
Probleme c'est que je ne sais pas comment passer les valeurs de mes champs de mon rowset aux differents control de mon subform.

en gros if faudrait que tant que mon recordset n'est pas processé je fasse un truc du genre
Code :
1
2
3
4
5
while NOT rs.EOF  
    ctl0.Value = rs(0)
    ctl1.Value = rs(1)
    etc
wend
Plein de probleme:
1) où est ce que je dois mettre ce code (quel évènement afin que quand ma form principale soit ouverte mon subform soit rempli exactement de la même façon que si j'avait utilisé des control avec datasource au lieu de control unbound)
2) j'ai vu du code faisant un For ctl In myForm et accede ainsi aux controles mais ça ne semble pas faire exactement ce que je veux.

J'ai tenté ça

dans le form_load de mon subform
...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 Set db = CurrentDb
 
        Dim myForm As Form
 
        Set myForm = Forms![myMainForm]![mySubForm].Form
        Set rs = myForm.RecordsetClone
' il y a surement au moins une ligne dans mon rs
        rs.MoveFirst
 
        While Not rs.EOF
            Set ctl = myForm.Controls(0)
            ctl.Value = rs![Flag]
            rs.MoveNext
        Wend
sauf qu'à la fin mon controle de nom "Flag" affiche tjrs la même valeur.
Je veux dire si la dernière ligne de mon rs a comme valeur rs![Flag] = true alors la case à cocher de chacune de mes lignes de mon subform est cochée et inversement si elle vaut false alors les cases sont décochées.
Si je clique sur la box maintenant je n'ai plus ce probleme d'erreur "this recordset is not updatable" mais toutes mes lignes sont changé en même temps je veux dire si j'ai cliqué sur la case à cocher de la ligne 4 alors toutes les cases deviennent automatiquement cochée (idem si je décoche ligne 5, etc etc....

Bref il me manque une info là.
Le probleme provient sans doute du fait que mon subform est en mode continuous mais je ne veux/peux pas le changer (ca serait trop simple ^^).

J'ai aussi tenté de contourner le probleme en essayant d'afficher une ligne de couleur differente au lieu d'utiliser une checkbox unbound mais sans success, soit je colorie toute les lignes soit rien (suivant qu'une ligne au moins match mon critere ou pas)
Mon controle myColor n'est pas unbound

Code :
1
2
3
4
5
6
7
8
9
10
11
        While Not rs.EOF
            For Each ctl In myForm.Controls
            If rs![myColor] = "#F0F0F0" Then
                If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acListBox Then
                    ctl.BackColor = RGB(55, 244, 164)
                End If
            End If
            Next ctl
 
            rs.MoveNext
        Wend
et bien ça me colorie tout ou rien.
Bref comment etre en subform continuous mais pouvoir atteindre les controles d'une ligne specifique pour en changer la couleur, la visibilité, etc ?

Help ;-)
thrakkazz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 17h25   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 085
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 085
Points : 11 622
Points : 11 622
Bonjour,

Une requete Union n'est pas updatable. Tu pourras monter toutes les usines à gaz de la terre que ça ne marchera pas.

La solution est d'embarquer dans tes Select le numero unique de l'enregistrement et le nom de la table pour l'identifier. Ensuite tu pourras créer une requete d'insert ou Update pour le mettre à jour ou encore utiliser un recordset DAO ou ADO en ouvrant la dite table sur le dénommé enregistrement.

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h32.


 
 
 
 
Partenaires

Hébergement Web