IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

UPDATE sur un table différente d'un SELECT préalable


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Points : 14
    Points
    14
    Par défaut UPDATE sur un table différente d'un SELECT préalable
    Bonjour,

    Je travaille sur un script qui doit mettre à jour des enregistrements dans une base SQL Server, dans 2 tables différentes.

    Pour cela, j'ai besoin de récupérer des GUID dans une troisième table, via un SELECT assez riche. En le décomposant, j'arrive bien à récupérer les GUID dont j'ai besoin dans un ADODB.Recordset.

    A partir de là, j'aurais besoin de faire mon UPDATE sur mes 2 autres tables, mais je bloque sur la méthode. Pour le moment, j'ai créé une boucle qui pour chaque GUID récupéré essaye de lancer les UPDATE des mes tables, mais je tombe systématiquement sur une erreur qui me signale que mon objet (le recordset) est fermé.

    Pour être plus pratique, la partie du script en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Set conn = CreateObject("ADODB.Connection")
    conn.Open strConnection
    Set rs = CreateObject("ADODB.recordset")
     
    strSQL="SELECT ...."
     
    rs.Open strSQL, conn, 3, 3
     
     
    If rs.RecordCount > 0 Then
    	rs.MoveFirst
    	While not rs.EOF
    		rs.fields("WFTGuid") = WFTGuid
    		strSQL ="UPDATE Table1 SET Table1.DateDone = CURRENT_TIMESTAMP WHERE Table1.Table2Guid='" & WFTGuid & "' " & _
    			"UPDATE Table2 SET Table2.DateDone=CURRENT_TIMESTAMP, Table2.Status=-2 WHERE Table2.Guid='" & WFTGuid & "' "
    	rs.MoveNext
    	Wend
    	conn.execute(strSQL)
    End If
    J'ai pu lire qu'il existe une méthode qui permet de mettre à jour les enregistrements directement via le Recordset, mais je n'arrive pas :
    - à savoir si c'est la bonne méthode,
    - comprendre comment l'exploiter avec des tables différentes.

    Merci d'avance pour vos lumières !

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Vu le nombre d'affichage, je ne sais pas si je présente mal mon soucis.

    Je vais essayer de créer un nouveau recordset pour réaliser l'update, voir si ça me débloque.

    N'hésitez pas si vous avez de meilleures suggestions !

  3. #3
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    je ne sais pas si je présente mal mon soucis.
    Je pense plutôt que le script ne soit pas tout à fait logique.
    rs.fields("WFTGuid") = WFTGuid
    Ce n'est pas une operation admissible. Et puis, c'est quoi WFTGuid, mais peu importe, le mal est déjà fait avec cette ligne.
    conn.execute(strSQL)
    Cette ligne est dehors du While ... WEnd. Et quel est le sens de strSQL ? Chaque fois rs avance, strSQL change mais il n'execute jamais sauf la dernière rs, ça me semble illogique.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par tsuji Voir le message
    Je pense plutôt que le script ne soit pas tout à fait logique.

    Ce n'est pas une operation admissible. Et puis, c'est quoi WFTGuid, mais peu importe, le mal est déjà fait avec cette ligne.

    Cette ligne est dehors du While ... WEnd. Et quel est le sens de strSQL ? Chaque fois rs avance, strSQL change mais il n'execute jamais sauf la dernière rs, ça me semble illogique.
    Merci pour votre réponse.

    Pour ce qui est du WFTGuid, comme je le mentionnais dans mon premier message, c'est un identifiant unique que récupère ma première requête (le select...)

    Je déclare cette variable en amont de l'exemple donné. Exemple qui n'est pas un copié-collé, raison pour laquelle j'ai malheureusement inversé le "Wend" et le conn.execute...

    Jusqu'à présent, je table sur l'enregistrement de mon SELECT dans un array (WFTGuid), et je pense faire un loop sur l'array pour exécuter les UPDATE. Je n'ai pas d'exemple sous la main (je suis en déplacement), mais je me dis qu'il y a peut-être une méthode plus efficace, non ?

  5. #5
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Alors, supponçons WFTGuid est obtenue par quelque moyen que ce soit et elle reste constante durant les mis-à-jour des tableaux Table1, Table2 et Table3. Ce qui n'est pas clair, c'est dans ce bloc:
    strSQL="SELECT ...." 'ligne #6
    rs.Open strSQL, conn, 3, 3 'ligne #8
    il s'agit de quel tableau, Table3 ? ou quoi ? De quels critères il utilise dans la clause "where ..." ? Peut-être il vaut mieux que vous montrez le strSQL dans la ligne #6.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    J'ai réussi à résoudre mon problème en créant deux ADODB.Recordset, un pour le SELECT, l'autre pour l'UPDATE.

    Il y avait aussi effectivement un couac lors de la définition de la variable WFTGuid, donc je m'en suis passé et j'ai utilisé directement les valeurs récupérées dans mon SELECT avec le rs.fields("WFTGuid").

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Select + where + count sur 2 tables différentes
    Par Cedios dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/10/2011, 19h13
  2. critere de selection pr faire un UPDATE sur 1 table
    Par maxizoo dans le forum Langage SQL
    Réponses: 6
    Dernier message: 05/01/2006, 15h35
  3. SQL Query sur deux tables différentes.
    Par kabal22 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/12/2005, 17h52
  4. Sum de deux champs sur deux tables différentes
    Par kluh dans le forum Oracle
    Réponses: 11
    Dernier message: 29/09/2005, 18h21
  5. Somme de 3 COUNT() sur 3 tables différentes
    Par PyRoFlo dans le forum Langage SQL
    Réponses: 9
    Dernier message: 13/08/2004, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo