Just nu i M3-nätverket
Gå till innehåll

Räknings loop som inte räknar...


Jeppson75

Rekommendera Poster

Jag har en loop som skall räkna antalet mål och passnings poäng i en databas. Loopen ser ut så här:

[log]

[color="#006400"]'Kontrollera aktuell spelare (PlayerNr) gjort mål[/color]
[color="#0000ff"]Do[/color] [color="#0000ff"]While[/color] [color="#0000ff"]Not[/color] RecSet.EOF 
[color="#0000ff"]Dim[/color] temp_goal
 temp_goal = 0
[color="#0000ff"]Dim[/color] temp_ass
 temp_ass = 0
[color="#0000ff"]Do[/color] [color="#0000ff"]While[/color] [color="#0000ff"]Not[/color] objRS.EOF         			                    		
[color="#006400"]'Loopa igenom hela tabellen för game_events[/color]
		[color="#0000ff"]If[/color] (RecSet([GRÅ]"PlayerNR"[/GRÅ]) = objRS([GRÅ]"GoalPlayer"[/GRÅ])) [color="#0000ff"]Then[/color]
		tempGoal=tempGoal+1

	[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
	[color="#0000ff"]If[/color] (RecSet([GRÅ]"PlayerNR"[/GRÅ]) = objRS([GRÅ]"GoalAssPlayer1"[/GRÅ]) OR RecSet([GRÅ]"PlayerNr"[/GRÅ]) = objRS([GRÅ]"GoalAssPlayer2"[/GRÅ])) [color="#0000ff"]Then[/color]
		temp_ass=temp_ass+1
	[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]		
objRS.MoveNext
        [color="#0000ff"]Loop[/color]
     [b]Response[/b].Write(RecSet([GRÅ]"PlayerNR"[/GRÅ]))
 [b]Response[/b].Write([GRÅ]" "[/GRÅ])
 [b]Response[/b].Write (temp_goal)
 [b]Response[/b].Write([GRÅ]" "[/GRÅ])
 [b]Response[/b].Write (temp_ass)
 [b]Response[/b].Write ([GRÅ]"<br>"[/GRÅ])

RecSet.MoveNext
[color="#0000ff"]Loop[/color]

Connect.Close
[color="#0000ff"]Set[/color] RecSet = [color="#0000ff"]Nothing[/color]
[color="#006400"]'Set objRS = nothing[/color]
[color="#0000ff"]Set[/color] Connect = [color="#0000ff"]Nothing[/color]

[/log]

 

Detta resulterar i följande resultat:[log]

12 0 0

24 0 0

17 0 0

23 0 0

7 0 0

2 0 0

6 0 0

19 0 0

1 0 0

27 0 0

4 0 0

8 0 0

9 0 0

3 0 0

15 0 0

35 0 0

11 0 0

13 0 0

22 0 0

29 0 0

25 0 0

14 0 0

16 0 0

61 0 0

18 0 0

28 0 0

[/log]

 

Detta innebär att Loopen går igenom alla nummer som skall kollas, men alla värden blir 0. Databasen innehåller en massa som skall summeras, så det borde bli en väldig massa olika siffror om det hade funkat...

 

/Jeppson75

 

[inlägget ändrat 2005-05-17 21:34:54 av Jeppson75]

Länk till kommentar
Dela på andra webbplatser

Hur ser de SQL-satser ut som befolkar RecSet och objRS?

Är det temp_goal eller tempGoal ?

 

/Cluster

------------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

------> http://eforum.kicks-ass.net <------

 

Länk till kommentar
Dela på andra webbplatser

Så här ser hela koden ut, med SQL-sats och allt:

[log]

[MÄRK]<%[/MÄRK]
[color="#0000ff"]Set[/color] Connect = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ]) 
Connect.Open [GRÅ]"driver={Microsoft Access Driver (*.mdb)};dbq="[/GRÅ] & [b]Server[/b].MapPath([GRÅ]"../../../DB/A-Lag.mdb"[/GRÅ])&[GRÅ]";"[/GRÅ]

