webForumDet fria alternativet

Global.asa trubbel som inte vill ge sig.

ASP

2 svar · 198 visningar · startad av T_Codez

Medlem sedan juli 2001458 inlägg
Frågan#1

Hej

Jag håller på med en funktion som ska updatera en databas via en textfil. Och jag skulle vilja att den ska köras en gång efter varje månads skifte.

Typ: Jag glider in på siten och HOPPSAN. Jag är den 1:a användaren som kommer in efter månadsskiftet. Och det ska inte spela någon roll om det är den 1:a eller den 5:e i månaden. Jag har börjat pussla med koder som jag hittat här på Wf som är inom samma område.

Jag har fått ihop följande:

sub session_onstart

'Variabel Deklarationer
dim rad, instream, FObj, rdb, items, sqlstr, steps, dbdel, strSQL, datum, GoDate, stepsigen
dim runcheck, dat, GoDates(12)

'Om senast uppdaterat är mindre än tidsintervallen (månad, operator som ger ett mummer, Inte riktigt säker på -1)
IF application("lastUpdated") < dateAdd("m", now(), -1) THEN

GoDates(0) = "1/1"
GoDates(1) = "2/1" 
GoDates(2) = "3/1"
GoDates(3) = "4/1" 
GoDates(4) = "5/1" 
GoDates(5) = "6/1"
GoDates(6) = "7/1"
GoDates(7) = "8/1" 
GoDates(8) = "9/1"
GoDates(9) = "10/1" 
GoDates(10) = "11/1" 
GoDates(11) = "12/1"

' tilldelar variabeln steps värdet 2
steps = 2

' variabeln datum får ett värde av funktionen date
datum = date
' variabeln i får värdet 0
i = 0

' Så länge i är skilt från 12
Do while i <> 12
' så kollar vi om steps är skilt(2) från 0
if steps <> 0 Then
' Då kollar vi om Cdate(datum) har samma värde som CDate(GoDates(i))
if CDate(datum) = CDate(GoDates(i)) Then
'Om rad 41 stämmer så minskar vi värdet i steps med 2. Så det blir 0
steps = steps - 2
else
'Om rad 41 inte stämmer så behåller vi värdet 2
steps = 2
end if
end if
' variabeln i ökar sitt värde med 1 sen loopar vi
i = i + 1
loop

'Gör medans variabeln steps är skilt från 2
Do while steps \<\> 2

	'Om steps har ett värde av 0
	if steps = 0 Then
		
		'Så tar vi bort alla poster som finns i tabellen
	   strSQL = "DELETE FROM tblartiklarlager WHERE fltartikelrad \<\> null "

		Set dbdel = Server.CreateObject("ADODB.Connection")
		dbdel.Open "int_hdxDSN"
		dbdel.Execute strSQL,,128

		'Sen ökar vi värdet i steps med 1
		steps = 1 + steps
		'stäng dbdel
		dbdel.close

	'Annars så...
	else
		'Öppnar vi databasen och lägger in nya värden i db:n
	   Set FObj = Server.CreateObject("Scripting.FileSystemObject")
	   Set InStream = FObj.OpenTextFile (Server.Mappath ("textfil.txt"),1, False)

	   Set rdb = Server.CreateObject("ADODB.Connection")
	       rdb.Open "int_hdxDSN"
	 
	    Do while not instream.AtEndOfStream
	     rad = instream.readLine
	     items = split(rad,";")
		  sqlstr = "insert into tblartiklarlager" &\_
		           "(fltartikelnr, fltProdGrupp, fltRefNr, fltsteelgrade, fltthickness, fltwidth, " &\_
		           "fltlength, fltcountrycode) VALUES ('" & items(0) &"','" & items(1) &"','" & items(2) &\_
		           "','" & items(3) &"'," & items(4) &"," & items(5) &"," & items(6) &",'"& items(7) &"')"
		   rdb.execute sqlstr,,128
		 loop
	   inStream.close
	   rdb.close
		steps = 1 + steps
	end if
loop

application("lastUpdated") = now()
END IF
end sub

Den käss helt okay. Men det som sker nu är att jag får följande error mess:

Error Type:
Microsoft VBScript runtime (0x800A000D)
Type mismatch: 'CDate'
/Hdx/global.asa, line 41

Då undrar jag givetvis vad det är som jag inte ser eller inte kan helt enkelt?

Tackzam för alla uppslag och ideer...

/TT

Medlem sedan juni 200032 967 inlägg
#2

Du försöker köra Cdate() på ett värde av typen "1/1" eller "12/1". Det kan jag inte förstå hur det ska fungera. Se till att värdena är "2002-01-01" resp. "2002-12-01" istället.

Medlem sedan juli 2001458 inlägg
#3

Det gick bättre...

Thankz :e

Det som jag upptäckt som ett nästa steg är att det endast sker uppdateringar den 1:a i månaden för den 1:a användaren och även för de övriga som går in på siten för första ggn (men det åtgärdas genom att flytta över den till "application on start" istället).

Kan man kringå det så att updateringen endast reagerar på den 1:a surfern och inga fler oberoende på klient och plats? Finns det några vedertagna kontroller för en sån funktion eller är det bara å"hitt på nått" kanske?

Sen om jag som 1:st surfer kommer in t ex. den 3:e i månaden så händer det ingenting. Hur kan man lösa det?

Anledningen till att jag vill ha det så här... är för att user1 kan sitta och titta på datat som uppdaterats. Och kommer det in en ny user2 så sätter även han igång en uppdatering på samma grej. Och det känns ju onödigt med fler updates på samma sak typ.

Själv ligger mina funderingar på att ha en kontroll i en txtfil... Kan de va nått?

Åter igen tackzam för alla tänkbara tips.

/TT

270 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)