1
votes

L'expression que vous avez saisie fait référence à un objet qui est fermé ou qui n'existe pas erreur

J'essaie d'ouvrir 2 jeux d'enregistrements ADODB sur un événement de clic de bouton comme:

    Private Sub btn1_Click()
        Dim rs As New ADODB.Recordset
        Dim rst As New ADODB.Recordset

         rs.Open "UPDATE table ITEM = " & Me.ITEM & " where ID = " & ID, CurrentProject.Connection
       rs.Close
       Set rs = Nothing

      rst.Open "Update Table2 set Item2 = " & Me.Item2,CurrentProject.Connection

End Sub

La première erreur que j'obtiens est sur rs.close où il est dit:

L'opération n'est pas autorisée lorsque l'objet est fermé.

Je suis vraiment confus au sujet de cette erreur car je n'ai clairement pas fermé le jeu d'enregistrements rs.

Mais même lorsque je supprime rs.close J'obtiens:

L'expression que vous avez saisie fait référence à un objet qui est fermé ou n'existe pas

sur le

rst.Open "Update Table2 set Item2 =" & Me.Item2, CurrentProject.Connection


0 commentaires

3 Réponses :


1
votes

La méthode .Open n'est pas pour une requête action mais pour une requête select .


1 commentaires

Je suis sûr que ce n'est pas vrai car mon premier code rs.open met à jour la table



1
votes

Puisque vous évaluez les instructions update , vous devez utiliser les .Execute méthode de la Objet de connexion ADODB plutôt que la méthode .Open .


0 commentaires

2
votes

La première erreur (sur rs.Close ) s'est produite car le jeu d'enregistrements n'a jamais été ouvert.

Votre UPDATE (lorsque vous avez inclus le SET code> mot-clé) exécuté avec succès, mais une UPDATE ne renvoie pas d'enregistrements. Le jeu d'enregistrements n'a donc pas été ouvert. Exécutez le code suivant pour clarifier la situation ...

Debug.Print "Update Table2 set Item2 = " & Me.Item2

Lorsque vous souhaitez exécuter une UPDATE , vous n'avez pas besoin d'un jeu d'enregistrements; vous n'avez même pas besoin d'ADO. Vous pouvez simplement faire ceci ...

CurrentDb.Execute strUpdate, dbFailOnError

Concernant votre deuxième erreur, je ne suis pas sûr de la cause, mais je pense que le problème est dans la construction du texte de l'instruction. Je vous suggère de l'ajouter à votre code et de l'exécuter ...

Dim rs As New ADODB.Recordset
Dim strUpdate As String

strUpdate = "UPDATE table SET ITEM = " & Me.item & " where ID = " & id
rs.Open strUpdate, CurrentProject.Connection
If rs.State = adStateClosed Then
    Debug.Print "can't close recordset because it's already closed"
Else
    rs.Close
End If

Si cela ne déclenche pas la même erreur, copiez le texte de l'instruction de la fenêtre Exécution et collez-le pour test dans la vue SQL d'une nouvelle requête dans le concepteur de requêtes Access. Si vous n'êtes pas familier avec la fenêtre Exécution, Ctrl + g vous y emmènera.


1 commentaires

Vous avez raison sur les deux erreurs. La deuxième erreur se produisait en fait parce que j'avais fermé le formulaire avant d'exécuter cette ligne. Cela a rendu me.Item2 invalide. Désolé, j'ai oublié d'ajouter le code de fermeture du formulaire ci-dessus.