Avatar billede swamboo Seniormester
15. april 2008 - 22:51 Der er 24 kommentarer og
1 løsning

Problemer med dato-variabel

Hejsa. 

Jeg har en listbox hvor jeg kan vælge nogle datoer i formatet: 02-05-2008. Den kommer i en request("start") - som jeg forsøger at bruge sådan:

if request("start")="" then
dim start
start=now()
else
start = request("start")
end if
    sql = "SELECT * from [arbejdsdetaljer] where dato > start ORDER BY dato"
Men den skriver den mangler en parameter.
Skriver jeg now() i stedet, virker det fint. Kan man ikke få den til at acceptere datoen på den anden måde - og hvordan????

Takker!!!
Avatar billede kabbak Professor
15. april 2008 - 22:56 #1
sql = "SELECT * from [arbejdsdetaljer] where dato >" & start & " ORDER BY dato"
Avatar billede softspot Forsker
15. april 2008 - 23:00 #2
og i Access er det:

sql = "SELECT * from [arbejdsdetaljer] where dato > #" & start & "# ORDER BY dato"
Avatar billede swamboo Seniormester
15. april 2008 - 23:13 #3
Den henviser til en access database.

Men den vil slet ikke lege med mig.
Kan jeg ikke angive en dato (f.eks. 02-05-2008) som den kan sammenligne med et datofelt i databasen, eller skal det gøres anderledes?
Eksempel:
start ="02-05-2008"
'end if
sql = "SELECT * from [arbejdsdetaljer] where dato > " & start & " ORDER BY dato"

    set rstemp = conntemp.execute(sql)
    do while not (rstemp.eof or rstemp.bof)


