/ 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
Ændring af databasepost ud fra dato
Fra : Claus Skaarup \(Arbe~


Dato : 15-03-07 14:04

Hej. For det første: Jeg er IKKE en ørn til asp, men jeg kan godt gennemskue
principperne, så bær over med mig

Here goes:

På min hjemmeside har jeg en kalender, hvor man kan søge på kalenderemner,
dato, måned osv.

Denne funktion: old1 = DATEADD("d",-90,date) går ind og ændrer et felt i
databaseposten, så den ikke bliver vist i kalenderen, hvis den er over 90
dage gammel. (et "0" bliver ændret til et "1" i et felt i databasen. Alle
poster med art=1 bliver ikke vist i kalenderen) Jeg vil gerne have lavet det
sådan, at i stedet for at alle poster ældre end 90 dage bliver ændret, så
ændres i stedet i forhold til en sæson. Dvs. Alle poster indenfor
intervallet 1/8-06 til 1/7-07 bliver vist. Ældre bliver ikke vist.
Det spændende er så, at det også gerne skulle virke af sig selv, når sæsonen
hedder 07/08. Altså 1/8-07-1/7-08.

Er der nogen, der har et bud på en løsning, så er jeg en taknemmelig mand.

PS: Indholdet i datofeltet ser sådan ud f.eks: "15-03-2007"

Mvh. Claus



 
 
Jørn Andersen (15-03-2007)
Kommentar
Fra : Jørn Andersen


Dato : 15-03-07 16:29

On Thu, 15 Mar 2007 14:03:38 +0100, "Claus Skaarup \(Arbejde\)"
<claus@limfjordsteatret.fejl> wrote:

>På min hjemmeside har jeg en kalender, hvor man kan søge på kalenderemner,
>dato, måned osv.
>
>Denne funktion: old1 = DATEADD("d",-90,date) går ind og ændrer et felt i
>databaseposten, så den ikke bliver vist i kalenderen, hvis den er over 90
>dage gammel. (et "0" bliver ændret til et "1" i et felt i databasen. Alle
>poster med art=1 bliver ikke vist i kalenderen) Jeg vil gerne have lavet det
>sådan, at i stedet for at alle poster ældre end 90 dage bliver ændret, så
>ændres i stedet i forhold til en sæson. Dvs. Alle poster indenfor
>intervallet 1/8-06 til 1/7-07 bliver vist. Ældre bliver ikke vist.
>Det spændende er så, at det også gerne skulle virke af sig selv, når sæsonen
>hedder 07/08. Altså 1/8-07-1/7-08.

Er det altid den aktuelle sæson, der skal vises? Altså sådan at hvis fx
den aktuelle dato ligger imellem 1.8.06 og 1.7.07, så vises denne sæson?
Og hvad skal der i givet fald vises mellem 1.7.07 og 1.8.07?

Hvis vi fx går ud fra, at sæsonen 1.8.06-1.7.07 skal vises frem til
1.8.07, kunne man lave noget i retning af:

datStartAar = Year(Date)
If Month(Date) < 8 Then datStartAar = datStartAar - 1

strSqlStartDato = "DateSerial(" & datStartAar & ", 8, 1)"
strSqlSlutDato = "DateSerial(" & datStartAar + 1 & ", 7, 1)"

Det putter du så bare ind i din betingelse:
strSql = "... WHERE [datofelt] BETWEEN " & strSqlStartDato & _
" AND " & strSqlSlutDato & ";"

>PS: Indholdet i datofeltet ser sådan ud f.eks: "15-03-2007"

Skidt med, hvordan det "ser ud" - hvis det er gemt i et dato-felt, så
indeholder det en fuld dato-tid-værdi (som du så tilfældigvis har valgt
at præsentere på en bestemt måde i dit database-program). Værdien i
feltet ændrer sig ikke, selv om du ændrer format.

Ovenstående er under forudsætning af, at det er en MS Access db, da den
bruger de indbyggede dato-funktioner i den.


Good luck,
Jørn

--
Jørn Andersen, Brønshøj

ALLE danske tropper HJEM fra Irak, NU
Demonstrér 17. marts: www.nejtilkrig.dk

Claus Skaarup \(Arbe~ (19-03-2007)
Kommentar
Fra : Claus Skaarup \(Arbe~


Dato : 19-03-07 14:10

>
> Hvis vi fx går ud fra, at sæsonen 1.8.06-1.7.07 skal vises frem til
> 1.8.07, kunne man lave noget i retning af:
>
> datStartAar = Year(Date)
> If Month(Date) < 8 Then datStartAar = datStartAar - 1
>
> strSqlStartDato = "DateSerial(" & datStartAar & ", 8, 1)"
> strSqlSlutDato = "DateSerial(" & datStartAar + 1 & ", 7, 1)"
>
> Det putter du så bare ind i din betingelse:
> strSql = "... WHERE [datofelt] BETWEEN " & strSqlStartDato & _
> " AND " & strSqlSlutDato & ";"
>
Jeg har lidt svært ved at gennemskue det ...

Kodestykket ser således ud:

-----
Conn.Open DSN
Function DateToSql(Value)
DateToSql = "DateSerial(" & Year(Value) & ", " & Month(Value) & ", " &
Day(Value)& ") "
End Function
old1 = DATEADD("d",-90,date) // Her findes en dato 90 dage bagude
old = DateToSql(old1)

strSQL7 = "Update kalender set "
strSQL7 = strSQL7 & "art='1' " // Her sættes feltet "art" til 1
strSQL7 = strSQL7 & "Where Dato< " & old & "" // , hvis kalenderemnet er
over 90 dage gammelt.
Conn.Execute(strSQL7)
-----

Så feltet "art"
skal altså sættes til 1, hvis kalenderemnet ligger før denne sæson.

Jeg kan ikke knække den. Det er måske fordi det er mandag ...

Mvh. Claus



Jørn Andersen (20-03-2007)
Kommentar
Fra : Jørn Andersen


Dato : 20-03-07 05:48

On Mon, 19 Mar 2007 14:10:05 +0100, "Claus Skaarup \(Arbejde\)"
<claus@limfjordsteatret.fejl> wrote:

>> Hvis vi fx går ud fra, at sæsonen 1.8.06-1.7.07 skal vises frem til
>> 1.8.07, kunne man lave noget i retning af:
>>
>> datStartAar = Year(Date)
>> If Month(Date) < 8 Then datStartAar = datStartAar - 1
>>
>> strSqlStartDato = "DateSerial(" & datStartAar & ", 8, 1)"
>> strSqlSlutDato = "DateSerial(" & datStartAar + 1 & ", 7, 1)"
>>
>> Det putter du så bare ind i din betingelse:
>> strSql = "... WHERE [datofelt] BETWEEN " & strSqlStartDato & _
>> " AND " & strSqlSlutDato & ";"

>Jeg har lidt svært ved at gennemskue det ...
>
>Kodestykket ser således ud:
>
>-----
>Conn.Open DSN
>Function DateToSql(Value)
>DateToSql = "DateSerial(" & Year(Value) & ", " & Month(Value) & ", " &
>Day(Value)& ") "
>End Function
>old1 = DATEADD("d",-90,date) // Her findes en dato 90 dage bagude
>old = DateToSql(old1)
>
> strSQL7 = "Update kalender set "
> strSQL7 = strSQL7 & "art='1' " // Her sættes feltet "art" til 1
>strSQL7 = strSQL7 & "Where Dato< " & old & "" // , hvis kalenderemnet er
>over 90 dage gammelt.

Hvis du bruger mit eksempel ovenfor, så kunne det se sådan ud:
' Aktuelt år
datStartAar = Year(Date)
' Hvis vi er i foråret, startede sæsonen sidste år
If Month(Date) < 8 Then datStartAar = datStartAar - 1
' Sæson-start er 1. aug. i start-året
' Her skrevet som Access-SQL-streng
strSqlStartDato = "DateSerial(" & datStartAar & ", 8, 1)"

strSQL7 = "UPDATE kalender SET" & _
" art='1'" & _
" WHERE Dato < " & strSqlStartDato & ";"

Eller, hvis du vil bruge din egen DateToSql-funktion:
' Aktuelt år
datStartAar = Year(Date)
' Hvis vi er i foråret, startede sæsonen sidste år
If Month(Date) < 8 Then datStartAar = datStartAar - 1
' Sæson-start er 1. aug. i start-året
' Her skrevet som dato-værdi
datStartDato = DateSerial(datStartAar, 8, 1)
' Dato-værdi konverteret til Access-SQL-streng
strSqlStartDato = DateToSql(datStartDato)

strSQL7 = "UPDATE kalender SET" & _
" art='1'" & _
" WHERE Dato < " & strSqlStartDato & ";"

> Conn.Execute(strSQL7)
>-----
>
>Så feltet "art"
>skal altså sættes til 1, hvis kalenderemnet ligger før denne sæson.

Et par spørgsmål:
1. Hvorfor vil du lave denne markering?
Fordelen ved at gøre det er, at du får en simplere forespørgsel.

Ulempen er, at du skal huske at opdatere dette felt i hver sommerferie
(og når du tilføjer arrangmenter - men ikke for arrangementer, som
ligger i en ny sæson!)
Og du behøver jo ikke have feltet, da du kan beregne aktuel sæson ud fra
aktuel dato - og så forespørge på, om arrangementet ligger inden for
dine sæson-grænser.

2. *Hvis* du vil have feltet - hvorfor laver du det så som et
tekst-felt?
Hvis du laver det som et Ja/Nej-felt, får du en simplere og hurtigere
forespørgsel.

>Jeg kan ikke knække den. Det er måske fordi det er mandag ...

Håber det hjalp dig en smule derhenad.


Good luck!

--
Jørn Andersen,
Brønshøj

Søg
Reklame
Statistik
Spørgsmål : 177511
Tips : 31968
Nyheder : 719565
Indlæg : 6408599
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste