/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
fjern begivenhed efter dagsdato + 3 dage
Fra : Brian Gregersen


Dato : 17-02-03 08:44

Jeg har lavet en terminsliste via asp og access database, som
opdateres af et par af medlemmerne se:
http://www.otk.dk/terminsliste/

Når et stævne er afviklet vil jeg gerne have at det slettes fra
listen, det er gjort på denne måde:
sql = "SELECT * FROM ……. AND stv_dato >= date() ORDER by
stv_dato"

Det har vist sig ikke at være hensigtsmæssigt, da jeg skal bruge
linket til stævnet når jeg laver resultater og det kommer ofte
nogle dage senere.
Hvordan ligger man 3 dage til date()?
Jeg havde forestillet mig det var noget i den stil:
nydato = (date() + 03-00-00)
og så skrive stv_dato > nydato
men det giver denne fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters.
Expected 1.

Håber der er en der kan hjælpe.
Hilsen
Brian

--
Danmarks største specialiserede IT jobdatabase
- Udelukkende med IT- og internetrelaterede jobs
- Opret en profil og lad drømmejobbet finde dig
KLIK HER! => http://www.html.dk/job

 
 
Jens Gyldenkærne Cla~ (17-02-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 17-02-03 11:12

Brian Gregersen skrev:

> Når et stævne er afviklet vil jeg gerne have at det slettes fra
> listen, det er gjort på denne måde:
> sql = "SELECT * FROM ……. AND stv_dato >= date() ORDER by
> stv_dato"

Ovenstående er ikke en sletteforespørgsel. Hvis stv_dato er større
eller lig dags dato er stævnet vel i øvrigt ikke afholdt?

Ah - nu forstår jeg måske. Er ovenstående den forespørgsel som din
side genereres efter giver det selvfølgelig mening.

> Det har vist sig ikke at være hensigtsmæssigt, da jeg skal bruge
> linket til stævnet når jeg laver resultater og det kommer ofte
> nogle dage senere.

Det lyder fornuftigt.

> Hvordan ligger man 3 dage til date()?

Kig på funktionen DateAdd(). Brug funktionen direkte i Access (den
kan også bruges i asp, men det er sikrere at bruge den i Access.


sql = "SELECT ... WHERE stv_dato >= DateAdd("d", 3, Date() ) ..."

Du kan også overveje at have et boolesk felt der angiver om et
stævne skal vises eller ej. Så er du ikke afhængig af den tid der
går før resultaterne dukker op.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Brian Gregersen (17-02-2003)
Kommentar
Fra : Brian Gregersen


Dato : 17-02-03 13:24

> > sql = "SELECT * FROM ……. AND stv_dato >= date() ORDER by
> > stv_dato"
>
> Ah - nu forstår jeg måske. Er ovenstående den forespørgsel som din
> side genereres efter giver det selvfølgelig mening.
Undskyld, posten skal ikke slettes blot ikke vises på siden

> > Hvordan ligger man 3 dage til date()?
>
> Kig på funktionen DateAdd(). Brug funktionen direkte i Access (den
> kan også bruges i asp, men det er sikrere at bruge den i Access.
>
>
> sql = "SELECT ... WHERE stv_dato >= DateAdd("d", 3, Date() ) ..."

DateAdd("d", 3, Date())
Virker efter hensigten giver 20-02-03.
Men her har jeg lavet en lille tanke torsk for så bliver stævnedatoen
stv_dato eks 16-02-03 ikke større end 20-02-03.
Det jeg har behov for er at lægge 3 til stævnedatoen
sådan: nydato = DateAdd("d", 3, stv_dato)
og hente disse poster
sql = "SELECT ... WHERE nydato >= Date() ..."
eks stævne fra 16-02-03 giver nydato 19-02-03
19-02-03>date() posten vil vises.

Mit problem er at hvis jeg laver
Response.Write nydato
Så giver det 02-01-1900
stv_dato har format: Kort datoformat i access databasen.
Hvad skal der omkring stv_dato for at det virker.
Hilsen
Brian








>
> Du kan også overveje at have et boolesk felt der angiver om et
> stævne skal vises eller ej. Så er du ikke afhængig af den tid der
> går før resultaterne dukker op.
> --
> Jens Gyldenkærne Clausen
> Svar venligst under det du citerer, og citer kun det der er
> nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
> hvordan på http://usenet.dk/netikette/citatteknik.html


--
Danmarks største specialiserede IT jobdatabase
- Udelukkende med IT- og internetrelaterede jobs
- Opret en profil og lad drømmejobbet finde dig
KLIK HER! => http://www.html.dk/job

Jens Gyldenkærne Cla~ (17-02-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 17-02-03 13:34

Brian Gregersen skrev:

> Det jeg har behov for er at lægge 3 til stævnedatoen
> sådan: nydato = DateAdd("d", 3, stv_dato)
> og hente disse poster
> sql = "SELECT ... WHERE nydato >= Date() ..."

Du begår den fejl at foretage datoudregningen i asp. Som jeg
skrev tidligere bør du bruge funktionen i Access - så slipper du
for en masse potentielle konverteringsfejl.

Altså i stedet for

   nydato = DateAdd("d", 3, stv_dato)

   sql = "SELECT ... WHERE nydato >= Date() ..."

- skriver du:

sql = "SELECT ... WHERE DateAdd(""d"", 3, stv_dato) >= Date() ..."


NB: Er der nogen speciel grund til at du citerer min signatur?

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Brian Gregersen (17-02-2003)
Kommentar
Fra : Brian Gregersen


Dato : 17-02-03 14:44

Jens Gyldenkærne Clausen wrote
> Du begår den fejl at foretage datoudregningen i asp. Som jeg
> skrev tidligere bør du bruge funktionen i Access - så slipper du
> for en masse potentielle konverteringsfejl.
>
> Altså i stedet for
>
>    nydato = DateAdd("d", 3, stv_dato)
>
>    sql = "SELECT ... WHERE nydato >= Date() ..."
>
> - skriver du:
>
> sql = "SELECT ... WHERE DateAdd(""d"", 3, stv_dato) >= Date() ..."
Det er jeg ikke helt med på. For mig at se står det stadig i asp. Det er
inden for
<% tegnene.
Det hele ser sådan ud
<%
Set rs = Server.CreateObject("ADODB.Recordset")
sql = "SELECT * FROM ASP_L_link WHERE link_grp = 4 AND DateAdd(""d"", 3,
stv_dato) >= Date() ORDER by stv_dato"
set rs = conn.execute(sql)

if not rs.eof then
response.write("<font size=3 face=Arial><b>")
%>

Det giver denne fejl

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

/terminsliste/links4.asp, line 6
linje 6 er: set rs = conn.execute(sql)

Brian
> NB: Er der nogen speciel grund til at du citerer min signatur?
Nej det var en fejl


--
Danmarks største specialiserede IT jobdatabase
- Udelukkende med IT- og internetrelaterede jobs
- Opret en profil og lad drømmejobbet finde dig
KLIK HER! => http://www.html.dk/job

Brian Gregersen (17-02-2003)
Kommentar
Fra : Brian Gregersen


Dato : 17-02-03 15:42

Jens Gyldenkærne Clausen wrote
> Du begår den fejl at foretage datoudregningen i asp. Som jeg
> skrev tidligere bør du bruge funktionen i Access - så slipper du
> for en masse potentielle konverteringsfejl.
>
> Altså i stedet for
>
>    nydato = DateAdd("d", 3, stv_dato)
>
>    sql = "SELECT ... WHERE nydato >= Date() ..."
>
> - skriver du:
>
> sql = "SELECT ... WHERE DateAdd(""d"", 3, stv_dato) >= Date() ..."
Det virker stadig ikke. Jeg er ikke helt med på hvad du mener er alt hvad
der står indne for <% tegn ikke asp.
Du får lige hele koden måske kan det hjælpe:
<%
Set rs = Server.CreateObject("ADODB.Recordset")
sql = "SELECT * FROM ASP_L_link WHERE link_grp = 4 AND DateAdd(""d"", 3,
stv_dato) >= Date() ORDER by stv_dato"
set rs = conn.execute(sql)

if not rs.eof then
response.write("<font size=3 face=Arial><b>")
%>
Det giver denne fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

/terminsliste/links4.asp, line 6
linje 6 er: set rs = conn.execute(sql)
Hilsen
Brian
>
>
> NB: Er der nogen speciel grund til at du citerer min signatur?
Nej det var en fejl


--
Danmarks største specialiserede IT jobdatabase
- Udelukkende med IT- og internetrelaterede jobs
- Opret en profil og lad drømmejobbet finde dig
KLIK HER! => http://www.html.dk/job

Jens Gyldenkærne Cla~ (17-02-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 17-02-03 15:51

Brian Gregersen skrev:

>> Du begår den fejl at foretage datoudregningen i asp.

>> nydato = DateAdd("d", 3, stv_dato)

Her foretager du en udregning i asp. Nydato er en variabel i asp -
variablen indeholder en dato i et eller andet format.


>> sql = "SELECT ... WHERE nydato >= Date() ..."

Ovenstående er først og fremmest forkert fordi nydato sendes til
databasen som en tekst og ikke som et variabelnavn.
Variabelerstatning sker ikke af sig selv i asp.

Dernæst skal en datoværdi også angives med anførselstegn (i Access
dog med havelåger (#) omkring værdien.

Du _kunne_ derfor skrive:

   sql = "SELECT ... WHERE #" & nydato & "# >= Date() ..."

- men problemet ved det er at den datoværdi du har beregnet
tidligere, nu sendes til Access som en tekst, i stedet for som en
datoværdi. Der er flere måder at skrive datoer som tekst på - og
desværre kan to af de mest almindelige nemt fejllæses (dd-mm-yy kan
læses som mm-dd-yy og omvendt).
I eksemplet ovenfor konverteres nydato til en streng - men du kan
ikke være sikker på hvilket format strengen vil være i - og dermed
kan du heller ikke være sikker på at Access vil læse datoen sådan
som du har tænkt den skulle læses.


Ved at benytte datofunktionen i Access, sender du kun værdier
(heltal) der ikke kan misforstås, og dermed har du elimineret en
ellers besværlig fejlkilde.

Koden skrives stadig i asp - for det er også asp der håndterer alle
kald til en database - men datofunktionen eksekveres af databasen,
_ikke_ af asp.

Hvis du skriver:

   sql = "SELECT ... WHERE DateAdd(""d"", 3, stv_dato) >= Date()"

- så er det fuldstændig ligegyldigt hvordan din server er sat op.
Accessdatabasen modtager den samme forespørgselsstreng og behandler
den som den skal behandles.

Datoværdier der beregnes i asp er lige så korrekte som dem der
beregnes i Access - men fordi sql-sætninger består af ren tekst
skal en beregnet datoværdi først konverteres til tekst før den kan
behandles af en database. Den konvertering kan som beskrevet nemt
give problemer.

> sql = "SELECT * FROM ASP_L_link WHERE link_grp = 4 AND
> DateAdd(""d"", 3, stv_dato) >= Date() ORDER by stv_dato"

Hvis ovenstående fejler skal du måske prøve med enkelte
anførselstegn omkring "d" - muligvis endda slet ingen.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Brian Gregersen (17-02-2003)
Kommentar
Fra : Brian Gregersen


Dato : 17-02-03 19:00

> > sql = "SELECT * FROM ASP_L_link WHERE link_grp = 4 AND
> > DateAdd(""d"", 3, stv_dato) >= Date() ORDER by stv_dato"
>
> Hvis ovenstående fejler skal du måske prøve med enkelte
> anførselstegn omkring "d" - muligvis endda slet ingen.

Tusind tak for hjælpen Jens.

sql = "SELECT * FROM ASP_L_link WHERE link_grp = 4 AND
DateAdd('d', 3, stv_dato) >= Date() ORDER by stv_dato"

Så virker det perfekt.



--
Danmarks største specialiserede IT jobdatabase
- Udelukkende med IT- og internetrelaterede jobs
- Opret en profil og lad drømmejobbet finde dig
KLIK HER! => http://www.html.dk/job

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste