Avatar billede stigaard Nybegynder
26. august 2005 - 18:45 Der er 4 kommentarer og
1 løsning

Variabel dato til brug i SQL streng

Fra en form submittes "md_bw" og "md_fw" med en værdi på 1-12.
Det tal der sendes skal bruges i min SQL statement, men hvordan får jeg det ind der?

fradato = DateAdd("m",-X,(date))
' X = Her skal "md_bw" værdien indsættes
tildato = DateAdd("m",Y,(date))
' Y = Her skal "md_fw" værdien indsættes

SQL = "SELECT * FROM Bookninger WHERE BookningDato BETWEEN #"& fradato &"# AND #"& tildato &"# AND Status = "& annul &" ORDER BY BookningDato;"
Avatar billede kjulius Novice
26. august 2005 - 23:58 #1
SQL = "SELECT * FROM Bookninger WHERE BookningDato BETWEEN DateAdd(""m"",-" & md_bw & ",date()) AND DateAdd(""m""," & md_fw & ", Date()) AND Status = " & annul &" ORDER BY BookningDato"

Det sender beregningen af datoerne videre til databasen. Alternativt kan du naturligvis også foretage beregningerne i scriptet og medsende datoerne som færdige datostrenge. Formateringen af de datoer er bare "snavs", da de helst skal angives i amerikansk format (mm/dd/yy), selvom nyere Access versioner også (for det meste) accepterer og virker med lokale datoversioner som f.eks. dd.mm.yyyy.
Den formatering undgår du ved at sende beregningen til databasen (i hvert fald så længe du tager udgangspunkt i date() funktionen).

Hvis man har et felt, hvor brugeren skal indtaste en dato, vil det desuden ofte være en fordel simpelthen at overgive datoen som en streng til databasen i en CDate funktion, som denne:

SQL = "SELECT * FROM tabel WHERE dato > CDate(" & indtastetdato & ")"

Dermed er der ikke brug for så faste formater som SQL ellers normalt kræver, da CDate faktisk er ret god til at omforme mange forskellige datoformater til en valid dato variabel.

Ovenstående er baseret på, at du anvender Access. Det er jeg gået ud fra, da du bruger "havelågen" omkring datoen i dit eksempel.
Avatar billede kjulius Novice
27. august 2005 - 00:02 #2
Lille korrektion: SQL = "SELECT * FROM tabel WHERE dato > CDate("" & indtastetdato & "")"
Avatar billede busschou Praktikant
27. august 2005 - 00:53 #3
hmm, tvetydigt spørgsmål, lyder som om du enten ikke mener din sql er rigtig, eller også som om du ønsker få sat X og Y ind sådan her
----
fradato = DateAdd("m",-request.form("md_bw"),date)
tildato = DateAdd("m",request.form("md_fw"),date)
SQL = "SELECT * FROM Bookninger WHERE BookningDato BETWEEN #"& fradato &"# AND #"& tildato &"# AND Status = "& annul &" ORDER BY BookningDato"
----
Som kjulius skriver kan du risikerer problemer med datoer i access, jeg plejer selv altid at benytte formatet yyyymmdd som derved aldrig fejler
Du kan også som kjulius skriver benytte CDate til at typecaste som en dato, dog ser jeg ikke nogen umiddelbar grund til dette i og med DateAdd altid returnerer i dato format
Avatar billede stigaard Nybegynder
28. august 2005 - 17:01 #4
busschou's kode virker i mit tilfælde uden problemer. Skriver du lige et svar?
Avatar billede busschou Praktikant
28. august 2005 - 18:00 #5
yes :o) godt det virker
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