Utiliser qu'une partie d'une date dans une requête SQL [Résolu]

Signaler
Messages postés
27
Date d'inscription
vendredi 27 octobre 2006
Statut
Membre
Dernière intervention
7 mars 2008
-
Messages postés
27
Date d'inscription
vendredi 27 octobre 2006
Statut
Membre
Dernière intervention
7 mars 2008
-
Bonjours à tous,


 


J'ai un petit problème et j'espère que vous allez pouvoir m'aider. Pour commencer je vais vous expliquer le sujet. Je dois faire un programme de gestion des absences et quand j'enregistre une absence, je saisi la date de début de l'absence et la date de fin. Mon problème se situ au moment de la visualisation des absences mensuelles (afficher toutes les absences du mois) et les absences annuelles (afficher toutes les absences de l'année). Pour cela, je saisis biensur avant, dans deux textbox différentes, le mois et l'année pour les recherches mensuelles et l'année pour les recherches annuelles. Donc pour cela, dans ma requête, je dois séparer chaque partie de ma date pour n'utiliser que le mois ou l'année pour les comparer avec l'année et le mois saisis dans mes textbox. Avant d'écrire ce message sur le forum, j'ai essayé avec : Year (ma date) = '" & datebox.text & "' et Month pour le mois,  mais cela ne marche pas.

Pour finir je voulais savoir si c'était possible d'afficher les absences hebdomadaire et si oui, comment.

Merci d'avance et j'espère avoir était clair dans mon énonciation.

Vicelow5901.

10 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
99
Pourtant ta requête me semble correcte ! Es-tu sûr que tu n'as pas un problème dans le nom d'un champs de ta requête ?
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
99
Nicko11 : en effet, tu peux agrémenter ta clause WHERE avec des appels de fonctions SQL, c'est pas un soucis ;)

Pour vicelow5901 : regarde tu côté de la fonction Format. Il me semble que ca donne :
Pour une recherche sur numéro de semaine :
Format("ww", tonChamp) = NumeroDeSemaine
Pour une recherche sur le jour :
Format("dddd", tonChamp) = NomDuJour
ex :
Format("dddd", tonChamp) = 'lundi'
Messages postés
27
Date d'inscription
vendredi 27 octobre 2006
Statut
Membre
Dernière intervention
7 mars 2008

Pour etre plus précis et pour etre corrigé, voila ma requête :

Private Sub BTrechercher_Click()


Dim sql As String
Set Rcd = New ADODB.Recordset


If mensuelle.Value = Checked Then


    ' Préparation de la requête
    sql = "Select * From absence where Month(dat_debut) >= " & Text1.Text & " and Year(dat_debut) = " & Text2.Text & " and Month(dat_fin) <= " & Text1.Text & " and Year(dat_fin) = " & Text2.Text & " Order by nom_salarie ;"


    ' Connexion à la base de données
    cnx.CursorLocation = adUseClient
    Rcd.CursorLocation = adUseClient


    ' Exécution de la requête
    Rcd.Open sql, cnx


    ' Affichage dans le datagrid
    Set DataGrid1.DataSource = Rcd
    DataGrid1.Refresh
   
    ElseIf annuelle.Value = Checked Then
   
        ' Préparation de la requête        sql "Select * From absence where Year(dat_debut) " & Text2.Text & " and Year(dat_fin) = " & Text2.Text & " Order by nom_salarie ;"


        ' Connexion à la base de données
        cnx.CursorLocation = adUseClient
        Rcd.CursorLocation = adUseClient


        ' Exécution de la requête
        Rcd.Open sql, cnx


        ' Affichage dans le datagrid
        Set DataGrid1.DataSource = Rcd
        DataGrid1.Refresh
       
End If


End Sub
Messages postés
27
Date d'inscription
vendredi 27 octobre 2006
Statut
Membre
Dernière intervention
7 mars 2008

Je me suis trompé dans ma requête, même si sa n'a rien changé, j'ai toujours un bug, pour dat_debut c'est <= et non pas >= et vice versa pour la dat_fin.
Messages postés
27
Date d'inscription
vendredi 27 octobre 2006
Statut
Membre
Dernière intervention
7 mars 2008

Voici l'erreur qu'il m'affiche :


 


"Aucune valeur donnée pour un ou plusieurs des paramètres requis"


 


et quand je debug il me surligne :


 


Rcd.open sql, cnx
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
Salut,

je suis pas sur mais dans une clause Where, tu dois forcement faire reference a un des champs de ta table.
Or Ici, Year(dat_debut) est une fonction et pas un champ.
"Select * From absence where Absence_date_debut " & Text2.Text & " and Absence_date_Fin " & Text2.Text & " Order by nom_salarie ;"

Absence_date_debut et Absence_date_Fin sont les champs de ta table.
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
Salut, Darksidious,

tu veux dire que l'on peut faire ca,

where Year(dat_debut) = ...........

Parce que je croyais qu'on ne pouvait mettre que le nom d'un champ dans cette clause.
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
vicelow5901, essaies ca aussi,

Rcd.open sql, cnx, adOpenDynamic, adLockOptimistic
Messages postés
27
Date d'inscription
vendredi 27 octobre 2006
Statut
Membre
Dernière intervention
7 mars 2008

Pour répondre à nicko11
, le Year et le month servent à sélectionner que l'année ou le mois de mon champs date_debut ou date_fin (d'ailleur faut-il vraiment utilisé cela) et pour répondre à darksidious
, elle est vraiment bonne ma requête, je viens de vérifier et c'est bien un des champs qui était mal saisi mais je ne l'ai pas remarqué tout de suite car j'était certain que mes champs était bon, c'est un amis qui me la fait remarqué. Comme quoi il faut toujours vérifier les évidences en informatique! ;-)

Par contre, peut etre que vous pouvez m'aider encore une fois, je ne sait pas faire une recherche hebdomadair :-s.
Messages postés
27
Date d'inscription
vendredi 27 octobre 2006
Statut
Membre
Dernière intervention
7 mars 2008

Merci pour tout, mes problèmes ont tous étaient résolu.

A bientot peut etre