webForumDet fria alternativet

Köras först på dygnet

ASP

14 svar · 393 visningar · startad av alfa

Medlem sedan juni 2000202 inlägg
Frågan#1

Jag skulle vilja köra en sida som uppdaterar en del saker en gång
per dygn.
Det skulle vara bra om den som gick in på sidan först efter 00.00
körde den och sedan skulle den inte köras förän nästa dygn igen.

Är detta möjligt.

Medlem sedan juni 2000202 inlägg
#2

Skulle ha varit

Medlem sedan feb. 200112 078 inlägg
#3

Alfa, det går att redigera det i ditt inlägg. ;)

Nu till problemet; det är klart att det går. Allt går. :)

Jag skulle nog gjort en funktion i global.asa, session_onStart, som gör din uppdatering, sedan skapar en application-variabel som innehåller tiden och datumet. Med funktionen dateDiff jämför vi sedan (återigen i session_OnStart) datumet i variabeln med tiden just då, kollar ifall det är > 24 h sedan och isåfall, gör en ny uppdatering.

Medlem sedan mars 20002 836 inlägg
#4

Det med att kolla om diffen är större än 24 timmar blir nog inte så bra.
Det alfa vill är ju att när den första besökare på det nya dygnet kommer in ska vissa funktioner/uppdateringar köras.

Tänket är rätt. I global.asa subben Session_OnStart() kör du de uppdateringar du vill köra. Spar dagens datum i en application variabel. Kontrollera sedan det datumet för att scriptet ska veta när datumet har ändrats.

Sub Session_OnStart()
'## -- kontrollera om datumet har ändrats --
If Application("LastRunDate") < Date() Then

	'## -- kör de uppdateringar du vill göra --

	'## -- spara ned det nya datumet --
	Application("LastRunDate") = Date()
End If
End Sub

cya,
PatrikB

Medlem sedan feb. 200112 078 inlägg
#5

Korrekt. :) :r

Medlem sedan juni 2000202 inlägg
#6

Kan man inte kontakt en databas i global.asa eller har jag
fattat fel är det inte så det är tänkt att det ska fungera.
Det händer ingenting.

Alfa

Sub Session_OnStart()
If Application("LastRunDate") < Date() Then
dbPath = Server.Mappath("katalog/data/databas.mdb")
set con = Server.CreateObject("ADODB.Connection")
con.open "provider=microsoft.jet.oledb.4.0;DATA source = " & dbPath

	Set rs = Server.CreateObject("ADODB.Recordset")	
	rs.Open "SELECT \* FROM test where 1 = 2", Con, 1 , 2
	rs.addnew
		rs("data") = "data"
	rs.update
	rs.close
	set RS = nothing
	set con = nothing

	Application("LastRunDate") = Date()
End If

End Sub

Medlem sedan dec. 200012 464 inlägg
#7
If cdate(Application("LastRunDate")) < Date() Then
Medlem sedan juni 2000202 inlägg
#8

Problemet ligger inte i If Application("LastRunDate") < Date() Then
Jag har stängt av den men det händer inget ändå.
jag vill att databasen ska uppdateras.

Måste ta ett problem i taget.

Alfa

Medlem sedan dec. 200012 464 inlägg
#9

Om du slutar att använda recordset då

con.execute "insert into test(data) values('data')",,128
con.close
set con = nothing
Medlem sedan mars 20002 836 inlägg
#10

om du ändrar denna:

dbPath = Server.Mappath("katalog/data/databas.mdb")

så att sökvägen går från wwwroot:

dbPath = Server.Mappath("/min-db-mapp/databas.mdb")

Du kan även kolla på detta viset att pathen är riktig:

dbPath = Server.Mappath("/min-db-mapp/databas.mdb") 
Application("dbPath") = dbPath

sedan på sidan (en asp-sida) så kollar du att det finns ngt i den variabeln och om sökvägen är rätt: <% =Application("dbPath")%>

cya,
PatrikB

Medlem sedan juni 2000202 inlägg
#11

nu funkar nästan allt pefekt utan

'Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data/databas.mdb")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\inetpub\wwwroot\mapp\data\databas.mdb"

Det finns flera sidor som man kan starta med och går man in på
en annan sida blir det fel.Har just nu har jag löst det med den undre raden men ibland flyttar webbhotelet disk och då slutar det funka.

Är det någon som har en lösning på det.

Alfa

Medlem sedan feb. 200112 078 inlägg
#12
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/data/databas.mdb")

Om du har ett / framför den virtuella sökvägen, kommer server.mappath-funktionen ta för givet att mappen 'data' ligger i roten (längst ner i strukturen) och kör därifrån, oavsett vilken sida/mapp du är på/i.

Jag antar med denna kod att mappen 'data' ligger i, just roten.

[redigering]Du skall aldrig hårdkoda sökvägen till databasen, det är just därför server.mappath finns. Hårdkodning ger upphov till superduperkrångel vid flyttning av systemet. [/redigering]

Medlem sedan mars 20002 836 inlägg
#13

Du skall aldrig hårdkoda sökvägen till databasen, det är just därför server.mappath finns. Hårdkodning ger upphov till superduperkrångel vid flyttning av systemet.

Beror ju på vart man sparar sökvägen (connection strängen) någonstans. En connection sträng är perfekt att spara i en Application variabel som sätts i tex global.asa. Då spelar det ingen roll om du "hård kodar sökvägen" eller använder Server.MapPath ...... e fortfarande bara ett stället att ändra på :e

cya,
PatrikB

Medlem sedan feb. 200112 078 inlägg
#14

Men.. ;)

.. om man hårdkodar en sökväg och byter server, kan de ha en annan trådstruktur ovanför sin webroot. Det är en ändring för mycket. :p

Men ok, superduperkrångel är väl att ta i. Och jag håller med dig om att application är bästa lagringen för conn-strängen, det visste jag redan innan.

Medlem sedan mars 20023 561 inlägg
#15

Eller kan man ha en include-fil som innehåller databas-öppning och databas-stängning som sub-funktioner.

276 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)