17. juni 2003 - 08:07Der er
8 kommentarer og 2 løsninger
Global asa fil ?
Hejsa jeg har lavet følgende global asa men det ser ikke ud til at virke en der har et godt råd, eller kan se en fejl på dette ?
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Session_OnStart
End Sub
Sub Session_OnEnd ' ========================================================================== ' Sletter besøgendes kurv når han/hun forlader siden, ' dette gælder for ikke gennemførte handler. ' ==========================================================================
On Error Resume Next Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open = "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("data/shop.mdb") SQLStmt = "DELETE FROM Cart Where SubId =" & Session.SessionId & " AND SendOrder <> 1" Conn.Execute(SQLStmt) Conn.Close End Sub
Sub Application_OnStart
End Sub
Sub Application_OnEnd ' ========================================================================== ' Hvis serveren går ned eller genstartes sletter vi alle ikke færdig gjorte ' handler igennem shoppen. ' ==========================================================================
On Error Resume Next Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open = "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("data/shop.mdb") SQLStmt = "DELETE FROM Cart Where SendOrder <> 1" Conn.Execute(SQLStmt) Conn.Close End Sub </SCRIPT>
Du kan desværre ikke bruge denne metode, idet Server-objektet allerede er nedlagt af webserveren, når Session_OnEnd og Application_OnEnd kaldes. Måden at løse det på kan være at oprette dine objekter allerede i Session_OnStart og gemme dem i Session- eller Application-variable.
Men bare for en ordens skyld: Hvis serveren går ned (uplanlagt), kaldes der vist slet ikke nogen funktioner fra global.asa, idet der jo så ikke er nogen server til at udføre dem ;-)
Du kunne eksempelvis udføre din oprydning efter nedbrud (Applcation_OnEnd) i Application_OnStart i stedet for. For når den udføres må der ikke være nogen uafsluttede handler i databasen.
problemet med det eksempel er at den er ufuldstændig, idet den jo ikke viser hvordan sql'en skal udføres. Du er jo nødt til at have en åben database-connection - eller lave en. Jeg sagde noget vrøvl før: det er ikke hele Server-objektet, der er nedlagt, men Server.MapPath findes ikke i Session_OnEnd (spørg mig ikke hvorfor:-/) Men den findes i Session_OnStart, så du kan gemme din databasesti der i en session-variabel:
Sub Session_OnStart Session("dbsti") = Server.MapPath("data/shop.mdb") End Sub
Sub Session_OnEnd ' ========================================================================== ' Sletter besøgendes kurv når han/hun forlader siden, ' dette gælder for ikke gennemførte handler. ' ==========================================================================
On Error Resume Next Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open = "driver={Microsoft Access Driver (*.mdb)};dbq=" & Session("dbsti") SQLStmt = "DELETE FROM Cart Where SubId =" & Session.SessionId & " AND SendOrder <> 1" Conn.Execute(SQLStmt) Conn.Close End Sub
Sub Application_OnStart Application("dbsti") = Server.MapPath("data/shop.mdb")
On Error Resume Next Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open = "driver={Microsoft Access Driver (*.mdb)};dbq=" & Application("dbsti") SQLStmt = "DELETE FROM Cart Where SendOrder <> 1" Conn.Execute(SQLStmt) Conn.Close
End Sub
Sub Application_OnEnd ' ========================================================================== ' Hvis serveren går ned eller genstartes sletter vi alle ikke færdig gjorte ' handler igennem shoppen. ' ==========================================================================
On Error Resume Next Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open = "driver={Microsoft Access Driver (*.mdb)};dbq=" & Application("dbsti") SQLStmt = "DELETE FROM Cart Where SendOrder <> 1" Conn.Execute(SQLStmt) Conn.Close End Sub
Med denne får du også ryddet uafsluttede handler af, hvis de ikke er ryddet op pga et nedbrud el.lign.
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.