[color="#0000ff"]Set[/color] RecSet = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Recordset"[/GRÅ])
[color="#0000ff"]Set[/color] objRS = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Recordset"[/GRÅ])
PlayerNR = [GRÅ]"SELECT PlayerNr FROM player"[/GRÅ]
RecSet.Open PlayerNR, Connect


Addera = [GRÅ]"SELECT * FROM game_events WHERE GoalTeam = 'Bäcken HC'"[/GRÅ]
objRS.Open Addera, Connect                                         	

[color="#006400"]'Kontrollera aktuell spelare (PlayerNr) gjort mål[/color]
[color="#0000ff"]Do[/color] [color="#0000ff"]While[/color] [color="#0000ff"]Not[/color] RecSet.EOF 
[color="#0000ff"]Dim[/color] temp_goal
 temp_goal = 0
[color="#0000ff"]Dim[/color] temp_ass
 temp_ass = 0
[color="#0000ff"]Do[/color] [color="#0000ff"]While[/color] [color="#0000ff"]Not[/color] objRS.EOF         			                    		
[color="#006400"]'Loopa igenom hela tabellen för game_events[/color]
   [color="#006400"]'Kontrollera gjorda mål[/color]
		[color="#0000ff"]If[/color] (RecSet([GRÅ]"PlayerNR"[/GRÅ]) = objRS([GRÅ]"GoalPlayer"[/GRÅ])) [color="#0000ff"]Then[/color]
		tempGoal=tempGoal+1
	[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
   [color="#006400"]'Kontrollera gjora ass[/color]
	[color="#0000ff"]If[/color] (RecSet([GRÅ]"PlayerNR"[/GRÅ]) = objRS([GRÅ]"GoalAssPlayer1"[/GRÅ]) OR RecSet([GRÅ]"PlayerNr"[/GRÅ]) = objRS([GRÅ]"GoalAssPlayer2"[/GRÅ])) [color="#0000ff"]Then[/color]
		temp_ass=temp_ass+1
	[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

objRS.MoveNext
        [color="#0000ff"]Loop[/color]

     [b]Response[/b].Write(RecSet([GRÅ]"PlayerNR"[/GRÅ]))
 [b]Response[/b].Write([GRÅ]" "[/GRÅ])
 [b]Response[/b].Write (temp_goal)
 [b]Response[/b].Write([GRÅ]" "[/GRÅ])
 [b]Response[/b].Write (temp_ass)
 [b]Response[/b].Write ([GRÅ]"<br>"[/GRÅ])
    [color="#006400"]'Uppdatera cellen för mål i player-tabellen[/color]
[color="#006400"]'UPDATE player SET Goal = temp_goal WHERE RecSet([GRÅ]"PlayerNr"[/GRÅ]) = objRS([GRÅ]"GoalPlayer"[/GRÅ])[/color]
[color="#006400"]'Uppdatera cellen för assist i player-tabellen[/color]
[color="#006400"]'UPDATE player SET Assist = temp_ass WHERE RecSet([GRÅ]"PlayerNr"[/GRÅ]) = objRS([GRÅ]"GoalAssPlayer1"[/GRÅ])[/color]
RecSet.MoveNext
[color="#0000ff"]Loop[/color]

Connect.Close
[color="#0000ff"]Set[/color] RecSet = [color="#0000ff"]Nothing[/color]
[color="#006400"]'Set objRS = nothing[/color]
[color="#0000ff"]Set[/color] Connect = [color="#0000ff"]Nothing[/color]

[MÄRK]%>[/MÄRK]

[/log]

/Jeppson75

 

Länk till kommentar
Dela på andra webbplatser

Jag är lite inne på Clusters bana;

Du deklarerar "temp_goal", men använder dig av "tempGoal" för att räkna. Därefter skriver du ut "temp_goal"'s resultat, vilket blir "0" då den inte fått några värden - det har "tempGoal" fått.

Ersätt "tempGoal" med "temp_goal" så borde det fungera bättre.

 

Lycka till!

 

Länk till kommentar
Dela på andra webbplatser

Morsning!

Jag har kikat lite på din kod och rent generellt verkar det inte vara några fel. Dock:

 

A) Placera alltid poster ur databasen i variabler innan du gör någonting.

 

Detta innebär att du enkelt kan kontrollera att värden är OK, eller att de är numeriska. Jag tror att ditt problem var att värden inte var numeriska när du försökte jämföra dem. Därför placerade jag värdena i variabler som jag intade.

 

Dessutom ändrade jag det där med temp_goal...

 

Här kommer koden

 

<%

Set Connect = Server.CreateObject("ADODB.Connection")

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("../../../DB/A-Lag.mdb")&";"

 

Set RecSet = Server.CreateObject("ADODB.Recordset")

Set objRS = Server.CreateObject("ADODB.Recordset")

 

PlayerNR = "SELECT PlayerNr FROM player"

RecSet.Open PlayerNR, Connect

 

Addera = "SELECT GoalPlayer, GoalAssPlayer1, GoalAssPlayer2 FROM game_events WHERE GoalTeam = 'Bäcken HC'"

objRS.Open Addera, Connect

 

dim intPlayerNR

dim intGoalPlayer

dim intGoalAssPlayer1, intGoalAssPlayer2

Dim temp_goal, temp_ass

 

'Kontrollera aktuell spelare (PlayerNr) gjort mål

Do While Not RecSet.EOF

 

intPlayerNR = int(RecSet("PlayerNR"))

 

temp_goal = 0

temp_ass = 0

 

'Loopa igenom hela tabellen för game_events

Do While Not objRS.EOF

 

intGoalPlayer = int(objRS("GoalPlayer"))

intGoalAssPlayer1 = int(objRS("GoalAssPlayer1"))

intGoalAssPlayer2 = int(objRS("GoalAssPlayer2"))

 

'Kontrollera gjorda mål

If intPlayerNR = intGoalPlayer Then

temp_goal = temp_goal + 1

End If

 

'Kontrollera gjora ass

If intPlayerNR = intGoalAssPlayer1 OR intPlayerNR = intGoalAssPlayer2 Then

temp_ass = temp_ass + 1

End If

 

objRS.MoveNext

Loop

 

Response.Write intPlayerNR & " " & temp_goal & " " & temp_ass & "<br>"

 

'Uppdatera cellen för mål i player-tabellen

'UPDATE player SET Goal = temp_goal WHERE intPlayerNR = intGoalPlayer

'Uppdatera cellen för assist i player-tabellen

'UPDATE player SET Assist = temp_ass WHERE intPlayerNR = intGoalAssPlayer1

 

RecSet.MoveNext

Loop

 

Connect.Close

Set RecSet = Nothing

'Set objRS = nothing

Set Connect = Nothing

%>

 

Hoppas att det fungerar.

/donRollo

 

[inlägget ändrat 2005-05-18 11:04:24 av donRollo]

[inlägget ändrat 2005-05-18 11:06:55 av donRollo]

Länk till kommentar
Dela på andra webbplatser

støder webbplatsen ræknings loop ??

 

 

----------------

Mega drive rullar fett inget krångel å funkar alltid

 

www.bondmaster.tk

 

 

Länk till kommentar
Dela på andra webbplatser

bond 007 skrev:

støder webbplatsen ræknings loop ??

 

? Menar du att det finns webplatser som specifikt inte stödjer räkningsloopar? Har jag aldrig hört talas om förr. Då har man lärt sig ngt nytt idag, då.

 

 

Länk till kommentar
Dela på andra webbplatser

de ær ett fåtal inte många. vissa har ett eget allternativ till ræknare

 

 

-----------------

Mega drive rullar fett inget krångel å funkar alltid

 

www.bondmaster.tk

 

 

Länk till kommentar
Dela på andra webbplatser

Verkar vara någon loop som inte fungerar riktigt...

Jag får nu följande resultat:

[log]

12 1 0

24 0 0

17 0 0

23 0 0

7 0 0

2 0 0

6 0 0

19 0 0

1 0 0

27 0 0

4 0 0

8 0 0

9 0 0

3 0 0

15 0 0

35 0 0

11 0 0

13 0 0

22 0 0

29 0 0

25 0 0

14 0 0

16 0 0

61 0 0

18 0 0

28 0 0

[/log]

Som du ser så har det nu blivit en etta brevid nr 12 längst upp... jag tycker det verkar som om den nu stoppar loopen efter en träff... kan det stämma?

 

/Jeppson75

 

 

 

[inlägget ändrat 2005-05-18 20:13:27 av Jeppson75]

Länk till kommentar
Dela på andra webbplatser

Japp... den stöder räkning, men loopen stannar...

Jag kör nu koden som donRollo har skrivit (se ovan).

 

/Jesper

 

Länk till kommentar
Dela på andra webbplatser

Ja, den körs bara en gång. Först kör den ju numren och sen kör den loopen mot målgörandet. Problemet är att den kör ju bara loopen för målgörandet för första spelaren, för sen är ju recset EOF...

 

Antingen får du flytta tillbaka pekaren för det inre RS:et eller så ställer du helt enkelt om frågan inne i loopen och kan då villkora direkt mot den faktiska spelaren.

 

Alltså:

Alt 1:

 

'Kontrollera aktuell spelare (PlayerNr) gjort mål

Do While Not RecSet.EOF

 

intPlayerNR = int(RecSet("PlayerNR"))

 

temp_goal = 0

temp_ass = 0

'flytta tillbaka pekaren till första positionen

if objRS.EOF and not objRS.BOF then

objRS.MovefFirst

end if

 

'Loopa igenom hela tabellen för game_events

Do While Not objRS.EOF

............

 

Alt 2:

'Kontrollera aktuell spelare (PlayerNr) gjort mål

Do While Not RecSet.EOF

 

intPlayerNR = int(RecSet("PlayerNR"))

 

temp_goal = 0

temp_ass = 0

Addera = "SELECT count(GoalPlayer) as goal FROM game_events WHERE GoalTeam = 'Bäcken HC' and GoalPlayer = "&intPlayerNR

objRS.Open Addera, Connect

 

'spara mål

if Not objRS.EOF

temp goal = cInt(objRS("goal"))

end if

 

Addera = "SELECT count(GoalAssPlayer1) as goal_ass FROM game_events WHERE GoalTeam = 'Bäcken HC' and GoalAssPlayer1= "&intPlayerNR

objRS.Open Addera, Connect

 

'spara ass1

if Not objRS.EOF

temp_ass = cInt(objRS("goal_ass"))

end if

 

Addera = "SELECT count(GoalAssPlayer2) as goal_ass FROM game_events WHERE GoalTeam = 'Bäcken HC' and GoalAssPlayer2= "&intPlayerNR

objRS.Open Addera, Connect

 

'spara ass 2

if Not objRS.EOF

temp_ass = temp_ass + cInt(objRS("goal_ass"))

end if

 

Response.Write intPlayerNR & " " & temp_goal & " " & temp_ass & "<br>"

 

............................

 

 

[inlägget ändrat 2005-05-19 00:48:05 av Jenny R]

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Vad kör du för databas? Alla riktiga databaser (läs: de flesta utom Access) erbjuder lagrade procedurer och detta är ju en typisk situation där det skall lösas på det sättet och inte via klientkod. Fast bara om man vill vara effektiv förstås ;)

 

