Avatar billede omn Mester
08. marts 2013 - 16:48 Der er 15 kommentarer og
1 løsning

Dato formattering

"Dato" er et felt af typen ShortDate i en tabel.
"Start" og "Slut" er indtastede datoer i min formular.
Jeg fremsøger alle poster der ligger indenfor søgekriteriet og det virker (næsten).
Hvis start og slut dato er enslydende fremsøges der intet.
Hvis der er en(1) dags difference så vises de poster der matcher start, men ikke de der matcher Slut.
Hvis jeg eksempelvis vil fremsøge poster med dato den 28.02.2013, så kan jeg kun få dem frem på denne måde:

Start = 28-02-2013
Slut =  01-03-2013

Sådan ser min select ud:
s1 = "((dato>=#" & Format(Start.Value, "mm-dd-yyyy") & "#" & " AND dato<=#" & Format(Slut.Value, "mm-dd-yyyy") & "#))"

Hvad gør jeg forkert ?
Vh. Omn
Avatar billede claes57 Ekspert
08. marts 2013 - 17:25 #1
er det ikke lettere med between, fx
s1 = "Between " & cdate(Start.Value) & " And " & cdate(Slut.Value)
Avatar billede omn Mester
08. marts 2013 - 18:14 #2
Hej Claes57
Det ser lettere ud, men der selecteres intet. 
Formodentlig fordi at "dato" i mit eksempel er i format mm-dd-yyyy og de to andre i format dd-mm-yyyy.

Vh Omn
Avatar billede claes57 Ekspert
08. marts 2013 - 19:20 #3
bare fordi det er access, så prøv
s1 = "Between #" & Format(Start.Value, "mm-dd-yyyy") & "# And #" & Format(Slut.Value, "mm-dd-yyyy") & "#"
Der burde ikke være forskel...
Avatar billede Slettet bruger
09. marts 2013 - 00:53 #4
vedr #2: dd-mm-yyyy er en sprogvalgs præsentationsform - det er ikke noget start/slut er.

variablerne referers heller ikke ved navne eller typer i sql udtrykket - alle værdier er angivet som strengudtryk og ganske korrekt er dato på mm-dd-yyyy formen.

Fra immediate vinduet:
?typename(format(now(),"mm-dd-yyyy"))
String

Jeg kan heller ikke se fejlen!

Det gør sikkert ingen forkel, men prøv ekstra parenteser - som i:
((start>=dato) and (dato<=slut))
Avatar billede terry Ekspert
09. marts 2013 - 19:03 #5
To be on the safe side I would always include the time too.

>= #2013-03-09 00:00:00# AND  <= #2013-03-09 23:59:59#
Avatar billede zuschlag Juniormester
11. marts 2013 - 14:22 #6
Hej
Jeg har en tilsvarende sql:
SELECT * FROM [qryallering] WHERE ([Dato]<=#11 27 2012#  + 1 ) and ([Dato]>=#11 26 2012#)
Læg mærke til at jeg lægger EN dag til min øvre datogrænse, og at at den øvre datogrænse skrives først.
Læg også mærke til datoformatet.-> mm dd yyyy
Jeg kan godt huske at det drillede for lang tid siden, da det blev strikket sammen, men det virker :-)
VH Anders Z.
Avatar billede terry Ekspert
11. marts 2013 - 14:55 #7
WHERE ([Dato]<=#11 27 2012#  + 1 ) and ([Dato]>=#11 26 2012#)

it shouldnt be necessary to put the highest of the two intervals first or add 1 day to it, unless of course you want include a day extra in the interval
Avatar billede terry Ekspert
11. marts 2013 - 15:18 #8
Try making a query where you select teh date field and format the output to include hh:nn:ss
Avatar billede zuschlag Juniormester
11. marts 2013 - 15:38 #9
Hej
Rækkefølgen er ligegyldig og Nej det burde ikke være nødvendigt at lægge en dag til, men det er det af en eller anden "microsoft agtig " grund. Og når løsningen virker er det tit sådan at men accepterer løsningen :-)
Vh Anders
Avatar billede terry Ekspert
11. marts 2013 - 16:30 #10
If you look at the comment I made
Skrevet lør. d. 09. marts 2013 kl. 19:03:04| #5

The reason is because if you dont include the time part then you risk NOT including records where there is a time.

I have a table which contains 2 records. Only one field of type date. The format is short date but this DOES NOT mean that it can only contain a date with no time part, it only mean that you see that date formeted without the time part.

When I view the record in the table they both have the same value

31-12-2010
31-12-2010

I make a query
SELECT tblDates.SlutDato
FROM tblDates
WHERE (((tblDates.SlutDato)>=#12/31/2010# And (tblDates.SlutDato)<=#12/31/2010#));



But I only see one record in the result. Why can that be when the dates are the same?

Well its because the records actually contain a time too.

2010-12-31 00:00:00
2010-12-31 00:00:01


when you make a select and dont inlcude the time part as my comment indicates it is the same as making a query


WHERE (((tblDates.SlutDato)>=#12/31/2010 00:00:00# And (tblDates.SlutDato)<=#12/31/2010 00:00:00#));


which if you think about it, you have solved by adding 24 hours to the highest date interval. You could have just include 23:59:59 instead.

So, noting to do with "microsoft agtig"
Avatar billede terry Ekspert
11. marts 2013 - 16:33 #11
Og når løsningen virker er det tit sådan at men accepterer løsningen :-)

If you cant find a logical explanation then I'd agree too, but there is in this case.
Avatar billede Slettet bruger
12. marts 2013 - 14:46 #12
Det der er "microsoft agtig" kan så detaljeres til at udvikleren/administatoren/brugeren har ansvaret for at indholdet i felter af typen 'dato og klokkeslet' er 'rene datoer' - altså med 00:00:00 som dagsoffset.

'dato og klokkeslet' typens format går elene på præsentationen - det hverken forhindrer indtastning af eller nulstiller ved formatvalg i tabeldesign - dagsoffset

Dagsoffset=0 når man indtaster en ren dato i et felt.

Med andre ord: ms-access har ingen dato type - ms-access har en tidspunkt type - lidt, på sin vis, halvredundant formuleret på dansk som 'dato og tidspunkt'. Det er smart - for med omhu og behændighed kan man anvende den til eksklusivt én af følgende:

1. tidspunkt (tænk på et punkt på en tidslinie - 0~1899)
2. tidspunkt på dagen
3. dato

Dato/klokkeslet typen er implementeret som kommatal dagstæller, så ønsker man at kunne udføre den enkleste sammenligning med datoer alene, kan en dato i tabel A, med 'tilsmudsede datoer' renses vha.

update A set dato=clng(dato)
Avatar billede terry Ekspert
17. marts 2013 - 15:53 #13
omn?
Avatar billede terry Ekspert
15. april 2013 - 21:05 #14
where are we with this question?
Avatar billede omn Mester
23. april 2013 - 10:48 #15
Hej Terry

You are right - it was because I did not include the time part.
How can I give you point ?

Sorry for the late answer.

OMN
Avatar billede terry Ekspert
23. april 2013 - 12:17 #16
Great you got it to work which I assume you did.

I'd prefer pints but as points is all we can get then I'll place an answer which you need to accept :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester