Avatar billede Lars Søndergaard Nybegynder
05. februar 2003 - 16:35 Der er 7 kommentarer og
2 løsninger

Dato sammenligning i ASP og SQL

Dim fra, til

fra = 02-01-2003
til = 09-02-2003

Jeg skal i min SQL sætning udvælge alle de rækker hvor datoen er nyere end fra og samtidig ældre end til. Min SQL string ser sådan ud.

strSQL = "SELECT * FROM [Timesheet_line] WHERE [DATE1] >= " & fra & " AND [DATE2] <= " & til & " ORDER by DATE1 ASC"

I access databasen er DATE1 og DATE2 også af formatet DD-MM-YYYY og hver eneste gang jeg kører mit script får jeg fejlen:

ADODB.Field error '80020009'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

Er der nogen som kan fortælle mig hvordan jeg skal få det til at virke ???? Jeg kan IKKE ændre på data i databasen.
Avatar billede Spotgun Seniormester
05. februar 2003 - 16:36 #1
Prøv at bruge datoen som YYYY-MM-DD i din SQL, og se om det virker!
Avatar billede Spotgun Seniormester
05. februar 2003 - 16:36 #2
Og sæt evt # omkring datoerne i SQL'en også...
Avatar billede Lars Søndergaard Nybegynder
05. februar 2003 - 16:42 #3
som sagt kan jeg ikke ændre på de data der ligger i databasen da jeg vedereudvikler på en eksisterende løsning.
Avatar billede Spotgun Seniormester
05. februar 2003 - 16:46 #4
du behøver heller ikke ændre på dine data - blot på SQL'en...
Avatar billede eagleeye Praktikant
05. februar 2003 - 16:58 #5
Den fejl betyder du får et tomt recordset, enten fordi databasen er tom eller fordi der ikke er nogle records som lever op til det du sprøger efter i WHERE delen af SQL'en.. Det er altid godt at tjekke for om man har et tomt recordset inden man udskriver.:

strSQL = "SELECT * FROM [Timesheet_line] WHERE [DATE1] >= " & fra & " AND [DATE2] <= " & til & " ORDER by DATE1 ASC"

set rs = Connection.Execute(strSQL)

'Tjek om rs er tomt
if not rs.EOF then
  'Recordset er ikke tomt, så der kan udskrives med eksvis et loop
  do while not rs.EOF

    rs.movenext
  loop
else
  'Recordset er tomt
  Response.write "Ingen data fundet"
end if
Avatar billede ramnir Nybegynder
05. februar 2003 - 20:39 #6
strSQL = "SELECT * FROM [Timesheet_line] WHERE [DATE1] >= #" & fra & "# AND [DATE2] <= #" & til & "# ORDER by DATE1 ASC"

Det er nødvendigt med # uden om dine datoer i SQL statementet, som spotgun siger.

/ramnir
Avatar billede coltau Juniormester
05. februar 2003 - 23:22 #7
Det er korrekt som eagleeye siger omkring fejlmeddelelsen (husk RS.EOF) - men du kan ikke regne med at en tildeling af variablene fra og til kan bruges i en SQL-sætning.

Dim fra, til

fra = 02-01-2003
til = 09-02-2003

ovenstående skal laves om til:

fra = "2003-01-02"
til = "2003-02-09"
Du kan ikke regne med det format du ser i Access DD-MM-YYYY. Det er ikke et udtryk for at datoerne er gemt i Access på denne måde. Alle datoer er gemt ens (binært) i Access i et format som vi ikke kan bruge direkte. Hvordan datoer vises i access kan jo sættes op.

og så skal du have # omkring datoerne i SQL-sætningen som ramnir skriver.

Det var de 3 ting der mangler.
Avatar billede eagleeye Praktikant
05. februar 2003 - 23:48 #8
En anden ting som spotgun også har nævnt hvis du har dato/klokkeslæt format i databasen så skal der # omkring i SQL sætningen. Via SQL bliver dato tolket som US/UK format yyyy-mm-dd eller mm-dd-yyyy, hvis du overføre DK format vil den bytte rundt på månede og dag. Jeg vil anbefale at bruge yyyy-mm-dd da det virker. Du kan let formatere en dato med year, month og day functionerne.



fra = 02-01-2003
til = 09-02-2003

fra = Year(fra) & "-" & Month(fra) & "-"  & Day(fra)
til = Year(til) & "-" & Month(til) & "-"  & Day(til)

strSQL = "SELECT * FROM [Timesheet_line] WHERE [DATE1] >= #" & fra & "# AND [DATE2] <= #" & til & "# ORDER by DATE1 ASC"
Avatar billede Lars Søndergaard Nybegynder
19. februar 2003 - 10:33 #9
Tak for svarene og undskyld mine langsomme reaktionstid
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