CatZMedlem sedan jan. 20022 440 inlägg 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 Response.Write objTeam(i).lagid
LarsGMedlem sedan dec. 200012 464 inlägg 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 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 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 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 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 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)