[Requete SQL] requete sql entr des dates/heur

Fermé
ZOUZOU - 6 déc. 2006 à 10:53
 ZOUZOU - 7 déc. 2006 à 11:35
bonjour,
je programme en vba sous access.
Je dispose d'une table nommée TOUT avec des champs DATEAPPEL et HEUREAPPEL.
Je souhaite generér une requete qui selectionne toutes les fiches d'appels ,par ex ,comprise entre le 04/09 09:00 et le 05/09 12:00.
Mon souci c'est que je dispose de 2 champs separés DATE et HEURE.

Voici ma requete

req1 = "SELECT TOUT.MARCHE, TOUT.CODEMARCHE, TOUT.TELEACT, TOUT.DATEAPPEL, TOUT.RESULTAT "
req1 = req1 + " INTO [STATS CC]FROM TOUT "
req1 = req1 + " WHERE (((TOUT.DATEAPPEL) between DATEDEBUT AND DATEFIN) "
req1 = req1 + " AND ((TOUT.HEUREAPPEL)between HEUREDEBUT AND HEUREFIN)"
req1 = req1 + " AND RESULTAT<>'RAPPEL' AND RESULTAT<>'NRP' AND RESULTAT<>'STOPC' "
req1 = req1 + " AND RESULTAT<>'STOPCA'AND RESULTAT<>'');"
'**
DoCmd.RunSQL (req1)

Elle fonctionne mais elle me prend que les appels du 04/09 de 09h à 12h et du 05/09 de 09h a 12h.
Ce qu'il me faut c'est c'est les appels du 04/09 09h au 05/09 12h
Merci pour votre aide

3 réponses

blux Messages postés 26546 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 décembre 2024 3 319
6 déc. 2006 à 11:18
Salut,

il faut mettre des parenthèses et enlever le between, ça doit donner un truc comme ça :
WHERE ((DATEAPPEL > DATEDEBUT AND HEUREAPPEL > HEURE DEBUT) AND (DATEAPPEL < DATEFIN AND HEUREAPPEL > HEUREFIN))
0
J'ai executer comme tu me l'as dit mais CA NE FONCTIONNE TOUJOURS PAS
AS-TU UNE AUTRE SOLUTION ????

req1 = "SELECT TOUT.MARCHE, TOUT.CODEMARCHE, TOUT.TELEACT, TOUT.DATEAPPEL, TOUT.RESULTAT "
req1 = req1 + " INTO [STATS CC]FROM TOUT "
req1 = req1 + " WHERE ((((TOUT.DATEAPPEL)>=DATEDEBUT AND (TOUT.HEUREAPPEL)>=HEUREDEBUT )"
req1 = req1 + " AND ((TOUT.DATEAPPEL)<=DATEFIN AND(TOUT.HEUREAPPEL)<= HEUREFIN))"
req1 = req1 + " AND RESULTAT<>'RAPPEL' AND RESULTAT<>'NRP' AND RESULTAT<>'STOPC' "
req1 = req1 + " AND RESULTAT<>'STOPCA'AND RESULTAT<>'');"
0
blux Messages postés 26546 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 décembre 2024 3 319
6 déc. 2006 à 12:35
Ca ne marche pas : tu as les même résultats qu'avant ou pas les résultats attendus ?

Tes champs DATEAPPEL et HEUREAPPEL sont déclarés comment ?
Ont-ils le même format que DATEDEBUT HEUREDEBUT DATEFIN HEUREFIN ?
0
J'ai les mêmes resultats qu'avant.
Mes champs DATEAPPEL et HEUREAPPEL (dans ma table TOUT) sont de type date et je les redeclare une deuxieme fois au cas ou.



Private Sub AJOUT_Click()

Dim DATEDEBUT As Date
Dim DATEFIN As Date
Dim HEUREDEBUT As Date
Dim HEUREFIN As Date

Set db = CurrentDb()

DATEDEBUT = Me.DATEDEBUT.Value
DATEFIN = Me.DATEFIN.Value
HEUREDEBUT = Left(Me.HEUREDEBUT.Value, 5)
HEUREFIN = Left(Me.HEUREFIN.Value, 5)

DoCmd.SetWarnings False

