Un b=EAte formulaire (sans source de donn=E9es), contenant un=20
sous-formulaire bas=E9 sur une requ=EAte, laquelle requ=EAte=20
retourne les enregistrements d'une table Access.
Afin de d=E9terminer o=F9 se situe mon probl=E8me, j'ai proc=E9d=E9=20
par =E9limination en d=E9sactivant des lignes de code. Je suis=20
arriv=E9 au r=E9sultat suivant:=20
Private Sub Form_Load()
Call RafraichirListeDemande
End Sub
Private Sub BtnReafficher_Click()
Call RafraichirListeDemande
End Sub
Private Sub RafraichirListeDemande()
Dim Frd As Recordset
=20
=20
Dim WrkSpc As Workspace
Set WrkSpc =3D DBEngine.Workspaces(0)
WrkSpc.Close
Set WrkSpc =3D Nothing
=20
Me.SF_FrmDemandeTraitement_Liste.Form.Requery
=20
>>> Ligne qui plante >>> Set Frd =3D=20
Me.SF_FrmDemandeTraitement_Liste.Form.RecordsetClone
If Frd.BOF =3D True Then
Me.LstStatut.Value =3D Null
Me.LstStatut.Enabled =3D False
Else
Me.LstStatut.Enabled =3D True
End If
Set Frd =3D Nothing
End Sub
Au chargement du formulaire, tout fonctionne.
Si je clique sur mon bouton de r=E9-actualisation=20
(BtnReafficher), ca plante sur la ligne indiqu=E9e ci-
avant??!!
Si je supprime les lignes concernant la variable WrkSpc,=20
ca marche!!!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Raymond [mvp]
bonjour Xavier.
C'est ton poisson d'avril 2004 ?
Utilises plutôt Form.Recordset
je n'ai pas tout compris sur le WrkSpc -- @+ Raymond Access MVP http://access.seneque.free.fr/ http://access2003.free.fr/ http://users.skynet.be/mpfa/ pour débuter sur le forum
"Xavier HUE" a écrit dans le message de news:16fcf01c417bc$c7beb070$ Bonjour la communauté,
Win 2000 Pro, Access XP SP1.
Un bête formulaire (sans source de données), contenant un sous-formulaire basé sur une requête, laquelle requête retourne les enregistrements d'une table Access.
Afin de déterminer où se situe mon problème, j'ai procédé par élimination en désactivant des lignes de code. Je suis arrivé au résultat suivant:
Private Sub Form_Load() Call RafraichirListeDemande End Sub
Private Sub BtnReafficher_Click() Call RafraichirListeDemande End Sub
Private Sub RafraichirListeDemande() Dim Frd As Recordset
Dim WrkSpc As Workspace Set WrkSpc = DBEngine.Workspaces(0) WrkSpc.Close Set WrkSpc = Nothing
Me.SF_FrmDemandeTraitement_Liste.Form.Requery
Ligne qui plante >>> Set Frd Me.SF_FrmDemandeTraitement_Liste.Form.RecordsetClone If Frd.BOF = True Then
Me.LstStatut.Value = Null Me.LstStatut.Enabled = False Else Me.LstStatut.Enabled = True End If Set Frd = Nothing End Sub
Au chargement du formulaire, tout fonctionne.
Si je clique sur mon bouton de ré-actualisation (BtnReafficher), ca plante sur la ligne indiquée ci- avant??!!
Si je supprime les lignes concernant la variable WrkSpc, ca marche!!!
Une idée?
Je sèche depuis hier matin :-(
Cordialement
bonjour Xavier.
C'est ton poisson d'avril 2004 ?
Utilises plutôt Form.Recordset
je n'ai pas tout compris sur le WrkSpc
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum
"Xavier HUE" <elxavpub@bupfree.fr> a écrit dans le message de
news:16fcf01c417bc$c7beb070$a101280a@phx.gbl...
Bonjour la communauté,
Win 2000 Pro, Access XP SP1.
Un bête formulaire (sans source de données), contenant un
sous-formulaire basé sur une requête, laquelle requête
retourne les enregistrements d'une table Access.
Afin de déterminer où se situe mon problème, j'ai procédé
par élimination en désactivant des lignes de code. Je suis
arrivé au résultat suivant:
Private Sub Form_Load()
Call RafraichirListeDemande
End Sub
Private Sub BtnReafficher_Click()
Call RafraichirListeDemande
End Sub
Private Sub RafraichirListeDemande()
Dim Frd As Recordset
Dim WrkSpc As Workspace
Set WrkSpc = DBEngine.Workspaces(0)
WrkSpc.Close
Set WrkSpc = Nothing
Me.SF_FrmDemandeTraitement_Liste.Form.Requery
Ligne qui plante >>> Set Frd Me.SF_FrmDemandeTraitement_Liste.Form.RecordsetClone
If Frd.BOF = True Then
Me.LstStatut.Value = Null
Me.LstStatut.Enabled = False
Else
Me.LstStatut.Enabled = True
End If
Set Frd = Nothing
End Sub
Au chargement du formulaire, tout fonctionne.
Si je clique sur mon bouton de ré-actualisation
(BtnReafficher), ca plante sur la ligne indiquée ci-
avant??!!
Si je supprime les lignes concernant la variable WrkSpc,
ca marche!!!
je n'ai pas tout compris sur le WrkSpc -- @+ Raymond Access MVP http://access.seneque.free.fr/ http://access2003.free.fr/ http://users.skynet.be/mpfa/ pour débuter sur le forum
"Xavier HUE" a écrit dans le message de news:16fcf01c417bc$c7beb070$ Bonjour la communauté,
Win 2000 Pro, Access XP SP1.
Un bête formulaire (sans source de données), contenant un sous-formulaire basé sur une requête, laquelle requête retourne les enregistrements d'une table Access.
Afin de déterminer où se situe mon problème, j'ai procédé par élimination en désactivant des lignes de code. Je suis arrivé au résultat suivant:
Private Sub Form_Load() Call RafraichirListeDemande End Sub
Private Sub BtnReafficher_Click() Call RafraichirListeDemande End Sub
Private Sub RafraichirListeDemande() Dim Frd As Recordset
Dim WrkSpc As Workspace Set WrkSpc = DBEngine.Workspaces(0) WrkSpc.Close Set WrkSpc = Nothing
Me.SF_FrmDemandeTraitement_Liste.Form.Requery
Ligne qui plante >>> Set Frd Me.SF_FrmDemandeTraitement_Liste.Form.RecordsetClone If Frd.BOF = True Then
Me.LstStatut.Value = Null Me.LstStatut.Enabled = False Else Me.LstStatut.Enabled = True End If Set Frd = Nothing End Sub
Au chargement du formulaire, tout fonctionne.
Si je clique sur mon bouton de ré-actualisation (BtnReafficher), ca plante sur la ligne indiquée ci- avant??!!
Si je supprime les lignes concernant la variable WrkSpc, ca marche!!!
Une idée?
Je sèche depuis hier matin :-(
Cordialement
Xavier HUE
Bonjour Raymond,
Hé non, ce n'est pas un poisson :-(
Hé non Raymond! Form.Recordset ne fonctionne pas non plus... Ou du moins, ne fonctionne qu'une fois.
Pour être plus précis, à l'ouverture du formulaire, j'appelle la procédure RafraichirListeDemande. Celle-ci initialise la Source du sous-formulaire SF_FrmDemandeTraitement_Liste, exécute un Requery, et enfin, active une liste déroulante s'il y a au moins un enreg dans le SF. Sinon, la liste est désactivée.
Normalement, les lignes concernant le WrkSpc se trouve dans une procédure "ActualiserListesDemandeTraitementEtStatut" appelée par RafraichirListeDemande.
Dans ActualiserListesDemandeTraitementEtStatut, j'ai ...BeginTrans ... Traitements ...CommitTrans
J'ai ramené ces lignes dans la proc qui plante, juste pour illustrer le contexte du plantage:
- Si les lignes sont désactivées, ca fonctionne - Si les lignes sont activées, le premier appel à ma proc s'exécute correctement, mais le suivant, provoqué par un clic sur un bouton, me plante en m'envoyant le message Objet est incorrect ou n'est plus défini??!!
Je ne comprends pas pourquoi!
En plus, je viens à l'instant de lire ceci dans l'aide sur RecordSetClone:
Remarque Si vous fermez le formulaire ou si vous modifiez la propriété Source du formulaire, l'objet Recordset n'est plus valide. Si, par la suite, vous faites référence à l'objet Recordset ou aux signets précédemment enregistrés pour le formulaire ou l'objet Recordset, une erreur se produit.
Ben non! Ca fonctionne! Enfin chez moi! Et sans la création de ma variable WrkSpc.
Et même si ça plante! Y a-t-il un moyen de demander à Access de reconstruire une référence vers le RecordSet du formulaire?? L'aide ne le dit pas! Du moins, je n'ai pas trouvé :-((
Je vais essayer de contourner en créant un Recordset, plutôt qu'en récupérant celui du formulaire. Mais le principe me gêne un peu: Demander à Access de faire deux fois l'extraction de données... Pas trés propre.
Merci encore. Xavier.
Bonjour Raymond,
Hé non, ce n'est pas un poisson :-(
Hé non Raymond! Form.Recordset ne fonctionne pas non
plus... Ou du moins, ne fonctionne qu'une fois.
Pour être plus précis, à l'ouverture du formulaire,
j'appelle la procédure RafraichirListeDemande.
Celle-ci initialise la Source du sous-formulaire
SF_FrmDemandeTraitement_Liste, exécute un Requery, et
enfin, active une liste déroulante s'il y a au moins un
enreg dans le SF. Sinon, la liste est désactivée.
Normalement, les lignes concernant le WrkSpc se trouve
dans une
procédure "ActualiserListesDemandeTraitementEtStatut"
appelée par RafraichirListeDemande.
Dans ActualiserListesDemandeTraitementEtStatut, j'ai
...BeginTrans
... Traitements
...CommitTrans
J'ai ramené ces lignes dans la proc qui plante, juste pour
illustrer le contexte du plantage:
- Si les lignes sont désactivées, ca fonctionne
- Si les lignes sont activées, le premier appel à ma
proc s'exécute correctement, mais le suivant, provoqué par
un clic sur un bouton, me plante en m'envoyant le message
Objet est incorrect ou n'est plus défini??!!
Je ne comprends pas pourquoi!
En plus, je viens à l'instant de lire ceci dans l'aide sur
RecordSetClone:
Remarque Si vous fermez le formulaire ou si vous
modifiez la propriété Source du formulaire, l'objet
Recordset n'est plus valide. Si, par la suite, vous faites
référence à l'objet Recordset ou aux signets précédemment
enregistrés pour le formulaire ou l'objet Recordset, une
erreur se produit.
Ben non! Ca fonctionne! Enfin chez moi! Et sans la
création de ma variable WrkSpc.
Et même si ça plante! Y a-t-il un moyen de demander à
Access de reconstruire une référence vers le RecordSet du
formulaire?? L'aide ne le dit pas! Du moins, je n'ai pas
trouvé :-((
Je vais essayer de contourner en créant un Recordset,
plutôt qu'en récupérant celui du formulaire. Mais le
principe me gêne un peu: Demander à Access de faire deux
fois l'extraction de données... Pas trés propre.
Hé non Raymond! Form.Recordset ne fonctionne pas non plus... Ou du moins, ne fonctionne qu'une fois.
Pour être plus précis, à l'ouverture du formulaire, j'appelle la procédure RafraichirListeDemande. Celle-ci initialise la Source du sous-formulaire SF_FrmDemandeTraitement_Liste, exécute un Requery, et enfin, active une liste déroulante s'il y a au moins un enreg dans le SF. Sinon, la liste est désactivée.
Normalement, les lignes concernant le WrkSpc se trouve dans une procédure "ActualiserListesDemandeTraitementEtStatut" appelée par RafraichirListeDemande.
Dans ActualiserListesDemandeTraitementEtStatut, j'ai ...BeginTrans ... Traitements ...CommitTrans
J'ai ramené ces lignes dans la proc qui plante, juste pour illustrer le contexte du plantage:
- Si les lignes sont désactivées, ca fonctionne - Si les lignes sont activées, le premier appel à ma proc s'exécute correctement, mais le suivant, provoqué par un clic sur un bouton, me plante en m'envoyant le message Objet est incorrect ou n'est plus défini??!!
Je ne comprends pas pourquoi!
En plus, je viens à l'instant de lire ceci dans l'aide sur RecordSetClone:
Remarque Si vous fermez le formulaire ou si vous modifiez la propriété Source du formulaire, l'objet Recordset n'est plus valide. Si, par la suite, vous faites référence à l'objet Recordset ou aux signets précédemment enregistrés pour le formulaire ou l'objet Recordset, une erreur se produit.
Ben non! Ca fonctionne! Enfin chez moi! Et sans la création de ma variable WrkSpc.
Et même si ça plante! Y a-t-il un moyen de demander à Access de reconstruire une référence vers le RecordSet du formulaire?? L'aide ne le dit pas! Du moins, je n'ai pas trouvé :-((
Je vais essayer de contourner en créant un Recordset, plutôt qu'en récupérant celui du formulaire. Mais le principe me gêne un peu: Demander à Access de faire deux fois l'extraction de données... Pas trés propre.
Merci encore. Xavier.
Xavier HUE
Set db = CurrentDb Set Frd = db.OpenRecordset (Me.SF_FrmDemandeTraitement_Liste.Form.RecordSource, dbOpenSnapshot)