Länk till kommentar
Dela på andra webbplatser

Morsning igen.

Jag hade gjort en litet fel i exempel som också Anjuna Moon påpekade.

 

Korrekt kod ska vara:

 

<%

Set Connect = Server.CreateObject("ADODB.Connection")

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db/db.mdb")&";"

 

Set RecSet = Server.CreateObject("ADODB.Recordset")

 

PlayerNR = "SELECT PlayerNr FROM player"

RecSet.Open PlayerNR, Connect

 

dim intPlayerNR

dim intGoalPlayer

dim intGoalAssPlayer1, intGoalAssPlayer2

Dim temp_goal, temp_ass

 

'Kontrollera aktuell spelare (PlayerNr) gjort mål

Do While Not RecSet.EOF

 

intPlayerNR = int(RecSet("PlayerNR"))

 

temp_goal = 0

temp_ass = 0

 

' DESSA RADER ÄR FLYTTADE NER HIT INUTI LOOPEN

Set objRS = Server.CreateObject("ADODB.Recordset")

Addera = "SELECT GoalPlayer, GoalAssPlayer1, GoalAssPlayer2 FROM game_events WHERE GoalTeam = 'Backen HC'"

objRS.Open Addera, Connect

 

'Loopa igenom hela tabellen för game_events

Do While Not objRS.EOF

 

