Avatar billede and_ Nybegynder
05. januar 2005 - 13:33 Der er 14 kommentarer og
3 løsninger

SQL/Access: Tag alle poster imellem 2 datoer!

Hey :p

Nu har jeg bøvlet med det her datostyring hele formiddagen...
Jeg kan simpelthen ikke få det til at virke...

Jeg er ved at lave en kalender, hvori jeg skal have tjekket hvilke datoer, der er arrangement på, så disse kan markeres. Dette er dog ikke relevant pt. da jeg ikke kan få min sql til at kun at vælge de datoer jeg vil....

Få at se hvordan DB'en ser ud: http://www.ilenkop.dk/exp/db.htm
Der har jeg lagt et dumb til interesserede...

Min sql ser sådan ud:
select * from events where fra >= #01-01-2005# and til <= #31-01-2005#

Jeg kan også sagtens hive ting fra 1. januar 2005, men den stopper ikke... Den fortsætter med også at tage feb, marts, maj med.. og den skal den ikke...

Jeg kan ikke rigtig få den til at stoppe, så nu søger jeg inspiration blandt jeg :p
Avatar billede and_ Nybegynder
05. januar 2005 - 13:37 #1
Og når jeg kører den samme sql i Acces (forespørgsel) bliver den lavet om til:

SELECT *
FROM events
WHERE [fra]>=#1/1/2005# And [til]<=#1/31/2005#;


Så den skulle jo egentlig være okay eller?

Fra og til er selvfølgelig i Dato-format!
Avatar billede fennec Nybegynder
05. januar 2005 - 14:05 #2
Det er fordi access bruger mm-dd-yyyy og yyyy-mm-dd formatet når det modtager data fra andre programmer. Du skal derfor have omkonverteret dine ASP datoer til et af disse formater. Jeg vil anbefale yyyy-mm-dd formatet, da det er det mest globale format, da andre database typer også tager dette.

Function ConvertToSqlDate(dato)
dim SQLYear,SQLMonth,SQLDay
  SQLYear = Year(dato)
  SQLMonth = Month(dato)
  SQLDay = Day(dato)
  if SQLDay<10 then
    SQLDay = 0&SQLDay
  end if
  if SQLMonth<10 then
    SQLMonth = 0&SQLMonth
  end if
'  ConvertToSqlDate = SQLMonth&"-"&SQLDay&"-"&SQLYear
  ConvertToSqlDate = SQLYear&"-"&SQLMonth&"-"&SQLDay
End Function

set rs = conn.execute("select * from events where fra >= #"& ConvertToSqlDate("01-01-2005") &"# and til <= #"& ConvertToSqlDate("31-01-2005") &"#")
Avatar billede and_ Nybegynder
05. januar 2005 - 14:24 #3
Som jeg skriver i 05/01-2005 13:37:59 kan du se at jeg kører den i access... Og den laver automatisk formatet om som du kan se...

Jeg har overhvoedet ikke koblet noget asp ind i endnu...

Det eneste jeg pt. bruger asp til er at lave sætningen hvorefter jeg kører den direkte i Access Forespørgsel...
Avatar billede fennec Nybegynder
05. januar 2005 - 14:39 #4
Hvis datatypen også er "Dato & klokkeslet" på kolonnerne kan jeg ikke lige se hvorfor det ikke virker.
Avatar billede and_ Nybegynder
05. januar 2005 - 14:42 #5
Datatypen er kort dato-format....

vidt til jeg kan se, skulle den virke, men jeg fatter ikke hvorfor den giver mig resultater fra andre måneder.... weird
Avatar billede and_ Nybegynder
05. januar 2005 - 14:50 #6
LOL

Det er mig der en kejle....
På linket til db-dumbet kan du se mit problem...

Jeg har glemt at ændre til-datoen og hr kun ændret fra-datoen...
Så er det da klart at de stadig kommer frem :s

Vi deler points'ene hvis det er iorden... Jeg havde jo ikke nogen decideret fejl... Kun en idiot-fejl som jeg selv lavede :p
Avatar billede fennec Nybegynder
05. januar 2005 - 14:51 #7
Kan du lave en:

select * from events where year(fra)=2005 month(til)=1
Avatar billede peter_e Nybegynder
05. januar 2005 - 14:55 #8
and, det kan da godt vaere at jeg er idiot - det kan ogsaa vaere at du har stirret dig blind paa datoerne. Du bruger jo 'fra' OG 'til' - og det skal du ikke. Du skal vel kun bruge 'fra'?

