webForumDet fria alternativet

Object & Class = ?

8 svar · 284 visningar · startad av CatZ

CatZMedlem sedan jan. 20022 440 inlägg
#1

postar hela koden!

<%
		dim objTeam()
		dim n, i
		dim sql, rs
		n = nrTeams()
		redim objTeam(n -1)
		i = 0
		sql = "select * from AnLag"
		set rs = dbCom.Execute(sql)
		if not (rs.BOF or rs.EOF) then
		do while not rs.EOF
			Set objTeam(i) = new Team
			objTeam(i).GetInfo(rs("AnLagID"))
		i = i + 1
		rs.MoveNext
		loop
		End If

	%>	
		<table>
			<tr>
				<td><font color="#33FFCC">LagNamn</font></td>
			</tr>
			<tr>
				<td>
<%
					For i = 0 to UBound(objTeam)
						[b]Response.Write objTeam(i).id[/b]
					Next
	%>
				</td>
			</tr>

			<tr>
				<td></td>
			</tr>
<%
		
	%>
		</table>
<%
'********************************************
'Funktion som räknar ut antalet lag
'********************************************
		function nrTeams()

		dim sql, rs

		nrTeams = 0
		sql = "SELECT COUNT(AnLagID) AS Total FROM AnLag"
		set rs = dbCom.Execute(sql)
			if not (rs.BOF and rs.EOF) then
				nrTeams = rs("Total")
			end if

		end function
'******************************************
'
'******************************************
		Class Team
			public lagNamn
			public lagID
			
			Public Sub GetInfo(lagID)
			id = lagID
				SQL = " SELECT * FROM AnLag WHERE AnLagID = " & lagID & " "
				set rs = dbCom.Execute(SQL)
				If not (rs.BOF and rs.EOF) then
					lagNamn = rs("AnKlubb")				
				End If
			End Sub
			

		End Class

Får följande felmeddelande på detta:

Feltyp:
Körningsfel i Microsoft VBScript (0x800A01A8)
Objekt krävs.: ''
/TMPh3o26lps6.asp, line 31

rad 31 är i fet stil däruppe, om jag testar med

Response.Write objTeams(0).lagnamn

så skrivs lag nummer 1 ut så många gånger som det finns lag med, hur ska jag fixa detta ?

Alltså jag klarar att hantera klasser och arrayer och allt möjligt sålänge det inte rör sig om att få värden från en databas, någon som kan rekommendera någon bra sida eller någon bra bok som tar upp ObjektOrienterad databaskodning ?

LarsGMedlem sedan dec. 200012 464 inlägg
#2
Response.Write objTeam(i).lagid
CatZMedlem sedan jan. 20022 440 inlägg
#3

Problemet är detsamma

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Jaha du, vad gör vi då?
Varför har du funktion getInfo?

do while not rs.EOF
		Set objTeam(i) = new Team
		objTeam(i).lagNamn = rs("AnKlubb")
		i = i + 1
		rs.MoveNext
loop

borde vara samma.

Vi tänker lite till och så ser vi att i getinfo använder du också rs som namn på recordset utan att den är dimmad i klassen.
Om jag förstår rätt så kommer du att skriva över det recordset som används i loopen och när du kommer tillbaka från anropet så gör du movenext och då kommer man till eof eftersom det rs som används i getinfo bara innehåller en rad. Det blir bara första elementet i arrayen som blir ifyllt.

Om du vill använda ett recordset i klassen så skall det alltså dimmas inom klassdefinitionen.

CatZMedlem sedan jan. 20022 440 inlägg
#5

Jag får tacka så mycket för det! Nu förstår jag problemet lite bättre, Jag testade helt enkelt att deklarera SQL och rs inne i funktionen och nu fungerar det utmärkt!

Därför gott folk vill jag påpeka vikten av att DEKLARERA sina variabler :)

CatZMedlem sedan jan. 20022 440 inlägg
#6

Hur gör jag en enkel loop som sparar varje omgångs poäng och nummer? Anledningen till att jag vill göra detta är att jag vill inte skriva ut omgångar som inte har spelats eftersom det finns flera olika områden i samma division och det är inte säkert att alla spelar lika många omgångar.