intGoalPlayer = int(objRS("GoalPlayer"))

intGoalAssPlayer1 = int(objRS("GoalAssPlayer1"))

intGoalAssPlayer2 = int(objRS("GoalAssPlayer2"))

 

'Kontrollera gjorda mål

If intPlayerNR = intGoalPlayer Then

temp_goal = temp_goal + 1

End If

 

'Kontrollera gjora ass

If intPlayerNR = intGoalAssPlayer1 OR intPlayerNR = intGoalAssPlayer2 Then

temp_ass = temp_ass + 1

End If

 

objRS.MoveNext

Loop

 

Set objRS = nothing

 

response.Write intPlayerNR & " " & temp_goal & " " & temp_ass & "<br>"

 

'Uppdatera cellen för mål i player-tabellen

'UPDATE player SET Goal = temp_goal WHERE intPlayerNR = intGoalPlayer

'Uppdatera cellen för assist i player-tabellen

'UPDATE player SET Assist = temp_ass WHERE intPlayerNR = intGoalAssPlayer1

 

RecSet.MoveNext

Loop

 

Connect.Close

Set RecSet = Nothing

Set Connect = Nothing

%>

 

Kanske borde man dock göra på något annat vis, ex som Anjuna visade.

/donRollo

 

Länk till kommentar
Dela på andra webbplatser

