Avatar billede sorenmt84 Juniormester
31. oktober 2007 - 20:10 Der er 18 kommentarer og
1 løsning

Alt ude i fremtiden

Har feltet, dato_fra som er et felt i en access database (gemt som dato/klokke felt i formatet DD-MM-YYYY, jeg skal så lave en script der tager alle poster ud, hvor dato_fra er = dags dato eller ude i fremtiden

Har bl.a. forsøgt med følgende, men jeg får også fra "fortiden"
strSQL = "Select * From projekter_medarbejdere where ref_medarb = " & Request.QueryString("id") & " and dato_fra >= " & dateadd("d",-1,date()) & " order by dato_fra asc "
Avatar billede a1a1 Novice
31. oktober 2007 - 20:20 #1
lav din dato om til åååå-mm-dd, så virker det ;o)
Avatar billede a1a1 Novice
31. oktober 2007 - 20:23 #2
brug evt. denne funktion:

Function DateToDB(ByVal sdate)
    Dim sout
    sout = "NULL"
    If Not isNull(sdate) Then
        If isDate(sdate) Then
            sout = "'" & Year(sdate) & "-" & Month(sdate) & "-" & Day(sdate) & " "
            If Hour(sdate) > 0 Or Minute(sdate) > 0 Then
                sout = sout & " " & Hour(sdate) & ":" & Minute(sdate) & ":00"
            End If
            sout = sout & "'"
        End If
    End If
    DateToDB = sou
Avatar billede a1a1 Novice
31. oktober 2007 - 20:25 #3
en anden ting er:
" & dateadd("d",-1,date()) & "

skal være

'" & dateadd("d",-1,date()) & "'

(dato er med ')

;o)
Avatar billede a1a1 Novice
31. oktober 2007 - 20:26 #4
og dateadd("d",-1,date()) er i dag minus en dag
Avatar billede sorenmt84 Juniormester
31. oktober 2007 - 20:28 #5
mener du at jeg skal lave formatet der bliver indsat i databasen om til ååå-mm-dd, for så er det desværre ikke muligt, da jeg skal lave lidt for meget om så...

Men forstår jeg dig ret, kan jeg bruge den funktion du har som kommentar nr 2, men hvordan skal den sættes ind?
Avatar billede nielle Nybegynder
31. oktober 2007 - 20:52 #6
Du kan jo også bruge den indbyggede date() funktion a Acces:

strSQL = "SELECT * FROM projekter_medarbejdere WHERE ref_medarb = " & Request.QueryString("id") & " AND dato_fra >= date() ORDER BY dato_fra ASC"
Avatar billede a1a1 Novice
31. oktober 2007 - 21:17 #7
funktionen laver en dato om til amerikansk format (sql format), men du skal ikke lave meget om....

problemet er (nok) at databasen tager fejl af måned og dag, f.eks 01-12-2001, kan blive til 12 januar 2001..., hvis formatet er år-måned-dag er der aldrig problemer (man ser det tit nå man flytter det fra sin egen (danske) til en server der kører engelsk)

NB; kan lige se at jeg havde "glemt" noget af funktionen her er den OK

Function DateToDB(ByVal sdate)
    Dim sout
    sout = "NULL"
    If Not isNull(sdate) Then
        If isDate(sdate) Then
            sout = "'" & Year(sdate) & "-" & Month(sdate) & "-" & Day(sdate) & " "
            If Hour(sdate) > 0 Or Minute(sdate) > 0 Then
                sout = sout & " " & Hour(sdate) & ":" & Minute(sdate) & ":00"
            End If
            sout = sout & "'"
        End If
    End If
    DateToDB = sout
End Function
strSQL = "Select * From projekter_medarbejdere where ref_medarb = " & Request.QueryString("id") & " and dato_fra >= " & DateToDB(dateadd("d",-1,date())) & " order by dato_fra asc "

NBBB, at min funktion "selv" sætter ' ind, hvis du prøver at lave
DateToDB("idag er det fredag")
vil den returnere NULL, ellers en dato (og tid) f.eks. '2007-10-31'
begge kan sættes ind i DB

