2009-09-10 8 views
1

Nous essayons de faire une requête qui a l'utilisateur entrer une date et la requête tire tous les enregistrements en fonction de cette date. Dans la vue de conception de la requête, nous avons essayé [Entrer la date] dans les critères, mais il ne sera pas tiré car il correspondra à la date mais pas à l'heure. J'ai vu beaucoup de dates formatées avec des marques ## pour ignorer le temps mais je ne sais pas comment incorporer cela dans notre requête. Editer: Oui, nous utilisons l'accès par défaut à un champ date/heure.MS Access sélection des enregistrements avec une variable

Nous sommes impatients et nous allons juste faire une gamme obligeant l'utilisateur à entrer deux dates. Honnêtement, il prend soin de deux problèmes, mais c'était un problème frustrant avec Access.

+0

Désolé ma solution n'a pas fonctionné. Il existe toujours une méthode pour le faire fonctionner avec une seule entrée utilisateur. Gte la date à travers une boîte d'entrée et l'ajouter à la volée à votre instruction SELECT avant d'interroger vos données. Vous pouvez le faire avec le jeu d'enregistrements ou l'objet de requête. –

Répondre

2

Vous avez donc des horodatages dans la base de données que vous souhaitez interroger par une date unique?

Il y a deux façons de le faire:

1) Désape la partie du temps sur le champ de base de données

SELECT * 
    FROM Table 
WHERE DateValue([DateField]) = [Enter Date] 

qui est pas très bonne performance sage, mais ok pour les petites tables

2) vous ajoutez des temps à votre date d'entrée et utilisez Entre ce qui est la meilleure sage de la performance

SELECT * 
    FROM table 
WHERE [DateField] BETWEEN [Enter Date] AND [Enter Date] + #23:59:59# 
+0

thx - mis à jour –

+0

Merci, il n'a malheureusement pas retourné d'enregistrements – Terry

+0

@DJ: Avez-vous considéré que la valeur de [Date d'entrée] peut également avoir un élément d'heure qui n'est pas minuit? Je pense que vous devriez arrondir la valeur de [Enter Date] à minuit avant d'ajouter # 23: 59: 59 #. – onedaywhen

2

Je suppose que vos données ont été essentiellement saisies dans un format dateTime. Dans ce cas, vous devriez construire votre requête sur datevalue (myDateField) au lieu de la construire sur myDateField. Votre requête ressemblera alors que (dans la fenêtre SQL)

SELECT * From MyTable WHERE dateValue(myDateField) = [enter date here] 

au lieu de

SELECT * From MyTable WHERE myDateField = [enter date here] 
+0

Merci, malheureusement, il n'a renvoyé aucun enregistrement – Terry

2

J'ajuste la suggestion de DJ à propos BETWEEN, parce que je confiance jamais tout à fait que cela fonctionne comme je Je l'aime bien (la raison pour laquelle j'ajoute 1 seconde de moins qu'un jour pour la deuxième valeur est parce que la deuxième valeur est incluse dans la plage BETWEEN, ce qui m'a toujours semblé contre-intuitif).

Quoi qu'il en soit, ma suggestion:

Il est pas si différent, mais il évite le problème d'ajouter le montant droit au deuxième argument de BETWEEN. Je me méfie toujours d'essayer de faire des opérations mathématiques de date/heure sans utiliser DateAdd() ou DateDiff().

La définition du paramètre est également une bonne idée, car si un utilisateur met une date invalide, il obtiendra un message d'erreur utile, au lieu de juste les mauvais résultats.

Questions connexes