Når jeg skriver sådan, så får jeg ALLE datoer i tabellen - også dem der er yngrer end 2 maj. Hvad gør jeg galt?
Avatar billede kabbak Professor
15. april 2008 - 23:15 #4
access har det med at bytte om på måned og dag
prøv
start ="05-02-2008"
Avatar billede swamboo Seniormester
15. april 2008 - 23:17 #5
Nix - det gav ingen ændringer
:(
Avatar billede kabbak Professor
15. april 2008 - 23:18 #6
prøv med
sql = "SELECT * from [arbejdsdetaljer] where dato > Cdate(" & start & ") ORDER BY dato"
Avatar billede olhansen Nybegynder
15. april 2008 - 23:19 #7
Du ved det ikke med access, det er afhængigt af om den er dansk eller noget andet.
Brug altid ISO datoformatet, det dur:

YYYY-MM-DD

Mvh
Avatar billede swamboo Seniormester
15. april 2008 - 23:27 #8
Der er over hovedet ikke noget der dur - uanset hvordan jeg skrive datoen.
Den eneste måde jeg kan få "resultat" er ved at vende > om, for så får jeg ikke noget...
Avatar billede kabbak Professor
15. april 2008 - 23:29 #9
Prøv at dimme start

Dim Start as date
Avatar billede softspot Forsker
15. april 2008 - 23:29 #10
Eller endnu bedre, brug Command-objektet og parametre, så er du fri for at bøvle med de der strenge.

.
.
.
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandType = adCmdText
cmd.CommandText = "SELECT * from [arbejdsdetaljer] where dato > ? ORDER BY dato"
cmd.Parameters.Append cmd.CreateParameter("@start", adDate, adParamInput, 8, cdate(start))
set rs = cmd.Execute()
.
.
.
Avatar billede softspot Forsker
15. april 2008 - 23:30 #11
kabbak >> du kan da ikke bruge typer i VBScript...
Avatar billede kabbak Professor
15. april 2008 - 23:31 #12
ok, jeg tænker i access
Avatar billede swamboo Seniormester
15. april 2008 - 23:36 #13
Softspot - Hvordan arbejder man med det??
Avatar billede softspot Forsker
15. april 2008 - 23:38 #14
swamboo, jeg kan ikke helt forstå du afviser olhansen's svar så hurtigt, for det er da rigtig nok at ISO-formatet fungerer. Du skal bare sørge for at overføre datoen i et korrekt Access-format (som jeg angav i mit post fra 15/04-2008 23:00:26), altså med # omkring datoen i strengen:

sql = "SELECT * from [arbejdsdetaljer] where dato > #" & year(start) & "-" & month(start) & "-" & day(start) & "# ORDER BY dato"
Avatar billede softspot Forsker
15. april 2008 - 23:44 #15
15/04-2008 23:36:43 >> I sin grundform skal du kunne det jeg har illustreret, men der er naturligvis mange andre muligheder for at udnytte Command-objektet. Fordelen ved Command-objektet er at du er afskærmet fra SQL-injections, hvor folk prøver at smide SQL i formfelter for at få adgang til dine data eller ødelægge dem. Parametrene sørger for at data bliver overført i det format du angiver og hvis typen ikke er korrekt, så får du en fejl i sylten, hvilket umiddelbart er bedre end at dine data bliver smadret. Du slipper stadig ikke for at validere dine data, men du får en renere (og mere objektbaseret) grænseflade til din database end du har med det populære "strengsammensætningssnask".
Avatar billede swamboo Seniormester
15. april 2008 - 23:45 #16
Hmmm - du har helt sikkert ret - men sagen er bare at det overhovedet ikke virker - og jeg fatter ikke hvorfor.
Sidder og bliver lidt panisk angst for at jeg har lavet et eller andet dumt et sted, for jeg mener da ikke at det med datoer skulle være så stort et problem.
Avatar billede swamboo Seniormester
15. april 2008 - 23:46 #17
OK - det tror jeg lige jeg vil læse lidt på i morgen. Lyder interessant!!
Avatar billede softspot Forsker
15. april 2008 - 23:47 #18
Hvis du skal benytte konstanter som jeg gjorde i mit eksempel, så skal du enten smide denne linie ind i toppen af den ASP-fil hvor du vil bruge konstanterne, eller i global.asa, som ligger i roden af din web-applikation:

<!-- METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4"  -->

Det er en reference til typelibrary for ADO, så den fatter eksempelvis adCmdText og adParamInput...
Avatar billede swamboo Seniormester
15. april 2008 - 23:50 #19
Hey venner - nu virker det vist.

Datoformatet skulle være 02-05-08 - selvfølgelig det eneste jeg ikke prøvede...

Hvem af jer vil have mine point - for i har virkelig været oprigtige!!
1000 tak for jeres hjælp - det er meget værdsat - og softspot: Jeg tager lige en kikker på det du skrev, det lyder spændende!!
Avatar billede swamboo Seniormester
15. april 2008 - 23:52 #20
Men jeg frygter lidt om det også virker når det bliver lagt på nettet...
Avatar billede softspot Forsker
15. april 2008 - 23:55 #21
Jeg kan varmt anbefale Command-objektet! Jeg bruger det selv til daglig og har fået bygget nogle rutiner, så det bliver let af arbejde med og jeg kun skal gøre et mínimalt stykke ekstra arbejde for at kalde min database med parametre i forhold til strengsammensætningsmetode. Koden bliver mere overskuelig, herunder også dine SQL-sætninger, som ikke længere flakser frem og tilbage mellem VBS og SQL (i mere komplekse situtioner kan dette være ekstremt svært at gennemskue, hvis man ikke er ultra disciplineret med sin kode).

Der er naturligvis altid situationer hvor det ikke kan betale sig at bruge Command-objektet og jeg vil kun anbefale det i de situationer, hvor du skal overføre værdier som du ikke selv har skabt og stoler 100% er korrekte rent data og formatmæssigt. Derfor vil jeg, til en simpel optælling af rækker i en tabel, stadig benytte:

set rs = conn.Execute("SELECT COUNT(*) FROM tabel")

da der naturligvis er et overhead ved at oprette et command-objekt og fyre det af.
Avatar billede swamboo Seniormester
15. april 2008 - 23:58 #22
Softspot - du vinder!!

Mit forsøg der virker ser således ud:

start ="21-04-08"
sql = "SELECT * from [arbejdsdetaljer] where dato >= #" & year(start) & "-" & month(start) & "-" & day(start) & "# ORDER BY dato"

Det var dit eksempel. om det virker med alle de andre forslag har jeg endnu ikke testet - å det ved jeg ikk!!

>>Hvor kan jeg læse om det? Er der en speciel hjemmeside om det, eller skal jeg bare søge de almindelige steder?
Avatar billede softspot Forsker
16. april 2008 - 00:09 #23
Jeg tror du kan finde mere om Command-objekter end du gider læse. Prøv at søge efter "ADODB.Command parameters", så tror jeg der dukker noget op. Jeg tager altid selv udgangspunkt i Microsoft's MSDN, men mange synes ikke det er godt. Jeg har dog fundet en del artikler derind som også kigger på teknologierne fra et lidt mere praktisk perspektiv.

ADO-ting: http://msdn2.microsoft.com/en-us/library/ms675532(VS.85).aspx

herfra kan du komme videre til programmer's guide og referencemanual, hvor du nok finder noget om Command-objektet begge steder, hvis jeg ikke tager meget fejl. Jeg vil også tro du kan finde nogle artikler om emnet på MSDN (selvom de sikkert vil være gamle - det er jo trods alt en bedaget teknologi :)).
Avatar billede softspot Forsker
16. april 2008 - 00:10 #24
Point kan deles over flere svar, hvis du mener der er flere som har medvirket til løsningen :)
Avatar billede softspot Forsker
16. april 2008 - 09:20 #25
Tak for point og held og lykke med Command-objektet :)
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