Avatar billede vb-mo Nybegynder
17. juni 2003 - 08:07 Der 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>

/vb-mo
Avatar billede tjol Nybegynder
17. juni 2003 - 09:03 #1
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 ;-)

/torben
Avatar billede tjol Nybegynder
17. juni 2003 - 09:06 #2
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.

/torben
Avatar billede vb-mo Nybegynder
17. juni 2003 - 10:37 #3
Ok så langt så godt jeg vil kigge lidt på det og om ikke andet kan det jo laves i ren asp kode :o)

/vb-mo
Avatar billede dta Nybegynder
17. juni 2003 - 10:41 #4
Avatar billede vb-mo Nybegynder
17. juni 2003 - 10:50 #5
dta >> Ok og den afviger ikke meget fra min og vi er enige om at global.asa skal ligge i www roden ikke sandt ?
Avatar billede dta Nybegynder
17. juni 2003 - 10:53 #6
Jo, Global.asa skal ligge i roden.

Forskellen mellem det du har lavet og dette er som <tjol> skriver at server objektet er nedlagt, men det er  sessionen ikke.
Avatar billede tjol Nybegynder
17. juni 2003 - 11:04 #7
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.

/torben
Avatar billede vb-mo Nybegynder
17. juni 2003 - 11:10 #8
Ok jeg tester lige :o)
Avatar billede vb-mo Nybegynder
17. juni 2003 - 11:14 #9
Det virker tak for hjælpen begge to :o)
Avatar billede tjol Nybegynder
17. juni 2003 - 11:15 #10
you are welcome :-)

/torben
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester