[vba] Problème de boucle

Résolu
mat67000 Messages postés 418 Statut Membre -  
blux Messages postés 2058 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour

J'ai un petit souci, je m'explique :

Dans ma base Access, j'ai un formulaire de création de switch avec différentes infos comme le N° de switch, son adresse IP etc... Y figure aussi le nombre de ports (12 24 48).
J'ai créer une boucle dans le but de pouvoir ajouter chaque port du switch créer c'est à dire autant d'enregistrement à créer que de ports selectionnés. Seulement cela ne fonctionne pas, et je ne vois vraiment pas pourquoi !!
Quelqu'un a-t-il une idée ?? merci...

Dim count
    
    count = 0
    
   Do While count <= Me.Nombre_de_ports.Value
    
Dim essai
Dim essai2

essai = "INSERT INTO T_PORT (N°Switch) VALUES ('"
essai = essai & N°_Switch.Value & "');"

essai2 = "INSERT INTO T_PORT (Port) VALUES ('"
essai2 = essai2 & count & "');"




    count = count + 1
    Loop
    
    End


ce code est appliqué sur le bouton "enregistrer"
Configuration: Windows XP
Internet Explorer 6.0

15 réponses

  1. blux Messages postés 2058 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    tu exécutes ta requête quand ?
    0
  2. mat67000 Messages postés 418 Statut Membre 13
     
    J'exécute la requete sur l'evenement Private Sub Bouton_enrgt_Click()

    Les MsgBox de controles montrent la bonne exécution de la requete mais aucun effet dans la table T_PORT
    0
  3. blux Messages postés 2058 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Donne le code de Bouton_enrgt_Click()
    0
  4. mat67000 Messages postés 418 Statut Membre 13
     
    
    Private Sub Commande26_Click()
    On Error GoTo Err_Commande26_Click
    
    
        DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
        
    
    Dim count
        
        count = 0
        
       Do While count <= Me.Nombre_de_ports.Value
        
    Dim essai
    Dim essai2
    
    essai = "INSERT INTO T_PORT (N°Switch) VALUES ('"
    essai = essai & N°_Switch.Value & "');"
    MsgBox essai
    essai2 = "INSERT INTO T_PORT (Port) VALUES ('"
    essai2 = essai2 & count & "');"
    MsgBox essai2
    
    
    
        count = count + 1
        Loop
        
        End
        
    Exit_Commande26_Click:
        Exit Sub
    
    Err_Commande26_Click:
        MsgBox Err.Description
        Resume Exit_Commande26_Click
        
    End Sub
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. blux Messages postés 2058 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Donc, j'insiste, à aucun moment tu n'exécutes une requête, tu te contentes de mettre un texte de requête dans deux variables essai et essai2, si ensuite tu fais un docmd runsql, alors-là, ça peut changer...:-)
    0
  7. mat67000 Messages postés 418 Statut Membre 13
     
    J'ai testé avec runsql mais des erreurs sont générés. Désolé mais ça fait quelques temps que je ne suis plus dans le bain ^^

    Private Sub Commande26_Click()
    On Error GoTo Err_Commande26_Click
    
    
        DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
        
    
    Dim count
        
        count = 0
        
       Do While count <= Me.Nombre_de_ports.Value
      
    DoCmd.RunSQL "INSERT INTO T_PORT (N°Switch) VALUES ('" & N°_Switch.Value & "')"
    
    DoCmd.RunSQL "INSERT INTO T_PORT (Port) VALUES ('" & count & "')"
    
        count = count + 1
        Loop
        
        End
        
    Exit_Commande26_Click:
        Exit Sub
    
    Err_Commande26_Click:
        MsgBox Err.Description
        Resume Exit_Commande26_Click
        
    End Sub
    0
  8. blux Messages postés 2058 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    c'est quoi les erreurs, j'ai du mal à deviner, même si je pense à un pb de "...
    0
  9. mat67000 Messages postés 418 Statut Membre 13
     
    Ici => http://hebergement-images.voiloo.net/membres/viewimg.php?img=d0d86495b9fe1052cf8c9c6a7fea0b27.jpg

    et j'ai cette erreur une trentaine de fois ^^
    0
  10. blux Messages postés 2058 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    DoCmd.RunSQL "INSERT INTO T_PORT (N°Switch) VALUES ('" & N°_Switch.Value & "')"

    une fois que tu l'as créé, la deuxième fois, ça va pas le faire... il faut le sortir de ta boucle qui ne crée que les ports, mais il faut cibler le switch à créer... donc en fait, faire des deux requêtes une seule :

    DoCmd.RunSQL "INSERT INTO T_PORT (N°Switch, port) VALUES ('" & N°_Switch.Value & ";" & count & ")"

    ou un truc comme ça, j'ai pas testé...
    fais attention, le mot-clé count existe en VBA...
    0
  11. mat67000 Messages postés 418 Statut Membre 13
     
    J'ai testé ceci :

    Dim cpte
        
        cpte = 0
        
       Do While cpte <= Me.Nombre_de_ports.Value
      
    DoCmd.RunSQL "INSERT INTO T_PORT (N°Switch, port) VALUES ('" & N°_Switch.Value & ";" & cpte & "')"
    
        cpte = cpte + 1
        Loop
        
        End


    je n'ai pas sorti la requete de la boucle, tout simplement parce que je ne vois pas comment faire comprendre à la requete de créer les ports en fonction de l'instruction de la boucle !!
    0
  12. blux Messages postés 2058 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    je t'ai dit qu'il ne fallait créer qu'un seul switch, donc le sortir de la boucle, mais ça ne résoud pas tout le problème, c'est pour ça que finalement j'ai dit qu'il fallait cibler le switch dans lequel on ajoute des ports, donc faire ce que tu as fait...

    ça marche mieux ?
    0
  13. mat67000 Messages postés 418 Statut Membre 13
     
    J'ai essayé ceci :

    Dim Sw
    Sw = Me.N°_Switch.Value
    MsgBox Sw
    
    Dim cpte
        
        cpte = 0
        
       Do While cpte <= Me.Nombre_de_ports.Value
      
    DoCmd.RunSQL "INSERT INTO T_PORT (Port) VALUES ('" & cpte & "') WHERE [N°Switch.Value] = " & Sw & ";"
    
        cpte = cpte + 1
        Loop
        
        End


    je sais pas si c'est exactement ce que tu voulais dire, mais là Access me met qu'il attend un pt-virgule à la fin de l'instruction SQL alors qu'il y est ^^
    0
  14. blux Messages postés 2058 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Ca peut le faire, mais mets ta requête dans une chaine avant de l'exécuter, je suis sûr qu'il n'aime pas les " comme délimiteurs de la commande et délimiteurs de ta requête en même temps...
    0
  15. mat67000 Messages postés 418 Statut Membre 13
     
    mets ta requête dans une chaine avant de l'exécuter

    C'est-à-dire ??

    Et pourquoi me dit-il qu'il manque le ; à la fin de l'instruction SQL alors qu'il y est ??
    0
  16. blux Messages postés 2058 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Dim StrSql as String
    StrSql = "INSERT INTO T_PORT (Port) VALUES "
    StrSql = StrSql & "('" & cpte & "') WHERE [N°Switch.Value] = "
    Strsql = StrSql & Sw & ";"
    DoCmd RunSql (StrSql)
    Et pourquoi me dit-il qu'il manque le ; à la fin de l'instruction SQL alors qu'il y est ??
    Sûrement pour les raisons expliquées plus haut, la commande Runsql a ses attributs délimités par des " l'attribut de la comande est lui-même avec des ", je pense qu'il ne doit pas aimer...
    0