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

Requêtes et SQL. Discussion :

Utilisation de Do until


Sujet :

Requêtes et SQL.

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2017
    Messages : 34
    Par défaut Utilisation de Do until
    Bonjour,

    Je suis bloquée sur un syntaxe qui sera sûrement facile pour vous.
    J'ai en effet le code suivant qui demande à l'utilisateur d'entrer un mot de passe via un input box et si le mot de passe est correct exécute les lignes de codes. Ce code marche très bien.
    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
    21
    22
     
    Private Sub Bouton_Click()
    Dim rst As DAO.Recordset
    Dim sSQL As String ' Ouverture de la base de données
    Dim v As Variant
    strReponse = InputBox("Veuillez saisir votre mot de passe !!", "Identification")
    sSQL = "Select * From table2 where [np]='vo jacques'"
     'open
    Set rst = CurrentDb.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly)
    'traitement
    Do Until strReponse = v
             v = rst![CP]
             rst.MoveNext
        If strReponse = v Then
             sql1 = "Delete * FROM [TAB]"
             DoCmd.RunSQL sql1
             MsgBox " les données ont été exportées"
          End If
    Loop 
    'close
    rst.Close
    End Sub
    Je souhaiterai par contre dans le cas où le mot de passe est incorrect afficher un msgbox" le mot de passe est incorrect".

    Mon souci est que : je ne sais pas où placer le code.

    J'ai essayé de le mettre dans la boucle comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Do Until strReponse = v
             v = rst![CP]
             rst.MoveNext
        If strReponse = v Then
             sql1 = "Delete * FROM [TAB]"
             DoCmd.RunSQL sql1
             MsgBox " les données ont été exportées"
          End If
      If strReponse <> v Then
       MsgBox" le mot de passe saisi est incorrect"
    End if
    Loop
    Le code marche mais le msgbox " le mot de passe incorrect est affiché plusieurs fois".

    Je sais que çà pas ne pas être très claire , je suis disponible pour détailler un peu plus si besoin.

    Merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    Bonjour,

    Si j'ai bien compris, tu récupère des lignes d'une table par rapport à un utilisateur, et tu teste chacune d'entre elle avec le mot de passe que tu as rentré avant la boucle.
    Là où tu as écris le code pour dire que le mot de passe est incorrect, comme il est à l'intérieur de la boucle qui vérifie toutes les lignes, il s'affiche donc bien à chaque ligne (sauf celle où le mot de passe est correct).

    Toi ce que tu aimerais, c'est qu'il exécute le code pour chaque élément de la table si le mot de passe est le bon, et qu'il affiche le message si aucun d'entre eux n'a ce mot de passe c'est ça?
    Si c'est le cas, tu prends le problème de travers. Au lieu de récupérer toutes les lignes de la table pour un utilisateur et de regarder si le mot de passe est le bon pour l'un d'eux, pourquoi ne pas:
    -Faire ta requête directement avec le mot de passe
    -Regarder si tu as bien des lignes qui correspondent à ce critère
    -Exécuter ton code pour chacune des lignes qui ont ce mot de passe
    -Afficher ton message d'erreur si aucune ligne n'a ce mot de passe

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2017
    Messages : 34
    Par défaut
    Bonjour syrald,
    Merci pour ton retour.
    J'ai rien à ajouter sur ta description , c'est bien ce que je souhaite avoir.
    Je ne sais pas par contre comment s'y prendre avec tes propositions suivantes:

    Faire ta requête directement avec le mot de passe
    -Regarder si tu as bien des lignes qui correspondent à ce critère
    -Exécuter ton code pour chacune des lignes qui ont ce mot de passe
    -Afficher ton message d'erreur si aucune ligne n'a ce mot de passe

    Merci de m'éclairer d'avantage

  4. #4
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    Je te donne la marche à suivre pour que tu le fasses toi même et que tu comprennes mieux de ton côté

    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
     
    Private Sub Bouton_Click()
    Dim rst As DAO.Recordset
    Dim sSQL As String ' Ouverture de la base de données
     
    strReponse = InputBox("Veuillez saisir votre mot de passe !!", "Identification")
    sSQL = "Select * From table2 where [np]='vo jacques AND [CP]='" & strReponse "'"
     
    rst = CurrentDb.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly)
     
    If rst.RecordCount <> 0 Then
       'Là tu fais ton code sur chaque ligne, tu sais que le mot de passe est bon
    Else
       'Là tu n'a eu aucune ligne avec ce mot de passe, tu peux afficher ta MsgBox
    End If
     
    rst.Close
    End Sub

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set rst = CurrentDb.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly)
    if rst.eof then msgbox "ha ha ha!" : exit sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    do while not rst.eof
        
        If strReponse = rst![CP] Then
            CurrentDb.execute "Delete * FROM [TAB]"
            MsgBox " les données ont été exportées"
            exit do
          End If        
     rst.movenext
    loop

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2017
    Messages : 34
    Par défaut Utilisation de do until
    Bonjour ,

    Merci pour vos retours et du temps consacré à mon problème.

    syrald : J'ai essayé comme tu me l'as proposé de faire mon code sur chaque ligne mais rien ne marche, j'ai encore un niveau débutant sur vba, sql.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If rst.RecordCount <> 0 Then
       'Là tu fais ton code sur chaque ligne, tu sais que le mot de passe est bon
    dysorthographie : Merci pour ton code mais çà le même effet que mon code proposé tout au début.
    Mon problème persiste, j'ai pas de msgbox " mot de passe incorrect" lorsque le mot de passe saisi est incorrect.
    Rien ne se passe lorsqu'un mot de passe incorrect est saisi.
    Faut -il que je revois la ligne de code suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if rst.eof then msgbox "ha ha ha!" : exit sub
    Merci de m'élucider.

    Merci encore du temps.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    If rst.RecordCount <> 0 Then
       While Not rst.EOF
          CurrentDb.execute "Delete * FROM [TAB]"
          MsgBox " les données ont été exportées"
          rst.MoveNext
       Wend
    Else
       MsgBox" le mot de passe saisi est incorrect"
    End If
    Ce code là part du principe que ta requête peut donner plusieurs lignes (si le mot de passe est même pour cet utilisateur pour plusieurs lignes).
    Mais si ça n'arrive jamais, tu peux enlever le While, le rst.MoveNext et le Wend.

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2017
    Messages : 34
    Par défaut utilisation de do until
    Merci syrald pour ton code.
    J'ai bien un message lorsque le mot de passe saisi est incorrect mais c'est pareil que mon premier poste : le message s'affiche plusieurs fois et c'est ce que je voulais éviter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If rst.RecordCount <> 0 Then
       While Not rst.EOF
          'CurrentDb.Execute "Delete * FROM [TAB]"
          MsgBox " les données ont été exportées"
          rst.MoveNext
       Wend
    Else
       MsgBox " le mot de passe saisi est incorrect"
    End If

    merci encore

  9. #9
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    Quel message s'affiche plusieurs fois? Les données ont été exportées ou Le mot de passe saisi est incorrect?

    C'est normal si c'est le premier qui s'affiche plusieurs fois. Si tu ne veux pas, tu déplaces la ligne MsgBox "Les données ont été exportées" juste après le Wend
    Si c'est le deuxième c'est que tu n'as pas écris la même chose que moi ^^

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2017
    Messages : 34
    Par défaut
    Merci syrald pour ton retour rapide ,
    C'est le message" Les données ont été exportées " qui s'affichait plusieurs fois, je l'ai donc enlevé de la boucle While.
    Par contre ton msgbox " le mot de passe saisi est incorrect " n'est jamais exécuté , ne s'affiche jamais.
    Avez vous essayé de mettre un mot de passe incorrect pour voir la réponse?


    MERCI

  11. #11
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 114
    Par défaut
    Je ne l'ai pas essayé, mais normalement il devrait fonctionner!
    Est-ce que ça marque "Les données ont été exportées" quand tu met un mauvais mot de passe?

    Si c'est le cas remplace If rst.RecordCount <> 0 Then par If Not rst.EOF Then

  12. #12
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2017
    Messages : 34
    Par défaut
    Merci,

    Est-ce que ça marque "Les données ont été exportées" quand tu met un mauvais mot de passe?
    oui c'est ce qui est marqué à la saisie d'un mauvais mot de passe.

    Si c'est le cas remplace If rst.RecordCount <> 0 Then par If Not rst.EOF Then

    Je l'ai remplacé et j'ai toujours le message "Les données ont été exportées" au lieu d'avoir " mot de passe saisi incorrect".
    Le else n'est toujours pas exécuté.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    tu te prend la tête pour rien!

    Code syrald adapté! : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    strReponse = InputBox("Veuillez saisir votre mot de passe !!", "Identification")
    sSQL = "Select * From table2 where [np]='vo jacques' AND [CP]='" & strReponse & "'"
    Set rst = CurrentDb.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly)
    If rst.EOF Then
        MsgBox " le mot de passe saisi est incorrect"
    Else
        MsgBox " les données ont été exportées"
    End If

  14. #14
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2017
    Messages : 34
    Par défaut Utilisation de do until
    Bonjour,

    C'est génial, dysorthographie : ton code marche très bien !!!

    Je tenais à vous remercier syrald et dysorthographie .
    Merci pour tout le temps passé à la recherche d'une solution.

    Merci aux administrateurs de ce site!!!


    Bonne journée à tous les deux!!

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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