"Stig Johansen" <wopr.dk@gmail.com> skrev i en meddelelse
news:4b3a12f3$0$276$14726298@news.sunsite.dk...
> "Henning Smed" <henning at smeds dk> wrote in message
> news:4b3a050d$0$8568$d40e179e@nntp06.dk.telia.net...
>> Hej,
>> Jeg har en MSSQL ASP hjemmeside
> [snip]
>> Har I nogle forslag til forbedring af databaseopslag og script?
>
> Ja, men det er lidt svært at overskue hvad du gør p.t.
>
> Hvis du beskriver hvad det er du vil, og evt. poster en generate af
> tabellen
> med, så kan du måske få nogle forslag.
Det er en simpel tabel med 7 rækker
www.smeds.dk/tblSSEbat.xls
>
> Det med 'hver gang brugeren logger på', kan jeg ikke få til at hænge
> sammen
> med din SQL, hvor der ikke er nogen Where - er det den rigtige du har
> postet?
Der er ingen WHERE for hver gang en bruger logger på på køres database
opslaget:
<%SQLstmt = "SELECT Id, StationCode, DateWorker, DateSpare, Modified,
ModifiedBy, NotifyWorker, NotifySpare FROM tblSSEbat ORDER BY StationCode
ASC"%>
Opslaget giver ikke væsentlig længere login tid, tabellen er jo kun på 7
rækker, og når forespørgselen køres ved login, er jeg sikker på at server
side scriptet køres regelmæssigt.
Afhængig af om dags dato er et lige eller ulige år trækker jeg 11 eller 23
måneder fra dags dato, og sammenligner med rs("DateWorker"), og omvendt for
rs("DateSpare") for at opfylde betingelsen:
Spare batterier udskiftes hvert andet år i lige årstal.
Worker batterier udskiftes hvert andet år i ulige årstal.
Hvis der er mere end fire måneder mellem datoen for sidste E-mail
(rs("NotifyWorker")) eller (rs("NotifySpare")), og dags dato sendes en
e-mail når batterilevetiden er overskredet:
<%DO WHILE NOT rs.EOF
WorkerSpare = ""
'check if Worker replacemet year is even or odd
IF Year(rs("DateWorker")) MOD 2 = 0 THEN
ReplaceMonthWorker = -11
'The year is EVEN
ELSE
ReplaceMonthWorker = -23
'The Year is ODD
END IF
'Check worker dates
IF rs("DateWorker") < DateAdd("m", ReplaceMonthWorker, Date()) AND
rs("NotifyWorker") < DateAdd("m", -4, Date()) Then
WorkerSpare = "Worker Disk Array battery is "
SQLstmt = "UPDATE DISTINCTROW tblSSEbat SET NotifyWorker = (" &
DateToSql(Date()) & ") WHERE StationCode = '" & rs("StationCode") &"'"
Conn.Execute(SQLstmt)
END IF
'check if Spare replacemet year is even or odd
IF Year(rs("DateSpare")) MOD 2 = 0 THEN
ReplaceMonthSpare = -23
'The year is EVEN
ELSE
ReplaceMonthSpare = -11
'The Year is ODD
END IF
'Check Spare dates
IF rs("DateSpare") < DateAdd("m", ReplaceMonthSpare, Date()) AND
rs("NotifySpare") < DateAdd("m", -4, Date()) Then
IF WorkerSpare <> "" THEN
WorkerSpare = "Worker and Spare Disk Array batteries are "
ELSE
WorkerSpare = "Spare Disk Array battery is "
END IF
SQLstmt = "UPDATE DISTINCTROW tblSSEbat SET NotifySpare = (" &
DateToSql(Date()) & ") WHERE StationCode = '" & rs("StationCode") &"'"
Conn.Execute(SQLstmt)
END IF
IF WorkerSpare <> "" THEN
'send e-mail notification
%>
Hvis en bruger modtager en e-mail i december, og først opdater databasen
året efter, vil han med det nuværende script blive bedt om at udskifte igen
efter 11 måneder, selv om
det først skulle ske efter 23 måneder. Pga. reglen om udskiftning af Spare i
lige år og worker i ulige år.
Hvordan løser jeg den?
Det er et midlertidigt problem, når alle batterier er udskiftet efter
reglerne om lige og ulige år, kan jeg bare sende en e-mail 23 måneder efter
sidste udskiftning.
Godt Nytår
Henning