---
title: "Object & Class = ?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/61177-object-class"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "CatZ"
published: "2002-12-04T15:33:01.000Z"
updated: "2002-12-05T11:45:21.000Z"
replies: 8
views: 286
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/61177-object-class"
---

# Object & Class = ?

## #1 — CatZ, 2002-12-04T15:33Z

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 ?

Permalänk: https://www.webforum.nu/p/61177

## #2 — LarsG, 2002-12-04T16:03Z

```
Response.Write objTeam(i).lagid
```

Permalänk: https://www.webforum.nu/p/876049

## #3 — CatZ, 2002-12-04T16:45Z

Problemet är detsamma

Permalänk: https://www.webforum.nu/p/876081

## #4 — LarsG, 2002-12-04T17:20Z

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.

Permalänk: https://www.webforum.nu/p/876109

## #5 — CatZ, 2002-12-04T17:47Z

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 :)

Permalänk: https://www.webforum.nu/p/876130

## #6 — CatZ, 2002-12-04T18:55Z

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.

Permalänk: https://www.webforum.nu/p/876179

## #7 — CatZ, 2002-12-04T21:09Z

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 ?

Permalänk: https://www.webforum.nu/p/876303

## #8 — CatZ, 2002-12-05T10:33Z

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 ?

Permalänk: https://www.webforum.nu/p/876580

## #9 — CatZ, 2002-12-05T11:45Z

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)
```

Permalänk: https://www.webforum.nu/p/876630

---

Tråden på webben: https://www.webforum.nu/amne/asp/61177-object-class
