Hallo!
Collections besitzen eine schreibgeschützte LONG-Eigenschaft "Count".
Der Wert dieser Eigenschaft ändert sich bei jedem Hinzufügen oder Entfernen eines Items.
Du kapselst in Deiner Klasse die Collection BestlCol.
Die zusätzlichen Properties "GesamtHS", "GesamtHF" und "GesamtSG" sind in gleicher
Weise von den Items der Collection abhängig, d.h. ihre Werte werden bei jedem Hinzufügen
oder Entfernen eines Items intern neu bestimmt (Private) und können von außen (Public)
nur abgefragt werden.
Einen Zusammenhang gibt es auch zwischen den Properties Deiner Item-Klasse "clsBestLeisungen",
wenn sie durch die Methode "Bestl_Einlesen" gefüllt werden. Die Beziehung zwischen den
Werten der Eigenschaften einer Klassen-Instanz sind dabei durch die Felder eines "Record" gegeben.
(Ob zusätzlich eine öffentliche Methode "AddItem" benötigt wird, kann ich nicht beurteilen.)
So wie Du die Collection-Klasse programmierst, ergibt sich eine Ansammlung von Eigenschaften und
Routinen ohne klar definierten Bezug zueinander, denen beliebig Werte zugewiesen werden können.
Es kann sein, daß Du ein derartiges Verhalten benötigst. Diese Klasse gestaltest Du besser
durch die Verwendung von Methoden (Function) statt von Properties.
Option Explicit
Private BestlCol As Collection
Public Property Get item(ByVal Index As Long) As clsBestLeistungen
Set item = BestlCol(Index)
End Property
Public Property Get count() As Long
count = BestlCol.count
End Property
Public Sub remove(ByVal Index As Integer)
BestlCol.remove Index
End Sub
Private Sub Class_Initialize()
Set BestlCol = New Collection
End Sub
Private Sub Class_Terminate()
Set BestlCol = Nothing
End Sub
Private Sub Add(Datum As Date, _
Name As String, hs As String, _
SG As String, hf As String)
Dim DSnew As clsBestLeistungen
Set DSnew = New clsBestLeistungen
With DSnew
.Datum = Datum
.Name = Name
.hs = hs
.SG = SG
.hf = hf
End With
BestlCol.Add DSnew
End Sub
Public Sub Bestl_einlesen(ByVal Spieltg As String, ByVal Spi As String)
'Deklariere strDSQ, rsdat
strDSQ = "SELECT * FROM Bestleistungen WHERE Datum=" & Format(Spieltg, _
"\#yyyy\-mm\-dd\#") & " AND Name='" & Spi & "'"
Set rsdat = DB.OpenRecordset(strDSQ, dbOpenDynaset)
With rsdat
If .EOF = True And .BOF = True Then
Call Meldanz("Bisher keine Bestleistungen" & _
"für " & Chr(13) & Spi, 3000)
Add Spieltg, Spi, 0, 0, 0
Else
.MoveFirst
Do While Not .EOF
Add Spieltg, Spi, .Fields(3), .Fields(4), .Fields(5)
.MoveNext
Loop
.Close
End If
End With
Set rsdat = Nothing
End Sub
Public Function GesamtHF() As String
GesamtHF = ""
Dim it As clsBestLeistungen
Dim i As Integer
For i = 1 To BestlCol.count
Set it = BestlCol(i)
If Not it.hf = "0" Then
If GesamtHF = "" Then
GesamtHF = item(i).hf
Else
GesamtHF = GesamtHF + "," + item(i).hf
End If
End If
Next i
End Function
Public Function GesamtSG() As String
GesamtSG = ""
Dim it As clsBestLeistungen
Dim i As Integer
For i = 1 To BestlCol.count
Set it = BestlCol(i)
If Not it.SG = "0" Then
If GesamtSG = "" Then
GesamtSG = item(i).SG
Else
GesamtSG = GesamtSG + "," + item(i).SG
End If
End If
Next i
End Function
Public Function GesamtHS()
GesamtHS = ""
Dim it As clsBestLeistungen
Dim i As Integer
Dim c As Integer: c = 0
For i = 1 To BestlCol.count
Set it = BestlCol(i)
If Not it.hs = "0" Then c = c + 1
Next i
GesamtHS = CStr(c)
End Function Deklariere Deine Variablen Explicit.
Die Function "Bestl_Anzeigen" gehört nicht in diese Klasse,
sondern in das entsprechende Formular.
|