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

Macros Access Discussion :

Trouver champ date dans Recordset [AC-365]


Sujet :

Macros Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Mars 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2002
    Messages : 34
    Points : 32
    Points
    32
    Par défaut Trouver champ date dans Recordset
    Bonjour,

    J'effectue une recherche dans un RecordSet pour vérifier si un enregistrement existe déjà avec la date choisie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    strSQL = "[ControleEntree].[ControleEntree_date] = #" & Format$(Me.ControleEntree_date, "mm/dd/yyyy") & "#"
    rst.FindFirst strSQL
    Certaines dates enregistrées ne sont pas trouvées par ce code. Je me suis rendu compte que les dates concernées sont enregistrées au format "23/12/2020 11:13:49" mais bien affichée "23/12/2020". Les dates pour lesquelles le code fonctionne sont enregistrées au format "23/12/2020" dans la table. (J'ai du modifier qqc peu de temps après la création de la base puisque seules les premiers enregistrements ont le format réduit)

    Je pourrais donc corriger le format du champ Date de la table pour qu'il soit enregistré sous "23/12/2020".
    Mais je préfèrerais faire en sorte que mon code fonctionne avec les deux types de formats. Comment faire au plus simple ?

    Si je me réfère aux infos de Microsoft :
    #2/2/2012# Returns only items with a date of Feb 2, 2012.
    Ce qui me paraît contradictoire avec ce que j'observe chez moi..

    Actuellement, le champ ControleEntree_Date a comme format "Date, réduit". De même pour le champ de saisie de la date dans le formulaire. Le format étendu "23/12/2020 11:13:49" apparaît dans le champ de saisie ou dans la table lorsque je clique sur le champ.

  2. #2
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut dates
    C'est le piège classique des dates à cause du format de l'oncle Sam.
    Je suggère de garder votre code en utilisant la partie entière des dates.
    au lieu :
    Utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int([Date1]) = int([Date2])

  3. #3
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    Je ne sais pourquoi, mais Int(Date) ne marche pas; il faut utiliser Int(CDbl(Date)).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "Int(CDbl([ControleEntree].[ControleEntree_date])) = " & Int(CDbl(Me.ControleEntree_date))
    Cordialement.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Mars 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2002
    Messages : 34
    Points : 32
    Points
    32
    Par défaut
    Merci pour vos réponses ! Le code Int(CDbl(...)) semble fonctionner.
    Je ne savais pas qu'on pouvait utiliser ce genre de fonction dans la syntaxe d'une requête SQL..

  5. #5
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    A noter que s'il s'agit de simplement vérifier qu'une date n'a pas déjà été utilisée, la fonction DCount() pourrait être utilisée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    strSQL = "Int(CDbl([ControleEntree].[ControleEntree_date])) = " & Int(CDbl(Me.ControleEntree_date))
    If DCount("*","NomSource",strSQL) > 0 Then
        '--- date déjà utilisée
    Else
        '--- date pas encore utilisée
    End If
    où NomSource est le nom de la table ou de la requête concernée.

    Cordialement.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Mars 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2002
    Messages : 34
    Points : 32
    Points
    32
    Par défaut
    Merci EricDgn pour cette précision.
    Je suppose que ceci fonctionne aussi si strSQL inclut des conditions sur plusieurs champs différents (ce qui est mon cas en réalité) ? C'est peut-être plus simple effectivement. Quoiqu'en terme de lignes de code, la solution FindFirst me va bien aussi.

  7. #7
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Oui, cela fonctionne aussi si les conditions sont multiples et sur plusieurs champs.
    Cordialement.

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

Discussions similaires

  1. Formater un champ date dans un DBGrid
    Par sybermad dans le forum Bases de données
    Réponses: 26
    Dernier message: 05/04/2007, 17h24
  2. controle sur un champ date dans un formulaire
    Par fraizas dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/03/2007, 13h17
  3. Réponses: 7
    Dernier message: 11/03/2007, 22h49
  4. formater un champ date dans un select
    Par sbeu dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/04/2006, 16h44
  5. problème champ date dans base oracle
    Par ludovik dans le forum Oracle
    Réponses: 6
    Dernier message: 25/07/2005, 15h48

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