0 votes

Mise à jour de VBA ODBC

Voici le code que j'utilise pour mettre à jour une base de données SQL :

Public Sub main()

    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset

    Set cnn = New ADODB.Connection
    Set rst = New ADODB.Recordset

    cnn.Open "ConnectionName"
    rst.ActiveConnection = cnn
    rst.CursorLocation = adUseServer

    rst.Source = "Update Table ..."
    rst.Open

    Set rst = Nothing
    Set cnn = Nothing
End Sub

Ce que je veux savoir, c'est si et comment je dois traiter le premier objet après l'avoir ouvert. Dois-je le fermer ? Lorsque j'essaie de faire rst.Close, j'obtiens l'erreur suivante : "Operation is not allowed when the object is closed". Le code fonctionne bien sans rst.Close, je me demande s'il y a des dangers à ne pas fermer l'objet.

3voto

GSerg Points 33571

Un site UPDATE ne renvoie pas de jeu de résultats. Par conséquent, si elle est exécutée avec un Recordset il en résulte un jeu d'enregistrements vide et fermé. Il ne peut de toute façon pas être fermé car il n'a jamais été ouvert.

Une règle de base est :

if rst.State <> adStateClosed then rst.Close

Mais, comme vous exécutez une commande qui ne retournera pas de données de toute façon, la méthode préférée est la suivante :

dim cm as ADODB.Command
set cm = new adodb.command
set cm.activeconnection = cnn
cm.commandtype = adCmdText
cm.commandtext = "UPDATE ..."

cm.execute ,, adExecuteNoRecords

Ou, si votre SQL est une chaîne fixe qui n'a pas de paramètres,

cnn.execute "UPDATE ...",, adExecuteNoRecords

Aussi, veuillez changer rst.ActiveConnection = cnn à Set rst.ActiveConnection = cnn .

0voto

Alex K. Points 67805

Une mise à jour ne renvoie aucune ligne, il n'est donc pas nécessaire d'ouvrir un jeu d'enregistrements.

Vous pouvez exécuter l'instruction directement en utilisant :

Connection.Execute "Update Table ...", [flags]

Pour répondre à votre question, après .Open le jeu d'enregistrements est fermé (son .state sera adStateClosed ) car aucune donnée n'a été renvoyée, donc le mettre à zéro est suffisant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X