Det var JAG som påpekade det och skrev alternativa kodrader ;)

 

Rätt ska vara rätt :)

 

Jag gjorde dessutom om den inre sqlsatsen och delade upp till 3 olika, eftersom jag inte ser någon anledning med att ha loopandet på andra sqlsatsen om han vet vilken spelare det gäller, då är det enklare att hämta faktan direkt utan att behöva loopa och göra jämförelser.

 

//Jenny

 

[inlägget ändrat 2005-05-19 10:56:46 av Jenny R]

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

Jag provade det första alternativet. (Tyckte det verkade enklast...)

Men jag fick då följande felmeddelande:

Object doesn't support this property or method: 'objRS.MovefFirst'

 

Microsoft säger så här om felet:

To correct this error:

 

* Check the properties and methods to ensure there were no typing errors.

* See the object's documentation for more information.

 

/Jeppson75

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Det kan ju vara lämpligt att använda samma variabelnamn som recordsetet är deklarerat med ;)

 

Kontrollera vilket av RecSet och objRS som är korrekt

 

 

 

Länk till kommentar
Dela på andra webbplatser

Ändrade till "RecSet.MovefFirst" istället... får då samma fel som innan.

Object doesn't support this property or method: 'RecSet.MovefFirst'

 

Jag kan ju tillägga att den första spelaren nu räknas rätt... Innan felmeddelandet står det nämligen att spelare nr 12 har gjort totalt 5 mål, vilket tycks stämma...

 