'-----------------------------------------------------
' hämta Matcherna
'-----------------------------------------------------
			SQL = "SELECT * FROM AnMatcher" _
          		& " WHERE AnBortaLag = " & lagID & " " _
         		& " OR" _
          		& " AnHemmaLag    = " & lagID & " "
       			set rs = dbCom.Execute(SQL)
				do while not rs.EOF
[b]'-----------------------------------------------------
' lägg ihop den totala poängen
'-----------------------------------------------------
           		if rs("AnBortaLag") = lagID then
            	 	ResTotal = ResTotal + rs("AnBortaVP")
					ImpFor = ImpFor + rs("AnBortaIMP")
					ImpMot = ImpMot + rs("AnHemmaIMP")
           		else
           			ResTotal = ResTotal + rs("AnHemmaVP")
					ImpFor = ImpFor + rs("AnHemmaIMP")
					ImpMot = ImpMot + rs("AnBortaIMP")
           		end if
				rs.movenext
				loop[/b]

Något liknande som är i fet stil ovan. Fast jag måste spara det i en Array inom min publika sub ?

Nu kommer vi till problemet med att fylla Arrayerna omgNR och omgVP med information från tabellen Matcher. Jag har ju redan berättat villka fält den ska hämta från. Men hur ska jag nu berätta för mina två Arrayer att informationen ska sparas där ?

Normalt i en serietabell så räknar man ju bara ihop poängen och det är ju inte så svårt, jag behöver presentera hur många poäng respektive lag tog i respektive omgång i själva serietabellen. Istället för vunna/oavgjorda/förlorade matcher.

CatZMedlem sedan jan. 20022 440 inlägg
#7

Så frågan är då, kan någon rätta till problemet med detta ?

Class Team
Public OmgVP

Private Sub Class_Initialize()
  OmgVP = Array()
End Sub

Private Sub Class_Terminate()
End Sub

'Sedan längre ner 

If rs("AnBortaLag") = lagID Then
  omgVP = rs("AnBortaVP")
Else
  omgVP = rs("AnHemmaVP")
End If

För att sedan skriva ut det i en loop, dvs alla poäng laget har fått i respektive omgång, hur gör jag det? Jag antar att det jag fått nu är en så kallad 2dimensionell matris ?

For i = 0 to UBound(objTeam)
  Response.Write objTeam(i).lagNamn
[b]    For i = 0 to UBound(objTeam(omgVP))
      Response.Write objTeam(i).omgVP(i)
    [/b]Next
Next

Det är raderna i fet stil jag inte riktigt hajjar, någon expert ?

CatZMedlem sedan jan. 20022 440 inlägg
#8

Problemet som det ser ut nu är följande! Jag får bara ut första värdet i arrayen med koden:

For i = 0 to UBound(objTeam)
Response.Write "<tr><td>" & objTeam(i).LagNamn & "</td><td>" & objTeam(i).omgVP & "</td></tr>"
Next

Medans koden:

For i = 0 to UBound(objTeam)
Response.Write "<tr><td>" & objTeam(i).LagNamn & "</td>"
For x = 0 to UBound(omgVP)
Response.Write "<td>" & objTeam(i).omgVP & "</td></tr>"
Next
Next

inte fungerar alls :) Jag förstår alltså inte hur jag ska loopa ut en array som finns inuti arrayen som finns inuti mitt object!

hjälp ?

CatZMedlem sedan jan. 20022 440 inlägg
#9

Löste det delvis såhär, nu är problemet att allting skrivs ut dubbla gånger :(

For i = 0 to UBound(objTeam)
Response.Write "<tr><td>" & objTeam(i).LagNamn & "</td>"
For Each omgVP in ObjTeam
Response.Write "<td>" & objTeam(i).omgVP & "</td>"
Next
Response.Write "</tr>"
Next

Hur ska jag gör för att bara skriva ut en gång ?

/edit// Löste själva loopen på två sätt, problemet ligger i att jag inte sparar poängen i arrayen så som jag tänkt mig, enbart ett värde sparas.

Hur ska man göra för att spara värdena i en array som ser ut såhär tillslut?

omgVP = array(25, 15, 23, 17)
132 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)