'REQUETE tri DATE ET CA+CNA
req1 = "SELECT TOUT.MARCHE, TOUT.CODEMARCHE, TOUT.TELEACT, TOUT.DATEAPPEL, TOUT.RESULTAT "
req1 = req1 + " INTO [STATS CC]FROM TOUT "
req1 = req1 + " WHERE ((((TOUT.DATEAPPEL)>=DATEDEBUT AND (TOUT.HEUREAPPEL)>=HEUREDEBUT )"
req1 = req1 + " AND ((TOUT.DATEAPPEL)<=DATEFIN AND(TOUT.HEUREAPPEL)<= HEUREFIN))"
req1 = req1 + " AND RESULTAT<>'RAPPEL' AND RESULTAT<>'NRP' AND RESULTAT<>'STOPC' "
req1 = req1 + " AND RESULTAT<>'STOPCA'AND RESULTAT<>'');"
0
blux Messages postés 26546 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 décembre 2024 3 319
6 déc. 2006 à 14:33
Je ne sais pas ce que peut donner un champ date auquel tu gardes les 5 premiers caractères...

Comment fais-tu pour les déclarer une deuxième fois en date ?

Peut-être que tu devrais changer le format d'affichage des champs HEURE dans la description de la table pour que les tests soient faits sur des données "identiques"...
0
On saisi dans un formulaire les heures de debut et fin mais quand je recupere ma valeur ca me donne 09:00:00 en fait ca compte les secondes, c'est pour ca que je prend que les 5 premiers chiffres.
Et dans ma table le champ heureappel est defini en date (car sur access on peur choisir que le format date/heure) et il est note ainsi 09:00.
quand j'execute ma requete je peux donc avoir les mêmes données a comparer 09:00 >=09:00 et non 09:00 >= 09:00:00

La requete fonctionne mais ca me prend par ex que les fiches du 04/09 de 09:00 à 12:00 et du 05/09 de 09:00 a 12:00 au lieu du 04/09 09:00 au 05/09 12:00.

A l'aide svp...

extrait code

Dim HEUREDEBUT As Date
Dim HEUREFIN As Date


Set db = CurrentDb()

DATEDEBUT = Me.DATEDEBUT.Value
DATEFIN = Me.DATEFIN.Value
HEUREDEBUT = Left(Me.HEUREDEBUT.Value, 5)
HEUREFIN = Left(Me.HEUREFIN.Value, 5)


DoCmd.SetWarnings False

req1 = "SELECT TOUT.MARCHE, TOUT.TYPE_MARCHE, TOUT.CODEMARCHE, TOUT.TELEACT, TOUT.DATEAPPEL, TOUT.RESULTAT "
req1 = req1 + " INTO [STATS CC]FROM TOUT "
req1 = req1 + " WHERE ((((TOUT.DATEAPPEL)>=DATEDEBUT AND (TOUT.HEUREAPPEL)>=HEUREDEBUT )"
req1 = req1 + " AND ((TOUT.DATEAPPEL)<=DATEFIN AND(TOUT.HEUREAPPEL)<= HEUREFIN))"
req1 = req1 + " AND RESULTAT<>'RAPPEL' AND RESULTAT<>'NRP' AND RESULTAT<>'STOPC' "
req1 = req1 + " AND RESULTAT<>'STOPCA'AND RESULTAT<>'');"
0
blux Messages postés 26546 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 décembre 2024 3 319
6 déc. 2006 à 15:13
T'as essayé de mettre des #, c'est le séparateur officiel des champs de type date/heure ?
0
zouzou > blux Messages postés 26546 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 décembre 2024
6 déc. 2006 à 15:16
non ca ne marche pas avec les #
je pense pas que ce soit une histoire de format car je reussi quand meme a avoir des enregistrements.
Je pense que c'est la tournure de ma requete et je n'arrive pas a trouver comment la modifier
0
blux Messages postés 26546 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 décembre 2024 3 319 > blux Messages postés 26546 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 décembre 2024
7 déc. 2006 à 11:21
Pourtant elle ne me choque pas, je sèche...
0
ZOUZOU > blux Messages postés 26546 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 décembre 2024
7 déc. 2006 à 11:33
Moi aussi je seche.
je me demande pas si c'est une histoire de OR
WHERE ((((TOUT.DATEAPPEL)>=DATEDEBUT AND (TOUT.HEUREAPPEL)>=HEUREDEBUT ) OR ((TOUT.DATEAPPEL)<=DATEFIN AND(TOUT.HEUREAPPEL)<= HEUREFIN))

Mais ca marche pas aussi

ce qu'il faudrait c'est
WHERE ((((TOUT.DATEAPPEL)>=DATEDEBUT AND (TOUT.HEUREAPPEL)>=HEUREDEBUT ) BETWEEN ((TOUT.DATEAPPEL)<=DATEFIN AND(TOUT.HEUREAPPEL)<= HEUREFIN))

le probleme c'est que le between est utilisable entre deux champs
0