;o)
Avatar billede a1a1 Novice
31. oktober 2007 - 21:19 #8
-> nielle den kan også fejle ;o)
Avatar billede a1a1 Novice
31. oktober 2007 - 21:25 #9
-> nielle, på mssql (og muligvis også nyere access'er) kan du bruge, GETDATE(), den holder også:

Select * From projekter_medarbejdere where ref_medarb = " & Request.QueryString("id") & " and dato_fra >= GETDATE() order by dato_fra asc "
Avatar billede a1a1 Novice
31. oktober 2007 - 21:26 #10
hvis du skal trække noget fra:

getdate()-1
eller
dateadd(d,-1,getdate())

(minus en dag)

den sidste syntax er det "rigtigste", men de 2 giver samme resultat

;o)
Avatar billede sorenmt84 Juniormester
31. oktober 2007 - 22:00 #11
a1 har sat det ind som du viser, men får fejlen:

Microsoft JET Database Engine error '80040e07'

Data type mismatch in criteria expression.

/kommune/admin/medarbejdere/oversigt.asp, line 22


Line 22: Set rs = Conn.Execute(strSQL)
Avatar billede a1a1 Novice
31. oktober 2007 - 22:14 #12
prøv at skrive din strSQL ud og "skriv" den her

gør det i linien FØR Set rs....

Response.Write("sql: " & strSQL)
Response.End ' Den stopper her

Set rs = Conn.Execute(strSQL)
Avatar billede a1a1 Novice
31. oktober 2007 - 22:19 #13
BTW, hvis det er en "gammel" computer du bruger (der ikke er opdateret), så skal du måske lave funtionen om til:

Function DateToDB(ByVal sdate)
    Dim sout
    sout = "NULL"
    If Not isNull(sdate) Then
        If isDate(sdate) Then
            sout = "#" & Year(sdate) & "-" & Month(sdate) & "-" & Day(sdate) & " "
            If Hour(sdate) > 0 Or Minute(sdate) > 0 Then
                sout = sout & " " & Hour(sdate) & ":" & Minute(sdate) & ":00"
            End If
            sout = sout & "#"
        End If
    End If
    DateToDB = sout
End Function

...gammel access/ado vil have datoer som f.eks.: #2007-10-31#
Avatar billede sorenmt84 Juniormester
31. oktober 2007 - 22:31 #14
sql: Select * From projekter_medarbejdere where ref_medarb = 86 and dato_fra >= #2007-10-31 #

jeg rettede din funktion til den nye udgave (til gamle computere) - Nu får jeg ingen fejl, men jeg får heller ikke nogle data ud, selvom der er poster der passer på mine kriterier
Avatar billede a1a1 Novice
31. oktober 2007 - 22:44 #15
hmm, du har også et mellemrum efter 31, du bruger IKKE timer og minuter??

prøv denne

Function DateToDB(ByVal sdate)
    Dim sout
    sout = "NULL"
    If Not isNull(sdate) Then
        If isDate(sdate) Then
            sout = "#" & Year(sdate) & "-" & Month(sdate) & "-" & Day(sdate)
            sout = sout & "#"
        End If
    End If
    DateToDB = sout
End Function
Avatar billede a1a1 Novice
31. oktober 2007 - 22:54 #16
eller hvis det er en nyere version...:

Function DateToDB(ByVal sdate)
    Dim sout
    sout = "NULL"
    If Not isNull(sdate) Then
        If isDate(sdate) Then
            sout = "'" & Year(sdate) & "-" & Month(sdate) & "-" & Day(sdate)
            sout = sout & "'"
        End If
    End If
    DateToDB = sout
End Function
Avatar billede sorenmt84 Juniormester
02. november 2007 - 09:18 #17
Okay jeg kigger lige på det når jeg kommer hjem i aften.
Nej ingen timer og minutter, kun dato
Avatar billede sorenmt84 Juniormester
04. november 2007 - 16:52 #18
Jeg kunne ikke få nogle af overstående til at virke, min det virker fint sådan her:

dag = day(date)
if dag <= 9 then
dag = "0" & dag
end if
dato = year(date) & "-" & month(date) & "-" & dag
strSQL = "Select * From projekter_medarbejdere where ref_medarb = " & Request.QueryString("id") & " and Cdate(dato_fra) >= #" & dato & "# order by dato_fra asc "
Avatar billede a1a1 Novice
04. november 2007 - 18:55 #19
selv tak, du har jo gjort som jeg sagde...

Year(sdate) & "-" & Month(sdate) & "-" & Day(sdate)
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