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

VB 6 et antérieur Discussion :

Méthode Find / FindFirst


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut Méthode Find / FindFirst
    Bonjour à toutes et à tous,

    je post pour la première fois sur ce forum car je suis confronté à un problème.

    J'ai donc une database qui contient plusieurs tables et requêtes.

    Dans une de ces requêtes il y en a une qui contient des rendez-vous, avec la date, le nom du client, ...

    J'ai créé un formulaire affichant la date du rendez vous que l'on peut modifier avec quelques informations sur le client.

    J'aimerais que lorsque je pousse sur le bouton "SAVE" que j'ai mis il y aie une fenêtre qui s'affiche pour me dire combien de rendez vous il y a déjà ce jour là.
    J'ai pour ce faire créé une requête "Compte Date" qui a dans une colonne la date de tous mes rendez-vous existant et dans l'autre le nombre de rendez vous à ce jour là.

    J'aimerais donc que quand l'utilisateur rentre une nouvelle date de rendez-vous, le code renvoie le nombre de rendez-vous que j'ai déjà ce jour là. Donc une fenêtre apparaitrait en disant : " Il y a déjà 4 rendez vous ce jour là, sauvez quand même?" avec un Yes/No/Cancel.

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub SAVE_Click()
    On Error GoTo Err_Save_Click
    Dim rsMyRS As Recordset
    Set rsMyRS=CurrentDB.OpenRecordSt("Compte Date")
    rsMyRS.Find ("Expr1=" & Date (Text8.Value))
    Save=MsgBox("There already is"+[rsMyRS.Expr2]+"meetings on that day. Save anyway?")

    Dans ce code, "Text8" est le nom de la boite ou est rentrée la nouvelle date de rendez-vous. Ne faut-il pas utiliser un FindFirst a la place du find?


    Merci d'avance pour vos réponses et n'hésitez pas à me demander des éclaircissements!

  2. #2
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Bon...

    Plusieurs choses me paraissent peu orthodoxes dans ton code.

    1. Ne jamais utiliser des mots réserver ou des noms de fonctions (méthodes ou autres) existant déjà dans le langage VB.

      Par exemple, le nom de ton bouton SAVE dans :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Private Sub SAVE_Click()
      devrait être n'importe quoi (de significatif) sauf simplement SAVE. Par exemple, tu pourrais remplacer par cmdSave. Ceci afin de ne pas dérouter le compilateur qui pourrait, soit y détecter une erreur, soit ne pas en détecter mais créer un programme qui plante bêtement.

      De même que pour le nom de ta variable save et pour les mêmes raisons :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Save=MsgBox("There already is"+[rsMyRS.Expr2]+"meetings on that day. Save anyway?")
      Tu devrait modifier le nom de cette variable pour quelque chose comme blnSave (bln pour booléen).

      Cette dernière ligne de code comporte un signe + pour la concaténation, ce qui n'est pas recommandé. Il vaut mieux toujours utiliser le signe & lorsqu'on veut mettre plusieurs chaînes bout à bout.

    2. Pour une saisie de données valides, il vaut mieux utiliser des composant permettant de saisir les données dans le bon format.

      Par exemple, pour saisir une date, tu peux...
      • soit utiliser un composant de type calendrier comme le Calendar, le MonthVeiw ou le DateTimePicker,
      • soit utiliser un composant MaskEditBox.


      Ces composants se trouvent dans les composants supplémentaires (Ctrl + T).

      • Tu trouveras le Calendar sous cette appellation : Microsoft Calendar Control 10.0 ou une autre version selon la version de Ms Office installée chez toi.
      • Les composants MonthView et DTPicker (pour Date Time Picker) se trouvent dans la bibliothèque Microsoft Windows Common Controls 2 6.0 (suivi ou non d'un nom de Service Pack s'il en est un d'installé, selon).
      • Le composant MadkEditBox se nomme Microsoft Masked Edit Control 6.0 (dernière version corrigée sur le SP3).


    Pour ce qui est de ta question en tant que tel, Find et FindFirst... sais pas trop. Je pencherais plutôt pour une requête SQL avec une fonction du type SUM. Faudrait faire un petit tour du côté des tutos SQL. Je n'ai pas ça immédiatement en mémoire (celle sous mes méninges...).

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Un tout grand merci pour ta réponse zazaraignée!

    Je prends très bonne note de tous tes commentaires.

    Je suis aujourd'hui parvenu à mes fins en fouillant bien les nombreux forums du web.

    J'éditerai ce post demain afin de vous donner la solution à mon problème.

    Bonne fin de soirée !

    EDIT : Chose promie, chose due.
    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
    23
    24
    25
    26
    27
    28
    29
     
    Private Sub SAVE_Click()
    On Error GoTo Err_SAVE_Click
     
    Dim DateRDV As String
    Dim DateRDVAvecDieses As String
    Dim NombreDeRDVALaDate As String
     
    DateRDV = Text8.Value
    DateRDVAvecDieses = "#" & DateRDV & "#"
    NombreDeRDVALaDate = Nz(DLookup("[Expr2]", "[Compte Date]", "[Expr1]=" & DateRDVAvecDieses), "0")
     
    If NombreDeRDVALaDate = 0 Then
    RunCommand acCmdSaveRecord
    Else
    If MsgBox("Il y a déjà " & NombreDeRDVALaDate & " RDV en ce jour. Sauver?", vbYesNo, "Warning!") = vbYes Then
    RunCommand acCmdSaveRecord
    End If
    End If
     
     
    Exit_SAVE_Click:
        Exit Sub
     
    Err_SAVE_Click:
        MsgBox Err.Description
        Resume Exit_SAVE_Click
     
    End Sub

  4. #4
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    bonjoour tous le monde

    j'ai pu voir ton code c 'est un ptit peu complique comme vous utilisez beucoup de variable mais bon

    ma remarque ce seulement pour la date les requette sql utilise le format mm/dd/yyyy
    mois/jour/année

    et je pense qu'il vas te retourné par fois des resulta erroné

    bon chance

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par craesys Voir le message
    bonjoour tous le monde

    j'ai pu voir ton code c 'est un ptit peu complique comme vous utilisez beucoup de variable mais bon

    ma remarque ce seulement pour la date les requette sql utilise le format mm/dd/yyyy
    mois/jour/année

    et je pense qu'il vas te retourné par fois des resulta erroné

    bon chance
    Je voudrais bien te croire, mais je ne comprends vraiment pas pourquoi ça causerait problème ... Si tu pouvais m'éclairer ce serait sympa !
    Si je mets un masque sur la textbox ou doit etre rentré la date, aucun problème ne devrait apparaitre, si ?

    Merci pour ton aide.

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    salut baracuda

    je ne voulez pas dire le masque de la zone Text je parlai de quand vous voulez execution la requette SQL "entre les deux # "

    le bon code c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    VarDate = "#" & format(VoterTextBox,"mm/dd/yyyy") & "#"
    parsque le compilateur c'est un anglais est les anglais utilise le format mois/jour/année alors que le format francai c'est jour/mois/année

    sur access il les gères automatiquement mais dans vb6 quand tu veux crée ta requette tu dois lui mettre ce format

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par craesys Voir le message
    salut baracuda

    je ne voulez pas dire le masque de la zone Text je parlai de quand vous voulez execution la requette SQL "entre les deux # "

    le bon code c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    VarDate = "#" & format(VoterTextBox,"mm/dd/yyyy") & "#"
    parsque le compilateur c'est un anglais est les anglais utilise le format mois/jour/année alors que le format francai c'est jour/mois/année

    sur access il les gères automatiquement mais dans vb6 quand tu veux crée ta requette tu dois lui mettre ce format
    ET donc si je veux que ça reste sur le format anglais ( c'est le cas), je change rien?

    Merci pour ton aide.

  8. #8
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Oui vous ne changerai rien

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

Discussions similaires

  1. Problème méthode find
    Par tazmania dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/06/2007, 15h37
  2. méthode FIND EXCEL
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/01/2007, 18h06
  3. VBA-E Problème méthode .find
    Par popo68 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/01/2007, 10h14
  4. Méthode find sensible aux cellules fusionnées?
    Par spileo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/09/2006, 01h22
  5. Utilisation de la méthode FIND
    Par Jeannot45 dans le forum Access
    Réponses: 3
    Dernier message: 09/01/2006, 15h41

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