Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/07/2011, 20h44   #1
Invité régulier
 
Inscription : mai 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 14
Points : 9
Points : 9
Par défaut Requête avec critère date et heure

Bonjour,
je cherche une méthode pour filtrer les données d'une table via une requête avec un critère de date et heure (format mm/jj/aaaa hh:nn:ss) provenant d'un formulaire.
je pense que mon problème vient du fait de concaténer un champ date et un champ heure.
la solution pourrait être de filtrer sur la date et l'heure séparément, vu que dans ma table ces données sont indépendantes, mais la je sèche.
merci pour votre aide.
Ovr19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 21h14   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
Critère date :

DateSerial(Year([forms]![NomTonForm]![nomTonChamp]); Month([forms]![NomTonForm]![nomTonChamp]); Day([forms]![NomTonForm]![nomTonChamp]))

Critère heure :

TimeSerial(Hour([forms]![NomTonForm]![nomTonChamp]); Minute([forms]![NomTonForm]![nomTonChamp]); Second([forms]![NomTonForm]![nomTonChamp]))

Tu peux aussi regarder DatePart() mais, personnellement, je préfère DateSerial() et TimeSerial().

Note : Access va traduire le nom des fonctions en français.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 23h32   #3
Invité régulier
 
Inscription : mai 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 14
Points : 9
Points : 9
En fait, pour exposer un peu plus précisément mon problème, j'importe des données depuis un fichier "csv" dans une table temporaire. dans cette table tous les champs sont au format texte et le but de la manip est de filtrer les données les plus récentes de manière à les ajouter dans la table définitive sans importer de doublon. c'est la que ça se gâte, je n'arrive pas à sélectionner les dates et heures qui m'intéresse.
Ovr19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 14h11   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
Ok donc ma solution ne marchera pas car elle suppose que tu as des champs de type date.

Tu peux alors utliser la fonction Format() qui te permet de formater des dates.

Pour le critère date je mettrai par exemple si ta date dans ton fichier CSV est au format AAAA-MM-JJ :

Format([forms]![NomTonForm]![nomTonChamp],"aaaa\-mm\-jj")

et pour l'heure

Format([forms]![NomTonForm]![nomTonChamp],"hh:nn:ss")

Note que Mid(), Left(), Right() sont aussi très utiles pour manipuler des chaîens de caractères. Les fonction CDate(), CDbl(), Clng() et autres fonctions C... te permettent de convertir tes données de texte à autre chose.

A+

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 19h45   #5
Invité régulier
 
Inscription : mai 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 14
Points : 9
Points : 9
J'ai testé la requête sélection suivante:

Code sql :
1
2
3
SELECT tba_TmpAl.F1, tba_TmpAl.F2, tba_TmpAl.F3, CDate([F1]) AS Expr1
FROM tba_TmpAl
WHERE (((CDate([F1]))>[Formulaires]![frm_Start]![DMaxtbaTmp]));
ou F1 est une date au format texte, F2 l'heure au format texte, F3 un message et DMaxtbaTmp est la dernière date enregistrée dans ma table.
tba_TmpAl est la table temporaire dans laquelle j'ai importé mon fichier CSV.

A l'exécution de ma requête, j'ai le message d'erreur suivant:

Cette expression présente une syntaxe incorrecte, ou est trop complexe pour être évaluée. Par exemple, une expression numérique peut contenir des éléments trop compliqués. Essayez de la simplifier en en affectant des parties à des variables. (Erreur 3071)

Dès que j'utilise la fonction CDATE, j'ai ce message

Merci pour votre aide
Ovr19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 21h09   #6
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
Je t'ai suggéré d'utilser Format() sur ta date de paramêtre, ça donne quoi ?

Le problème de CDate c'est que tu ne peux pas spécifier le format de la date de départ donc c'est assez hazardeux.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 22h56   #7
Invité régulier
 
Inscription : mai 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 14
Points : 9
Points : 9
Cela n'a rien changé
le problème ne vient pas du critère mais du format du champ dans ma table qui est en texte
Dès que je le passe en Date/Heure, tout fonctionne bien sauf que lors de l'importation du fichier CSV la première ligne n'est pas prise en compte vu qu'elle est au format texte et qu'elle contient le nom de la table ou les données vont être ajoutées.

Je pense que la solution sera de lire la première ligne du CSV de manière à récupérer le nom de la table puis de procéder à l'importation des données et la mise à jour de la table.

Merci pour ton aide
@+
Ovr19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 00h09   #8
Invité régulier
 
Inscription : mai 2010
Messages : 14
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 14
Points : 9
Points : 9
Voici ma requête finalisée

Code :
1
2
3
SELECT tba_TmpAl.F1, tba_TmpAl.F2, tba_TmpAl.F3
FROM tba_TmpAl
WHERE (((Format([F1] & " " & [F2],"mm/dd/yyyy hh:nn:ss"))>Format([Formulaires]![frm_Start]![DMaxtbaTmp],"mm/dd/yyyy hh:nn:ss")));
La fonction Format m'a été très utile
Encore merci pour ton aide
Ovr19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h38.


 
 
 
 
Partenaires

Hébergement Web