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

VBA Access Discussion :

Probleme Recordset + NoMatch [AC-2007]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Points : 36
    Points
    36
    Par défaut Probleme Recordset + NoMatch
    bonjour à tous,

    mon objectif :

    faire un compteur d'utilisation ; dans le principe, lorsqu'on lance l'appli pour la première fois , ajouter , dans une table, la date du jour et un à compteur 1, si on lance à nouveau l'appli dans la même journée je veux passer ce compteur à 2, etc .... et le lendemain créer une nouvelle ligne avec la date du jour avec un compteur à 1, et ainsi de suite :

    Mon code actuel qui ne fonctionne pas, bien évidement :

    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
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Dim StrJour As Date
     
        Set db = CurrentDb()
        Set rst = db.OpenRecordset("T_Date", dbOpenDynaset)
     
        StrJour = Date
     
        rst.FindFirst "[suivi JPM date] =" & StrJour 'recherche dans la table si la date du jour est déjà présente
        If rst.NoMatch Then              'si je ne trouve pas de date dans la table égale à la date du jour alors je créé une nouvelle ligne avec date du jour + compteur = 1
            rst.AddNew
            rst("suivi JPM nb") = 1
            rst("suivi JPM date") = StrJour
            Else                                'si je trouve une date dans la table égale à la date du jour , j'incrémente le compteur de 1
                rst.Edit
                rst("suivi JPM nb") = "suivi JPM nb" + 1
                rst.Update
        End If

    je découvre l'utilisation des RecordSet et j'avoue que je rame un peu

    Merci d'avance.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Re-,

    J'allais continuer dans l'autre sujet mais comme tu en as ouvert un autre.
    L'utilisation des dates comme paramètre est particulière :
    - Il faut les mettre entre croisillons "#".
    - Ne pas oublier de les mettre sous format US en VBA.
    Donc le Findfirst devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     rst.FindFirst "[suivi JPM date] =#" & Format(StrJour, "mm/dd/yyyy") & "#"
    Et tu as oublié un rst.UpDate après avoir appliqué le rst.AddNew.
    Ce qui donnerait :

    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
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Dim StrJour As Date
          Set db = CurrentDb()
        Set rst = db.OpenRecordset("T_Date", dbOpenDynaset)
     
        StrJour = Date
     
        rst.FindFirst "[suivi JPM date] =#" & Format(StrJour, "mm/dd/yyyy") & "#" 'recherche dans la table si la date du jour est déjà présente
        'Debug.Print "[suivi JPM date]=#" & Format(StrJour, "mm/dd/yyyy") & "#"
        'MsgBox "Date : " & rst("[suivi JPM date]")
        If rst.NoMatch Then              'si je ne trouve pas de date dans la table égale à la date du jour alors je créé une nouvelle ligne avec date du jour + compteur = 1
                rst.AddNew
                rst("suivi JPM nb") = 1
                rst("suivi JPM date") = StrJour
                rst.Update
            Else                                'si je trouve une date dans la table égale à la date du jour , j'incrémente le compteur de 1
                rst.Edit
                rst("suivi JPM nb") = [suivi JPM nb] + 1
                rst.Update
        End If
    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour, tu peux y arriver plus simplement :

    En définissant ta table ainsi :




    et en exécutant ces 2 requêtes à l'ouverture de la BdD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO T_date ( [Suivi JPM date] )
    SELECT Date() AS Expr1;
    N.B. Elle sera sans effet dès la 2e exécution.
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE T_date SET T_date.[Suivi JPM nb] = [Suivi JPM nb]+1
    WHERE (((T_date.[Suivi JPM date])=Date()));


    Edit : Bonjour Mandresy. Tu as posté pendant que rédigeais.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour Claude,

    En fait le titre est très vague par rapport à ses besoins. Il a un problème dans l'utilisation d'une expression de critère avec Date dans un FindFirst (ça ne lui donne rien).
    Mais ta proposition lui permettra de découvrir un autre moyen d'utiliser le SQL pour une mise à jour ou rajout.

    La balle est dans le camp d'Alex_42.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Points : 36
    Points
    36
    Par défaut
    Merci à vous , et surtout à Madefemere
    ca marche enfin avec les recordset et franchement le seule différence et le format de date dont tu parles.
    j'aurais pu chercher longtemps ....

    Merci encore !

    A++

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

Discussions similaires

  1. Toujours un probleme avec data_personne.Recordset.NoMatch
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 03/12/2007, 07h23
  2. probleme avec data_personne.Recordset.NoMatch
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 02/12/2007, 15h25
  3. Vb6 Ado Access : Probleme Recordset
    Par visualnotbasic dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 27/02/2007, 19h34
  4. probleme Recordset ?
    Par jessy212 dans le forum Access
    Réponses: 5
    Dernier message: 25/08/2006, 10h54
  5. Réponses: 8
    Dernier message: 09/08/2005, 10h27

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