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
3 Réponses :
La méthode .Open n'est pas pour une requête action mais pour une requête select .
Je suis sûr que ce n'est pas vrai car mon premier code rs.open met à jour la table
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 . p>
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.
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.