"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