webForumDet fria alternativet

Räknar fel?

ASP

29 svar · 633 visningar · startad av Bosse168

Medlem sedan nov. 20031 018 inlägg
Frågan#1

Varför blir det aldrig någon ny vecka när jag använder denna koden?

'----------------------------- Räknaren --------------

Set rstRecSet = Connect.Execute("SELECT * FROM raknare where ip = '"& Request.ServerVariables("REMOTE_ADDR") &"' AND datum='" & Date & "'")

if rstRecSet.eof then

'-------------- Plusar på en unik i veckan -----------------------

SQL = "SELECT * From raknare_week WHERE nr <> "& DatePart("ww", Date(), 2) &" AND YEAR(datum) = YEAR(CURDATE()) Order By id Desc"

Set RsWeek = Connect.Execute(SQL)

Do until RsWeek.EOF

IF DatePart("ww", Date(), 2) = DatePart("ww", RsWeek("datum"), 4) then

Connect.Execute("UPDATE raknare_week SET unika = unika + 1 WHERE id = "& RsWeek("id") &"")

nyWeek = 0

End IF

RsWeek.MoveNext
Loop
RsWeek.Close : Set RsWeek = nothing
'-------------------- OM VECKAN INTE FINNS MED -------------------------

IF nyWeek <> 0 then
Connect.Execute("INSERT INTO raknare_week (nr,antal,unika,datum) VALUES ("& DatePart("ww", Date(), 2) &",1,1,'"& Now &"')")
END IF
'-------------- SLUT Plusar på en unik i veckan SLUT-----------------

och sedan lite andra kollar och plusningar.

När jag skriver ut vecka SQL satsen så ser den ut så här:
SELECT * From raknare_week WHERE nr <> 19 AND YEAR(datum) = YEAR(CURDATE()) Order By id Desc

Medlem sedan feb. 20011 198 inlägg
#2

Vad jag kan se blir nyWeek alltid 0.
Alltså körs aldrig

Connect.Execute("INSERT INTO raknare_week (nr,antal,unika,datum) VALUES ("& DatePart("ww", Date(), 2) &",1,1,'"& Now &"')")
Medlem sedan nov. 20031 018 inlägg
#3

Då borde det alltså räcka med att sätta Else före nyWeek = 0
Och ändra IF nyWeek <> 0 then till IF nyWeek = 0 then

Medlem sedan nov. 20031 018 inlägg
#4

Eller detta borde väl funka?

'----------------------------- Räknaren --------------

Set rstRecSet = Connect.Execute("SELECT * FROM raknare where ip = '"& Request.ServerVariables("REMOTE_ADDR") &"' AND datum='" & Date & "'")

if rstRecSet.eof then

'-------------- Plusar på en unik i veckan -----------------------

SQL = "SELECT * From raknare_week WHERE nr <> "& DatePart("ww", Date(), 2) &" AND YEAR(datum) = YEAR(CURDATE()) Order By id Desc"

Set RsWeek = Connect.Execute(SQL)

Do until RsWeek.EOF

IF DatePart("ww", Date(), 2) = DatePart("ww", RsWeek("datum"), 4) then

Connect.Execute("UPDATE raknare_week SET unika = unika + 1 WHERE id = "& RsWeek("id") &"")

Else
'-------------------- OM VECKAN INTE FINNS MED -------------------------
Connect.Execute("INSERT INTO raknare_week (nr,antal,unika,datum) VALUES ("& DatePart("ww", Date(), 2) &",1,1,'"& Now &"')")

End IF

RsWeek.MoveNext
Loop
RsWeek.Close : Set RsWeek = nothing
Medlem sedan apr. 2004778 inlägg
#5

Eller detta borde väl funka?

Prova så märker du om det funkar eller inte. ;)

Medlem sedan nov. 20031 018 inlägg
#6

Den lägger inte in datumet på den nya veckan utan skapar bara en ny rad..

Medlem sedan apr. 2004778 inlägg
#7

Menar du att den alltid gör INSERT och aldrig UPDATE?

IF DatePart("ww", Date(), 2) = DatePart("ww", RsWeek("datum"), 4) then

Du har 2 i din ena DatePart och 4 i den andra. Har du provat att ha samma på båda sidorna så att jämförelsevärdet kan bli samma?

