Avatar billede borupborup Nybegynder
11. juli 2007 - 09:45 Der er 7 kommentarer og
1 løsning

Dato format og SQL sætning med BETWEEN

Ohøj.

Jeg har lidt problemer med at for BETWEEN til at virker.
"Select * from Db where DATO1 Between request.form("start") AND request.form("slut")

men det gør det ikke rigtigt.

Dato format'et i min database er: DD-MM-YYYY

Startdato = DD-MM-YYYY
Slutdato  = DD-MM-YYYY


Hvordan for jeg konveteret det så det virker?

/Thomas
Avatar billede fennec Nybegynder
11. juli 2007 - 09:48 #1
Det format du ser er IKKE det databasen bruger til at kommunikere med.

Access:
#mm-dd-yyyy#

Alle andre:
'yyyy-mm-dd'
Avatar billede fennec Nybegynder
11. juli 2007 - 09:50 #2
Din sql skal altså komme til at se sådan ud (Access):
sql = "Select * from Db where DATO1 Between #07-11-2007# AND #12-31-2007#"
Avatar billede borupborup Nybegynder
11. juli 2007 - 09:53 #3
Er der en smart måde at bytte rundt på det i koden uden at skal ændre alle rocord i databasen?
Avatar billede fennec Nybegynder
11. juli 2007 - 09:57 #4
Du skal ikke ændre noget i databasen. kolonnen skal bare være af en dato datatype. Den må ikke være et tekstfelt...

Du kan med fordel bruge en funktion til at konvertere dine datoer til SQL format:

Function DBDate(byVal fDato)
dim SQLYear,SQLMonth,SQLDay
  fDato = cDate(fDato)
  SQLYear = Year(fDato)
  SQLMonth = Month(fDato)
  SQLDay = Day(fDato)
  if SQLDay<10 then
    SQLDay = "0"&SQLDay
  end if
  if SQLMonth<10 then
    SQLMonth = "0"&SQLMonth
  end if
  DBDate = "#"& SQLMonth&"-"&SQLDay&"-"&SQLYear &"#"
End Function

Så kalder du bare den når du skal bruge datoer. Gør det også nemmere hvis du skifter database, da du så bare ændre funktionen. Læg mærke til at den indsætter #, så man ikke skal alle sine sql i gennem og ændre # til ' hvis man skifter DB.

Koden bliver så noget ala:
sql = "Select * from Db where DATO1 Between "& DBDate(request.form("start")) &" AND "& DBDate(request.form("slut"))
Avatar billede borupborup Nybegynder
11. juli 2007 - 10:15 #5
Får fejlen:
Select * from RFC Where DATO1 BETWEEN '#07-11-2007#' AND '#07-12-2007#'
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
/CHANGE.asp, line 142

Har sat typen af DATO1 til "Dato og klokkes"
Avatar billede fennec Nybegynder
11. juli 2007 - 10:32 #6
Du skal ikke have ' omkring. Access bruger kun #.

Select * from RFC Where DATO1 BETWEEN '#07-11-2007#' AND '#07-12-2007#'
Skal altså blive til:
Select * from RFC Where DATO1 BETWEEN #07-11-2007# AND #07-12-2007#
Avatar billede borupborup Nybegynder
11. juli 2007 - 12:05 #7
Perfekt.

Stærkt..... det virker....
Avatar billede fennec Nybegynder
11. juli 2007 - 12:47 #8
.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