L'objet est incorrect ou n'est plus défini

Signaler
Messages postés
22
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
18 septembre 2005
-
Messages postés
22
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
18 septembre 2005
-
bonjour



je travaille sur une base access 97, en dao. quand je fait un
recordet.movefirst, ca me met comme erreur "l'objet est incorrect ou
n'est plus défini" . Je ne comprends pas pourquoi et ai essayé de me
renseigner là dessus, mais en vain. Ca me fait la même erreur avec un
addnew autre part dans mon code.



voici mon code



Private Sub Form_Activate()



With Me.dataaddition.Recordset

.AddNew 'ajout de la nouvelle table

!id_table = idtable

!addition_ht = Me.lbltotalht.Caption

!Date = Me.lbldateservice.Caption

.Update

.MoveLast

End With

End Sub

ma question va vous paraitre basique, mais je débute.

D'autre part, je voudrais mettre un message d'erreur quand
l'utilisateur fait appel à un enregistrement qui n'est plus valide,
mais ne sais pas comment m'y prendre. Une personne du forum m'a donné
un code, mais il ne fonctionne pas. je ne l'ai pas mis au bon endroit,
je pense.



j'ai mis: Private Sub Form_Load()

On Error GoTo Err_form_activate



Err_form_activate:



If Err.Number = "3201" Then

MsgBox "L'enregistrement spécifié n'existe plus !"

Resume Next

Exit Sub

End If



End Sub

est ce que je dois me mettre à chaque sub de mon code ou juste à form load? est ce qu'il faut que je déclare autre chose?



merci de vos lumières,

7 réponses

Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
Salut,

Un traitement d'erreur doit se trouver dans la procédure ou la fonction où l'erreur peut se produire donc la mettre dans le load de la form n'est valable que pour le load, pas pour toute la form. Et on code de cette façon :

sub truc()
On Error GoTo Trt_erreur

'ton code susceptible de provoquer l'erreur

exit sub 'sinon on passe dans le trt d'erreur même s'il n'y en a pas
Trt_erreur:

If Err.Number = "3201" Then
MsgBox "L'enregistrement spécifié n'existe plus !"
Resume Next 'si tu veux continuer malgré l'erreur sinon rien
End If

End Sub

D'autre part, je ne comprend pas ton addnew dans l'évènement activate. Si tu veux ajouter un enreg chaque fois que ta form prend le focus c'est presque correct (reste à savoir comment tu gère idtable et le pourquoi du movelast inutile). Sinon, ce n'est pas là qu'il faut le mettre.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
Messages postés
22
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
18 septembre 2005

merci pour le addnew, il fallait juste enlever le .movelast.

par contre, la gestion d'erreur ne fonctionne pas, même avec ton code. j'ai bien mis sub truc()

On Error GoTo Trt_erreur en haut de la bonne sub

mais en l'exécutant, ca s'arrete quand même sur le .update et ca me met
l'erreur windows, comme si il ne prenait pas le on error goto...



voici le code complet de la sub en question :



Private Sub cmdvalider_Click()

On Error GoTo Err_form_activate



With Me.datatable.Recordset

If (Me.txtcouverts.Text "") Or (Me.txtserveur.Text "") Then 'gestion des erreurs de saisie

MsgBox ("Vous devez remplir tous les champs")

ElseIf (Not IsNumeric(Me.txtcouverts)) Then

MsgBox ("vous devez entrer un nombre de couverts pour la table")

ElseIf (Not IsNumeric(Me.txtserveur)) Then

MsgBox ("vous devez entrer un numéro de serveur pour la table")

Else

.AddNew 'ajout de la nouvelle table

!id_serveur = Me.txtserveur.Text

!nb_couverts = Me.txtcouverts.Text

!no_table = notable

!etat = "commande" 'changement de l'état à commande

idtable = Me.datatable.Recordset.Fields(0) 'récup de l'id

.Update

.MoveLast

notable = Me.datatable.Recordset.Fields(1)

nb_couverts = Me.datatable.Recordset.Fields(2)

id_serveur = Me.datatable.Recordset.Fields(3)

Load commande3 'passage à l'étape commande

commande3.Show

Unload Me

End If

End With



Err_form_activate:

If Err.Number = 3201 Then

MsgBox ("L'enregistrement spécifié n'existe plus !")

Resume Next

Exit Sub

End If

End Sub

merci beaucoup
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
Plutôt que
idtable = Me.datatable.Recordset.Fields(0) 'récup de l'id
.Update
.MoveLast
essaie
.Update
.MoveLast
idtable = Me.datatable.Recordset.Fields(0) 'récup de l'id

car je suppose que le champ de l'id est un numéro auto ?

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
Et n'oublie pas de mettre exit sub avant l'étiquette Err_form_activate:

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
Messages postés
22
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
18 septembre 2005

bon, ca ne fonctionne toujours pas, quand je rentre un enregistrement faux, il me met

erreur d'exécution '3201'

vous ne pouvez pas ajouter ou modifier un enregistrement car l'enregistrement connexe est requis dans la table 'serveur'

??

la, je suis au bord du desespoir ;-)
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
J'en était resté à l'erreur "l'objet est incorrect ou n'est plus défini" mais en fait, "l'enregistrement connexe est requis dans la table 'serveur'" veut dire qu'il y a une intégrité référentielle entre ta table et la table serveur. Tu ne peux donc modifier ou supprimer d'enregistrement.

Il n'y aurait pas 2 tables dans le from de ton recordset ?

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
Messages postés
22
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
18 septembre 2005

Non, pas du tout, il me dit ca quand je veux sélectionner un id qui
n'existe plus (car je n'ai pas mis de listbox qui donne les valeurs de
ma base)

et comme j'ai cette erreur à plusieurs endroits, je cherche à faire une
gestion d'erreur qui tienne la route, pour éviter tous les bugs de ce
type