/Jeppson75

 

Länk till kommentar
Dela på andra webbplatser

RecSet.MovefFirst bör vara RecSet.MoveFirst

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

 

Länk till kommentar
Dela på andra webbplatser

Efter OZn's skarpsynta inlägg ovan så verkar det som om det löper på iallafall... men loopen kan inte vara rikigt rätt...

 

Jag får följande:[log]

12 10

24 10

24 10

24 10

....

....

....

24 10

24 10

24 10

 

Active Server Pages error 'ASP 0113'

 

Script timed out

 

/Lag/A-Lag/scripts/matchrapport_4_goal.asp

 

The maximum amount of time for a script to execute was exceeded. You can change this limit by specifying a new value for the property Server.ScriptTimeout or by changing the value in the IIS administration tools.

[/log]

 

Så här ser koden ut i sin helhet just nu:[log]

[MÄRK]<%[/MÄRK]
[color="#0000ff"]Set[/color] Connect = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ]) 
Connect.Open [GRÅ]"driver={Microsoft Access Driver (*.mdb)};dbq="[/GRÅ] & [b]Server[/b].MapPath([GRÅ]"../../../DB/A-Lag.mdb"[/GRÅ])&[GRÅ]";"[/GRÅ]

[color="#0000ff"]Set[/color] RecSet = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Recordset"[/GRÅ])
[color="#0000ff"]Set[/color] objRS = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Recordset"[/GRÅ])

PlayerNR = [GRÅ]"SELECT PlayerNr FROM player"[/GRÅ]
RecSet.Open PlayerNR, Connect

Addera = [GRÅ]"SELECT GoalPlayer, GoalAssPlayer1, GoalAssPlayer2 FROM game_events WHERE GoalTeam = 'Bäcken HC'"[/GRÅ]
objRS.Open Addera, Connect 

[color="#0000ff"]Dim[/color] intPlayerNR
[color="#0000ff"]Dim[/color] intGoalPlayer
[color="#0000ff"]Dim[/color] intGoalAssPlayer1, intGoalAssPlayer2
[color="#0000ff"]Dim[/color] temp_goal, temp_ass

[color="#006400"]'Kontrollera aktuell spelare (PlayerNr) gjort mål[/color]
[color="#0000ff"]Do[/color] [color="#0000ff"]While[/color] [color="#0000ff"]Not[/color] RecSet.EOF 

intPlayerNR = int(RecSet([GRÅ]"PlayerNR"[/GRÅ]))

temp_goal = 0
temp_ass = 0

[color="#006400"]'flytta tillbaka pekaren till första positionen[/color]
[color="#0000ff"]If[/color] objRS.EOF [color="#0000ff"]And[/color] [color="#0000ff"]Not[/color] objRS.BOF [color="#0000ff"]Then[/color]
RecSet.MovefFirst
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

[color="#006400"]'Loopa igenom hela tabellen för game_events[/color]
[color="#0000ff"]Do[/color] [color="#0000ff"]While[/color] [color="#0000ff"]Not[/color] objRS.EOF 

intGoalPlayer = int(objRS([GRÅ]"GoalPlayer"[/GRÅ]))
intGoalAssPlayer1 = int(objRS([GRÅ]"GoalAssPlayer1"[/GRÅ]))
intGoalAssPlayer2 = int(objRS([GRÅ]"GoalAssPlayer2"[/GRÅ]))

[color="#006400"]'Kontrollera gjorda mål[/color]
[color="#0000ff"]If[/color] intPlayerNR = intGoalPlayer [color="#0000ff"]Then[/color]
temp_goal = temp_goal + 1
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

[color="#006400"]'Kontrollera gjora ass[/color]
[color="#0000ff"]If[/color] intPlayerNR = intGoalAssPlayer1 OR intPlayerNR = intGoalAssPlayer2 [color="#0000ff"]Then[/color]
temp_ass = temp_ass + 1
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