Medlem sedan nov. 20031 018 inlägg
#8

Det löste sig när jag la till svensk tid:
Session.LCID = 1053

Medlem sedan nov. 20031 018 inlägg
#9

Fick göra om lite i koden till för att få det att funka :stud
Någon som vet hur man kan optimera den eller bara göra den bättre :r

'----------------------------- Räknaren --------------
Set rstRecSet = Connect.Execute("SELECT * FROM raknare where ip = '"& Request.ServerVariables("REMOTE_ADDR") &"' AND datum='" & Date & "'")

if rstRecSet.eof then

'-------------- Plusar på en unik i veckan -----------------------

SQL = "SELECT * From raknare_week WHERE nr = '"& DatePart("ww", NOW(), 4) &"' AND YEAR(datum) = YEAR(CURDATE()) Order By id Desc"

Set RsWeek = Connect.Execute(SQL)

IF not RsWeek.EOF Then

Connect.Execute("UPDATE raknare_week SET unika = unika + 1 WHERE nr = '"& DatePart("ww", NOW(), 4) + 1 &"' AND YEAR(datum) = YEAR(CURDATE())")

Else
'-------------------- OM VECKAN INTE FINNS MED -------------------------
SQL = "INSERT INTO raknare_week (nr,antal,unika,datum) VALUES ("& DatePart("ww", Date(), 2) &",1,1,'"& Now &"')"

Connect.Execute(SQL)

End IF

RsWeek.Close : Set RsWeek = nothing
'-------------- SLUT Plusar på en unik i veckan SLUT-----------------
Medlem sedan nov. 20017 144 inlägg
#10

En god regel är att börja med att ta bort alla "SELECT *..." och byta ut dem till de aktuella kolumnnamnen.
På alla update, delete och insert så lägger du till ,,128

Connect.Execute(SQL),,128

Som betyder att inget skall returneras.

Medlem sedan nov. 20031 018 inlägg
#11

Ok detta är fixat några mer förslag? :)

Medlem sedan nov. 20031 018 inlägg
#12

Ska man sätta ,,128 efter en COUNT(id) SQL sats?

Medlem sedan sep. 20011 722 inlägg
#13

Kör du med option explicit och dimmar alla variablar? Kapar tiden rätt bra faktiskt.

Medlem sedan juni 200032 967 inlägg
#14

Ska man sätta ,,128 efter en COUNT(id) SQL sats?

Nej, inte när du hämtar data. Parametern 128 betyder adExecuteNoRecords, och meddelar att inget skall hämtas, så det ska inte skapas något recordset.

Medlem sedan nov. 20031 018 inlägg
#15

"dimmar" variablarna gör jag men använder inte option explicit utan denna kod. Ska jag slänga in option explicit där också för att få bättre prestanda?

<%@ LANGUAGE="VBSCRIPT" %>
<% Response.Expires=-1
Response.Buffer = True
Session.LCID = 1053
%>
Medlem sedan sep. 20011 722 inlägg
#16

Ja, kasta in option explicit högst upp på sidan.

Medlem sedan nov. 20031 018 inlägg
#17

Då får jag detta fel mess:
Active Server Pages error 'ASP 0140'

Page Command Out Of Order

/demo.asp, line 2

The @ command must be the first command within the Active Server Page.

Medlem sedan juni 200032 967 inlägg
#18

Inte helt högst upp. Ska du ha med @-direktivet måste det vara på översta raden.

Medlem sedan nov. 20031 018 inlägg
#19

Och sätter jag in option explicit efter <%@ LANGUAGE="VBSCRIPT" %>
så funkar inte min databas koppling.

Fel messet:
Microsoft VBScript runtime error '800a01f4'

Variable is undefined: 'Connect'

Och min koppling ser ut så här:

Set Connect = Server.CreateObject("ADODB.Connection")
'----- Gamla
Connect.Open = ("Driver={MySQL ODBC 3.51 Driver};Server=ADRESSEN;Port=3306;Database=XXXXX;UID=XXXXXX;PWD=XXXXX;")
Medlem sedan juni 200032 967 inlägg
#20

Har du Option Explicit måste du deklarera alla variabler. Så, det är bara att sätta igång. :)

278 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
146 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)