Rechercher : dans
Par :

[Requete SQL] requete sql entr des dates/heur

Dernière réponse le 7 déc 2006 à 11:35:25 ZOUZOU, le 6 déc 2006 à 10:53:06 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [Requete SQL] requete sql entr des dates/heur » dans :
SQL - éviter les doublons dans un SELECT VoirProblème Comment éviter les doublons dans les résultats d'une requête SQL ? Solution Il suffit d'utiliser la clause DISTINCT entre SELECT et les champs. Exemple : SELECT distinct id,nom,prenom FROM matable Plus d'informations ...
Exécution de requêtes avec JDBC VoirExécution d'une requête SQL Pour exécuter une requête SQL, il s'agit dans un premier temps de créer un objet Statement, pouvant être obtenu à partir de l'objet Connection. Un objet ResultSet permettra de récupérer les données en provenance de...

1

blux, le 6 déc 2006 à 11:18:35

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))
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

2

zouzou, le 6 déc 2006 à 12:04:29

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<>'');"

Répondre à zouzou

3

blux, le 6 déc 2006 à 12:35:25

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 ?
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

4

zouzou, le 6 déc 2006 à 14:12:52

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<>'');"

Répondre à zouzou

5

blux, le 6 déc 2006 à 14:33:49

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"...
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

6

zouzou, le 6 déc 2006 à 15:10:54

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<>'');"

Répondre à zouzou

7

blux, le 6 déc 2006 à 15:13:22

T'as essayé de mettre des #, c'est le séparateur officiel des champs de type date/heure ?
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

8

zouzou, le 6 déc 2006 à 15:16:47

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

Répondre à zouzou

9

blux, le 7 déc 2006 à 11:21:08

Pourtant elle ne me choque pas, je sèche...
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

10

ZOUZOU, le 7 déc 2006 à 11:33:59

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

Répondre à ZOUZOU

11

 ZOUZOU, le 7 déc 2006 à 11:35:25

J'ai posté une autre question le 07/12 mais personne a repondu est-ce que tu peux jeter aussi un coup d'oeil

Répondre à ZOUZOU