fx:
select * from events where fra >= #01-01-2005# and fra <= #31-01-2005#

saa faar du kun dem hvor FRA er for Januar!

I dit eksempel vil du jo ALTID selecte alle raekkerne, da 'fra' altid er efter 1.jan og 'til' altid er for den 31.jan. Hvis du tager et par af dine raekker og giver dem 'til' datoer i februar eller marts, saa kommer de ikke med laengere. Enig?
Avatar billede fennec Nybegynder
05. januar 2005 - 14:56 #9
... :o)

Jeg tror desuden den skal ændres lidt:
select * from events where fra <= #31-01-2005# and til >= #01-01-2005#

Ellers får du ikke resultater hvor datoen både er i jan og feb. F.eks fra 29-01-2005 til 03-02-2005
Avatar billede peter_e Nybegynder
05. januar 2005 - 14:56 #10
det fandt du selv :)
Avatar billede and_ Nybegynder
05. januar 2005 - 15:04 #11
Det var også det jeg kom frem til...

som sagt.. Det er en kalender... Derfor har jeg fra og til datoer...
Et arrangement kan jo sagtens starte 20 januar, men fortsætte til 3 feb..
Avatar billede and_ Nybegynder
05. januar 2005 - 15:35 #12
hhhmmm--- prøv lige at se de her værdier... det er da helt hen i skoven:

http://web/WEBKONTROL/Kunder/midlertidig_opdatering/aeroe/ny/httpdocs/forside.asp
Avatar billede fennec Nybegynder
05. januar 2005 - 15:39 #13
... dødt link.

Ligger det lokalt hos dig, eller er der en skrivefejl??? Hvis det ligger lokalt, skal vi have din IP ellers kan vi ikke komme på.
Avatar billede and_ Nybegynder
05. januar 2005 - 15:42 #14
P*S

I kender den klassisker.... have omkring 30-40 vinduer åbne... Det rigtige link er her:

http://www.ilenkop.dk/stash/marc/httpdocs/forside.asp

I skal nok ikke tage jer af designet... Det er lidt strukket nu hvor jeg kører mellemværdier ud....
Avatar billede fennec Nybegynder
05. januar 2005 - 16:30 #15
Så er vi tilbage til det jeg troede problemet var først (post 14:05:05). Du skal have kørt ASP datoerne igennem den funktion så:
select * from events where fra <= #28-02-2005# and til >= #01-02-2005#

bliver til
select * from events where fra <= #2005-02-28# and til >= #2005-02-01#

ellers opfatter den 01-02-2005 som 2. jan da formatet er mm-dd-yyyy. Hvis en af tallene er over 12, kan den godt finde ud af at bytte om på mm og dd. Kan også ses i ASP isDate() funktion.

isDate("01-31-2005")
isDate("31-01-2005")

returnere begge true, selvom den ene ikke burde være en dato.
Avatar billede and_ Nybegynder
05. januar 2005 - 17:11 #16
Så virker det....

Skal lille enøjede jack have flere point?

Men det her er jo bare en af de andre typisk fejl vi har i VB sproget...
Normalt har jeg ingen probs med asp, access osv... Men når det kommer til datoer går jeg somregel altid kold... hehe

Jeg lader kalenderen stå lidt på:
http://www.ilenkop.dk/stash/marc/httpdocs/forside.asp

For dem som er interesserede ;)
Avatar billede fennec Nybegynder
06. januar 2005 - 08:47 #17
Nu vi er i gang kan I lige så godt få min isDate() funktion, jeg bruger til at validere brugerindtastet datoere. Den validere på dd-mm-yyyy formatet:

function MyIsDate(dato)
dim returVal
returVal = false
if len(dato) = 10 then
  if isnumeric(left(dato,2)) then
  if cint(left(dato,2)) >= 1 and cint(left(dato,2)) <= 31 then
    if isnumeric(mid(dato,4,2)) then
    if cint(mid(dato,4,2)) >= 1 and cint(mid(dato,4,2)) <= 12 then
      if isnumeric(right(dato,4)) then
      if mid(dato,3,1) = "-" and mid(dato,6,1) = "-" then
        if isDate(dato) then
        returVal = true
        end if
      end if
      end if
    end if
    end if
  end if
  end if
end if
MyIsDate = returVal
end function

Så er der vist heller ikke mere at sige.

.o) <-- One Eyed Jack
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
Kategori
Kurser inden for grundlæggende programmering

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