Avatar billede mettecarsten Nybegynder
12. april 2008 - 14:46 Der er 11 kommentarer og
1 løsning

Lægge antal dage til en udløbsdato

Hej eksperter

Hvis jeg f.eks. skal lægge 14 dage til dags dato, kan det jo gøres med:

dg=Day(Date()+14)
md=Month(Date()+14)
yyyy=YEAR(Date()+14)
Udloeb = yyyy&"-"&md&"-"&dg

Det giver mig problemer, hvis jeg i stedet skal lægge 14 dage til en dato, som jeg har i min mySQL-database. Her har jeg feltet Udloeb, som er af datatypen "date". Hvis dette felt f.eks. er "2010-12-31" og jeg lægger 14 dage til med:

Udloebny = rs("Udloeb") + 14

giver det 14-01-2011. Rigtig dato, men nu omvendt! Hvis det skrives til databasen, bliver feltet efterfølgende helt naturligt 0000-00-00.

Hvordan skal koden se ud for at hente en dato i en database, lægge 14 dage til og derefter skrive den nye dato ind i databasen?

På forhånd tak.
Avatar billede w13 Novice
12. april 2008 - 14:47 #1
Du kan lægge dage til med:

DateAdd("d",14,"2010-12-31")

Og trække fra med:

DateAdd("d",-20,"2010-12-31")
Avatar billede mettecarsten Nybegynder
12. april 2008 - 14:58 #2
Hvis jeg prøver med:

Udloebny = DateAdd("d",20,"" & rs("Udloeb") & "")

Id = Session("Bruger")
SQL2 = "UPDATE Brugere set Udloeb ='" & Udloebny & "'"

SQL2 = SQL2 & "  Where Id= " & Id

Set rs2 = conn.execute(SQL2)

ender det med samme resultat som Udloebny = rs("Udloeb") + 14, altså dag-måned-år og ikke som nu i databasen år-måned-dato - og 0000-00-00 i databasen????
Avatar billede w13 Novice
12. april 2008 - 15:10 #3
Udloebny = DateAdd("d",20,"" & rs("Udloeb") & "")
skal bare være:
Udloebny = DateAdd("d",20,rs("Udloeb"))

Og hvis Udloeb i databasen er et tekstfelt og ikke et datofelt, skal det være:

Udloebny = DateAdd("d",20,CDate(rs("Udloeb")))

Er det en Access-database?
Avatar billede w13 Novice
12. april 2008 - 15:13 #4
Og det er det korrekte dato-format, som du får ud af det (dag-måned-år), da det jo er standard på din ASP-side. Så det er bestemt ikke en fejl.

For at få dit format ud af det, må vi bruge en funktion:

function DBDate(sDate)
    DBDate=year(sDate)&"-"&right("0"&month(sDate),2) &"-"& right("0"&day(sDate),2)
end function

Og så når du gemmer datoen i databasen, skal du gemme:

DBDate(DateAdd("d",20,CDate(rs("Udloeb")))
Avatar billede mettecarsten Nybegynder
12. april 2008 - 15:23 #5
det er en mySQL-database og feltets datatype er netop "date". Jeg kan umiddelbart godt se, at du laver formatet om, så passer til databasen, men måske du kan skrive koden lidt mere præcis, for jeg kan ikke få det til at virke, lidt langsom i optrækket :-)
Avatar billede w13 Novice
12. april 2008 - 15:26 #6
function DBDate(sDate)
    DBDate=year(sDate)&"-"&right("0"&month(sDate),2) &"-"& right("0"&day(sDate),2)
end function

Id=Session("Bruger")
Set rs2=conn.execute("UPDATE Brugere set Udloeb ='"&DBDate(DateAdd("d",20,CDate(rs("Udloeb"))))&"'" Where Id="&Id)
Avatar billede w13 Novice
12. april 2008 - 15:27 #7
I stedet for:

Udloebny = DateAdd("d",20,"" & rs("Udloeb") & "")

Id = Session("Bruger")
SQL2 = "UPDATE Brugere set Udloeb ='" & Udloebny & "'"

SQL2 = SQL2 & "  Where Id= " & Id

Set rs2 = conn.execute(SQL2)
Avatar billede mettecarsten Nybegynder
12. april 2008 - 15:30 #8
Giver fejlen:

Microsoft VBScript compilation error '800a03ee'

Expected ')'

/bruger/konto/test.asp, line 15

Set rs2=conn.execute("UPDATE Brugere set Udloeb ='"&DBDate(DateAdd("d",20,CDate(rs("Udloeb"))))&"'" Where Id="&Id)
----------------------------------------------------------------------------------------------------^
Avatar billede mettecarsten Nybegynder
12. april 2008 - 15:32 #9
Kører perfekt med:

function DBDate(sDate)
    DBDate=year(sDate)&"-"&right("0"&month(sDate),2) &"-"& right("0"&day(sDate),2)
end function

Id = Session("Bruger")
SQL2 = "UPDATE Brugere set Udloeb ='"&DBDate(DateAdd("d",20,CDate(rs("Udloeb"))))&"'"

SQL2 = SQL2 & "  Where Id= " & Id

Set rs2 = conn.execute(SQL2)
Avatar billede mettecarsten Nybegynder
12. april 2008 - 15:33 #10
Pointene er dine og velfortjente. Tusind tak for hjælpen.
Avatar billede w13 Novice
12. april 2008 - 15:34 #11
Så prøv:

function DBDate(sDate)
    DBDate=year(sDate)&"-"&right("0"&month(sDate),2) &"-"& right("0"&day(sDate),2)
end function

Udloeb=CDate(rs("Udloeb"))
Udloeb=DateAdd("d",20,Udloeb)
Id=Session("Bruger")
Set rs2=conn.execute("UPDATE Brugere set Udloeb ='"&DBDate(Udloeb)&"' Where Id="&Id)
Avatar billede w13 Novice
12. april 2008 - 15:34 #12
Ja, der var et " for meget. :)
Jeg takker for pointene.
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