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.