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

titilechat001 Messages postés 22 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 18 septembre 2005 - 18 sept. 2005 à 12:05
titilechat001 Messages postés 22 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 18 septembre 2005 - 18 sept. 2005 à 21:07
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

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
18 sept. 2005 à 12:36
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 !?
0
titilechat001 Messages postés 22 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 18 septembre 2005
18 sept. 2005 à 13:12
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
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
18 sept. 2005 à 15:31
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 !?
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
18 sept. 2005 à 15:32
Et n'oublie pas de mettre exit sub avant l'étiquette Err_form_activate:

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
titilechat001 Messages postés 22 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 18 septembre 2005
18 sept. 2005 à 17:36
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 ;-)
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
18 sept. 2005 à 19:39
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 !?
0
titilechat001 Messages postés 22 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 18 septembre 2005
18 sept. 2005 à 21:07
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
0
Rejoignez-nous