OVH Cloud OVH Cloud

Objet est incorrect ou n'est plus défini

3 réponses
Avatar
Xavier HUE
Bonjour la communaut=E9,

Win 2000 Pro, Access XP SP1.

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

Une id=E9e?

Je s=E8che depuis hier matin :-(

Cordialement

3 réponses

Avatar
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



Avatar
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.
Avatar
Xavier HUE
Set db = CurrentDb
Set Frd = db.OpenRecordset
(Me.SF_FrmDemandeTraitement_Liste.Form.RecordSource,
dbOpenSnapshot)

à la place de

Me.SF_FrmDemandeTraitement_Liste.Form.RecordsetClone

Fonctionne...
Mais bof!

Xavier.