objRS.MoveNext
[color="#0000ff"]Loop[/color]
[b]Response[/b].write intPlayerNR & [GRÅ]" "[/GRÅ] & intGoalPlayer & [GRÅ]"<br>"[/GRÅ]
[color="#006400"]'Response.Write intPlayerNR & [GRÅ]" "[/GRÅ] & temp_goal & [GRÅ]" "[/GRÅ] & temp_ass & [GRÅ]"<br>"[/GRÅ][/color]

[color="#006400"]'Uppdatera cellen för mål i player-tabellen[/color]
[color="#006400"]'UPDATE player SET Goal = temp_goal WHERE intPlayerNR = intGoalPlayer[/color]
[color="#006400"]'Uppdatera cellen för assist i player-tabellen[/color]
[color="#006400"]'UPDATE player SET Assist = temp_ass WHERE intPlayerNR = intGoalAssPlayer1[/color]

RecSet.MoveNext
[color="#0000ff"]Loop[/color]

Connect.Close
[color="#0000ff"]Set[/color] RecSet = [color="#0000ff"]Nothing[/color]
[color="#006400"]'Set objRS = nothing[/color]
[color="#0000ff"]Set[/color] Connect = [color="#0000ff"]Nothing[/color]
[MÄRK]%>[/MÄRK]

[/log]

 

/Jeppson75

 

 

 

[inlägget ändrat 2005-05-27 21:57:06 av Jeppson75]

Länk till kommentar
Dela på andra webbplatser

Ha ha ha ha!!!

Hur kunde man missa det då???

 

Tack så hemskt mycket OZn!

 

Däremot dyker det nu upp ett annat problem:[log]

12 10

24 10

24 10

24 10

....

....

....

24 10

24 10

24 10

 

Active Server Pages error 'ASP 0113'

 

Script timed out

 

/Lag/A-Lag/scripts/matchrapport_4_goal.asp

 

The maximum amount of time for a script to execute was exceeded. You can change this limit by specifying a new value for the property Server.ScriptTimeout or by changing the value in the IIS administration tools.

[/log]

 

/Jeppson75

[inlägget ändrat 2005-05-27 22:01:22 av Jeppson75]

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Svaret ligger i felmeddelandet - ändra timeout-tiden, antingen i IIS eller direkt i koden. Default brukar vara 90s tror jag, vilket betyder att du har en rejäl flaskhals någonstans, förmodligen i din query.

 

Länk till kommentar
Dela på andra webbplatser

Hittade troligen felet nu...

[color="#0000ff"]If[/color] [color="#0000ff"]Not[/color] objRS.EOF [color="#0000ff"]And[/color] [color="#0000ff"]Not[/color] objRS.BOF [color="#0000ff"]Then[/color]
RecSet.MoveFirst
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

 

Men det verkar som om loopen sedan räknar samma spelares antal mål hela tiden... Alla spelare listas, men alla har 10 mål... det stämmer ju inte...

 

/Jeppson75

 

Länk till kommentar
Dela på andra webbplatser

Alldeles för trött för att sätta mig in ordentligt i din kod men det verkar som du inte ställer tillbaka objRS pekaren för varje ytterloop (liknande det som Jenny skrev), dvs:

 

[log]

[MÄRK]<%[/MÄRK]
[color="#0000ff"]Set[/color] Connect = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ]) 
Connect.Open [GRÅ]"driver={Microsoft Access Driver (*.mdb)};dbq="[/GRÅ] & [b]Server[/b].MapPath([GRÅ]"../../../DB/A-Lag.mdb"[/GRÅ])&[GRÅ]";"[/GRÅ]

[color="#0000ff"]Set[/color] RecSet = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Recordset"[/GRÅ])
[color="#0000ff"]Set[/color] objRS = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Recordset"[/GRÅ])

PlayerNR = [GRÅ]"SELECT PlayerNr FROM player"[/GRÅ]
RecSet.Open PlayerNR, Connect

