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.NET Discussion :

Requete sur une partie de Date


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Requete sur une partie de Date
    Bonjour,
    Je reoncontre le problème suivant :
    Sous Vb2019 (community) avec une base access, je souhaite extraire des enregistrements concernant le jour et le mois. (Ex je veux savoir ce qu'il s'est passé le 15/04 de chaque année)
    Dans ma base access, la date est au format date/heure abrégée ex 01/01/2023.
    Auriez vous un ou des pistes à m'indiquer ?
    J'ai tenté, après des recherches sur le net, cette requête la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Req = "Select bio_date, bio_info, cat_nom from categories, biographie where biographie.cat_num=categories.cat_num And " _
    & " (((Format(Bio_Date,"ddmm"))=Format("TextJourMois.text","ddmm"))) order by bio_date asc"
    Mais j'ai une erreur de syntaxe que je ne parviens pas à solutionner.
    Merci par avance de vos réponses.
    Thierry

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 123
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 123
    Points : 1 630
    Points
    1 630
    Par défaut
    compte les parenthèses au niveau de tes Formatages de date

  3. #3
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Comme l'indique Umfred, il y a effectivement un problème de parenthèses. Mais je pense qu'il y a aussi un défaut dans la concaténation ... Format("TextJourMois.text","ddmm"))).

    Ne devrait-elle pas être quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...   =Format('" & TextJourMois.text & "', 'ddmm')))
    J'ai pas testé, mais sûr, ta concaténation n'est pas correcte.

    ...

  4. #4
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Bonjour,
    Je pense que ta requête devrait ressembler à ça !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Req = $"Select bio_date, bio_info, cat_nom from categories, biographie where biographie.cat_num=categories.cat_num And 
    Format(Bio_Date,'ddmm')='{TextJourMois.text.tostring("ddmm")}' order by bio_date asc"
    Personnellement je préfère exécuter une command avec paramètres !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,
    Je pense ..
    Bonjour Merci de ta réponse, mais à l'exécution j'ai toujours une erreur de syntaxe (Erreur de syntaxe (opérateur absent) dans l'expression «*biographie.cat_num=categories.cat_num And Format(Bio_Date,'ddmm')='{TextJourMois.Text.ToString('ddmm')}'*».')
    Si je laisse les " pour le format de date ("ddmm") j'ai une erreur "fin d'instruction attendue"..... voila pourquoi j'ai modifie le " en '. mais ca ne fonctionne pas non plus.

  6. #6
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Le crois correcte la proposition de Thumb down mais puisqu'un problème subiste, je te propose d'essayer ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Req = "Select bio_date, bio_info, cat_nom from categories, biographie where biographie.cat_num=categories.cat_num And " _
    & " Format(Bio_Date,'ddmm')='" & TextJourMois.text.ToString("ddmm") & "' order by bio_date asc"
    J'essaie de tenir compte de :
    • Les chaines dans SQL sont entre apostrophes,
    • Les chaines dans VB sont entre guillemets,
    • Eviter les parenthèses inutiles (sauf si utiles à la lecture mais attention : autant de fermées que d'ouvertes).



    J'espère que ça aidera ...

  7. #7
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Bonjour,
    Je t'invites à écrire t'a requête dans l'éditeur graphique d'Access puis de passer l'affichage en mode SQL. Tu pourras copier coller le texte de ta requête et ainsi on pourra t'aider à formater ton code.

    Dans ta requête n'oublie pas de remplacer TextJourMois.text.ToString("ddmm") par une valeur valide!

  8. #8
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Attention, outre la syntaxe à mettre au point pour faire fonctionner la requête, il faut regarder le format de la date.
    Le mm est utilisé pour désigner les minutes.
    Pour le mois, c'est MMMM pour le mois en lettres, MMM pour le mois en lettre mais abrégé, MM pour le mois en 2 chiffres avec zéro non significatif, %M pour le mois en chiffres sans zéro non significatif, et M seul qui serait (à vérifier) le jour suivit du mois en lettres, par exemple aujourd'hui 1 mars.

    Le format ddmm correspondrait à cet instant où je tape ce message : 0134 (1er du mois, à 34 minutes).

    ...

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 123
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 123
    Points : 1 630
    Points
    1 630
    Par défaut
    c'est nn pour les minutes en Access, donc dans la requête SQL on peut mm pour indiquer les minutes à fonction SQL Format. en revanche, pour la fonction Format (ou ToString ici) de VB.Net, il faut bien faire la différence en MM pour le mois et mm pour les minutes (SQL est insensible à la casse)

  10. #10
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    tu implémente ta requête dans l'éditeur de requête en mode graphique
    Nom : Sans titre.png
Affichages : 100
Taille : 247,4 Ko
    puis tu Bascule en mode SQL
    Nom : Sans titre.png
Affichages : 100
Taille : 225,5 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Req $"SELECT bio_date, bio_info, cat_nom
    FROM categories INNER JOIN biographie ON categories.cat_num = biographie.cat_num
    WHERE Format([bio_date],'ddmm')='{Convert.ToDateTime(TextJourMois.Text).ToString("ddMM")}'
    ORDER BY bio_date;"

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    tu implémente ta requête dans l'éditeur de requête en mode graphique ....
    Eh bien Bravo et merci cela fonctionne parfaitement.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Suite répone Thumb down
    Je reprends la suite de mon fil, pour une suite de ce problème.
    La solution proposé par thumb down fonctionne parfaitement pour une requête directement sur la base.
    En revanche quand je fais la même requête mais pour alimenter un état, cela me génère une erreur de syntaxe (operateur attendu)....
    Voici mon code : D'abord le Where pour affiner la requete sur l'état, ensuite l'appel de la fonction d'ouverture de l'état
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ClauseWhere = " Where Format([anec_date],'ddmm')='{Convert.ToDateTime(DateReq).ToString("ddMM")}'"
            OLEOpenReport_PLAN(strDB, RptNom, AcView.acViewPreview,, ClauseWhere)
    Pour rappel la requête de thumb down
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Req = $"select anec_info, anec_date, anec_categories from tmp_anecdote WHERE Format([anec_date],'ddmm')='{Convert.ToDateTime(DateReq).ToString("ddMM")}' ORDER BY anec_Date ASC"
    Je suis preneur de vos suggestions.
    Par avance merci.
    Thierry

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 123
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 123
    Points : 1 630
    Points
    1 630
    Par défaut
    le $ au début de la chaine de Thumbdown indique une chaine formatée (interpolée), ce $ est absent de ta chaine, donc pour concaténer plusieurs chaines il te faut utiliser un opérateur de concaténation

  14. #14
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Bonsoir,
    ClauseWhere = $" Where Format([anec_date],'ddmm')='{Convert.ToDateTime(DateReq).ToString("ddMM")}'"

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonsoir,
    ClauseWhere = $" Where Format([anec_date],'ddmm')='{Convert.ToDateTime(DateReq).ToString("ddMM")}'"
    Bonjour,
    Merci de votre aide, malheureusement ca coince encore.
    Voila le contenu de la clauseWhere (en debogage)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    " WHERE Format([anec_date],'ddmm')='1604' ORDER BY anec_Date ASC"
    Du coup Access crie parce qu'il ne reconnait pas le 1604.... Je vais regarder si il est possible d'injecter par le code la totalité de la requête vers l'etat access. Parce qu'avec votre requête, je récupère bien les données voulues.
    A moins que vous n'ayez une autre idee.
    Cdt
    Thierry

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 123
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 123
    Points : 1 630
    Points
    1 630
    Par défaut
    Tu es sûr que c'est cette partie qu'il n'aime pas ? la requête entière donne quoi ? comme tu évoques "alimenter un état", j'entends une requête de type INSERT ou UPDATE et dans ce cas-là, ça doit crier sur le ORDER BY.
    Sinon, il faut que anec_Date soit parmi les colonnes sélectionnées

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Requete Complete
    Voila la Requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Req = $"select anec_info, anec_date, anec_categories from tmp_anecdote WHERE Format([anec_date],'ddmm')='{Convert.ToDateTime(DateReq).ToString("ddMM")}' ORDER BY anec_Date ASC"
    Voici le message d'erreur Access
    Nom : Sans titre.jpg
Affichages : 52
Taille : 51,6 Ko
    Quand je dis "alimenter" un etat c'est un simple select que je fais. La clause where servant à filtrer sur une date. C'est le principe de l'anniversaire : Je veux savoir quels sont les Gens nés le 15/01 par exemple. La requête de l'état c'est la même sans la clause where. le programme envoie la clause....

  18. #18
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 123
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 123
    Points : 1 630
    Points
    1 630
    Par défaut
    Ta colonne anec_date est bien de type date ?
    si tu retires la clause WHERE, comment se présente cette colonne dans les résultats ?
    (peut-être utiliser LIKE au lieu du = ? )

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par umfred Voir le message
    Ta colonne anec_date est bien de type date ?
    si tu retires la clause WHERE, comment se présente cette colonne dans les résultats ?
    (peut-être utiliser LIKE au lieu du = ? )
    Oui anec_date est bien au format date. Voici le contenu de la table. Je te precise que c'est une table temporaire (Ce qui explique la redondance d'information pour la categorie...)
    Nom : Sans titre.jpg
Affichages : 48
Taille : 104,3 Ko
    Et voici le contenu de l'etat sans la clause where
    Nom : Sans titre1.jpg
Affichages : 48
Taille : 140,8 Ko

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Solution Trouvée
    Je m'auto réponds ....
    J'ai trouvé une solution qui me convient. La requête sur la table fonctionnant je fais une boucle de X éditions. J'exécute la requête, j'envoie les résultats vers la table temporaire, et j'appelle mon état Access, ensuite vidage de la table temporaire et je recommence.

    Merci de vos réponses en tout cas.
    Thierry

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] requete SQL sur une partie d'un date
    Par stefano dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/09/2012, 13h40
  2. Requete sur une partie d'une chaine
    Par jmarey dans le forum Requêtes
    Réponses: 4
    Dernier message: 30/06/2009, 09h32
  3. [MySQL] requete sur une liste de date
    Par Revan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/05/2008, 19h49
  4. [Oracle 9] Requête sur une différence entre dates
    Par claralavraie dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/09/2006, 17h42
  5. Problème de contrainte sur une partie de date (l'année)
    Par shefla dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 11/04/2006, 21h50

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