Hej Vilken databas? Access-exempel nedan: gör så som stefan skrev men bara så du vet så tas inte posten bört förrän någon går in på sidan. Man bör lägga in en spärr så att den inte körs vid varje sidladdning. Tänk om det varit Pellesoft, då hade delete frågan belastat databasen vid varje sidvisning. Hej Använd bara Andreas och mitt exempel ovan. Där Andreas har skrivit "' Do delete" slänger du in mina rader... och lägger det högst upp på den sida som du vill använda för att radera raderna. Hej Jag måste nog ändra mitt svar när jag funderat lite. Flytta upp tilldelningen. Hej! edit: missuppfattade - trodde man skulle lägga in koden i global.asaRadera post när datum är passerat
Hur gör jag på enklast möliga sätt så att poster "lStartDatum" raderas där datumet är passerat?
Mvh
BrännbuktSv: Radera post när datum är passerat
<%
' Öppna databaskoppling ( dbc, rs )
strsql = "DELETE FROM tabell WHERE IStartDatum<#" & Now() & "#"
rs.Open strsql,dbc,,1
' Stäng databaskoppling
%>
Sv: Radera post när datum är passerat
Så föreslagsvis att den koden körs först av allt på sidan - innan posterna skall visas.Sv:Radera post när datum är passerat
Gonom att skriva:
<%
If Application("DeleteExpire") < Now() Then
'Do delete
Application("DeleteExpire") = DateAdd("n", 3, Now())
End If
%>
Man kan ju se till att det inte blir några race conditions vilket inte har någon senifikant inverkan i detta fallet genom att skriva:
<%
Application.Lock
If Application("DeleteExpire") < Now() Then
'Do delete
Application("DeleteExpire") = DateAdd("n", 3, Now())
End If
Application.UnLock
%>
Sv: Radera post när datum är passerat
Behöver lite tydligare hjälp för att förstå hur det skall se ut.
Databas= Access
Tabellnamn = tblKurs
Fält namn=lstartDatum
Databskopplingen i en includefile
mvh
BrännbuktSv:Radera post när datum är passerat
Svårare än så borde det inte vara.Sv: Radera post när datum är passerat
Nu fungerar det och så här ser det ut.
<code>
If Application("DeleteExpire") < Now() Then
strsql ="DELETE FROM tblKurs WHERE lStartDatum<#" & Now() & "#"
Set objCon = openCon()
Set objRs = objCon.Execute(strSQL)
Application("DeleteExpire") = DateAdd("n", 3, Now())
End If </code>
Tack för hjälpen sätter tråden som löst senare...
mvh
BrännbuktSv:Radera post när datum är passerat
If Application("DeleteExpire") < Now() Then
Application("DeleteExpire") = DateAdd("n", 3, Now())
strsql ="DELETE FROM tblKurs WHERE lStartDatum<#" & Now() & "#"
Set objCon = openCon()
objCon.Execute(strSQL)
objCon.Close
End If
Detta bör minimera(eliminerar kan du bara göra med Application.lock) risken att flera frågan körs samtidigt.
Detta eftersom IIS är trådad.
Tänk dig följande scenario en användare begär din sida. Vilkoret i if satsen retunerar sant och databasen öppnas och frågan skickas.
Undertiden begär ytterligare en användare din sida. Vilkoret i if satsen retunerar fortfarande sant och databasen öppnas och frågan skickas.
Så kan det fortsätta tills en av användarna får tillbaks svaret från databasen och sätter applikations variablen.
Detta är för att databas anropt tar "lång tid" i sammanhanget. Att flytta upp tilldelningen är en förbättring.
Application lock skulle lösa det helt. Men jag misstänker att den kan ge bieffekter för prestandan då bara en av trådarna kan ar inne där.
Du bör lägga koden på en sida som inte körs allt för ofta.
T.ex. om du har ett bildgalleri, lägg koden när man postar nya bilder istället för sidan som visar dem. Du kan dölja bilder med ett villkor.
Sv: Radera post när datum är passerat
Jag valde att lägga koden i login filen (tillsvidare). Det är endast fyra stycken som loggar in för att lägga in nya kurser. Nackdelen är att det kan gå en tid mellan inloggningarna eftersom man oftast lägger in flera kurser samtidigt.
mvh
BrännbuktSv: Radera post när datum är passerat