Addera = [GRÅ]"SELECT GoalPlayer, GoalAssPlayer1, GoalAssPlayer2 FROM game_events WHERE GoalTeam = 'Bäcken HC'"[/GRÅ]
objRS.Open Addera, Connect 

[color="#0000ff"]Dim[/color] intPlayerNR
[color="#0000ff"]Dim[/color] intGoalPlayer
[color="#0000ff"]Dim[/color] intGoalAssPlayer1, intGoalAssPlayer2
[color="#0000ff"]Dim[/color] temp_goal, temp_ass

[color="#006400"]'Kontrollera aktuell spelare (PlayerNr) gjort mål[/color]
[color="#0000ff"]Do[/color] [color="#0000ff"]While[/color] [color="#0000ff"]Not[/color] RecSet.EOF 

intPlayerNR = int(RecSet([GRÅ]"PlayerNR"[/GRÅ]))

temp_goal = 0
temp_ass = 0

objRS.MoveFirst

[color="#006400"]'Loopa igenom hela tabellen för game_events[/color]
[color="#0000ff"]Do[/color] [color="#0000ff"]While[/color] [color="#0000ff"]Not[/color] objRS.EOF 

intGoalPlayer = int(objRS([GRÅ]"GoalPlayer"[/GRÅ]))
intGoalAssPlayer1 = int(objRS([GRÅ]"GoalAssPlayer1"[/GRÅ]))
intGoalAssPlayer2 = int(objRS([GRÅ]"GoalAssPlayer2"[/GRÅ]))

[color="#006400"]'Kontrollera gjorda mål[/color]
[color="#0000ff"]If[/color] intPlayerNR = intGoalPlayer [color="#0000ff"]Then[/color]
temp_goal = temp_goal + 1
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

[color="#006400"]'Kontrollera gjora ass[/color]
[color="#0000ff"]If[/color] intPlayerNR = intGoalAssPlayer1 OR intPlayerNR = intGoalAssPlayer2 [color="#0000ff"]Then[/color]
temp_ass = temp_ass + 1
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

objRS.MoveNext
[color="#0000ff"]Loop[/color]
[b]Response[/b].write intPlayerNR & [GRÅ]" "[/GRÅ] & intGoalPlayer & [GRÅ]"<br>"[/GRÅ]
[color="#006400"]'Response.Write intPlayerNR & [GRÅ]" "[/GRÅ] & temp_goal & [GRÅ]" "[/GRÅ] & temp_ass & [GRÅ]"<br>"[/GRÅ][/color]

[color="#006400"]'Uppdatera cellen för mål i player-tabellen[/color]
[color="#006400"]'UPDATE player SET Goal = temp_goal WHERE intPlayerNR = intGoalPlayer[/color]
[color="#006400"]'Uppdatera cellen för assist i player-tabellen[/color]
[color="#006400"]'UPDATE player SET Assist = temp_ass WHERE intPlayerNR = intGoalAssPlayer1[/color]

RecSet.MoveNext
[color="#0000ff"]Loop[/color]

Connect.Close
[color="#0000ff"]Set[/color] RecSet = [color="#0000ff"]Nothing[/color]
[color="#006400"]'Set objRS = nothing[/color]
[color="#0000ff"]Set[/color] Connect = [color="#0000ff"]Nothing[/color]
[MÄRK]%>[/MÄRK]

[/log]

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

[inlägget ändrat 2005-05-27 22:22:23 av OZn]

Länk till kommentar
Dela på andra webbplatser

Nja, det blir tyvärr precis samma resultat...

 

Det verkar som om 'ObjRS.MoveFirst' inte har någon effekt...

Det blir ingen skillnad om den är med eller tas bort...

 

Den ligger kanske på fel ställe i koden?

 

/Jeppson75

[inlägget ändrat 2005-05-27 22:34:48 av Jeppson75]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...