Hallo Leute,
ich habe ein Problem und komme nicht so recht weiter:
Ich habe in VB6 ein Klassenmodul, das heisst ImportDef mit dem Members
public field_attr as string
public field_bez as string
ich erstelle eine Collection der Form „ImportDef“
public ImportDefinition as new Collection
Dann fülle ich in einer Prozedur die Collection
…
dim rec as new ImportDef
set rec = new ImportDef
…
rec.field_attr = „Test1“
rec.field_bez =„Test1Bez“
ImportDefinitionen.add rec
… (usw)
rec.field_attr = „TestN“
rec.field_bez =„TestNBez“
ImportDefinitionen.add rec
…
Wenn ich in einer anderen Prozedur jetzt die Collection " ImportDefinition" in einer „for each -Schleife“ durchgehe:
dim rec2 as new ImportDef
set rec2 = new ImportDef
for each rec2 in ImportDefinition
debug.print rec2.field_attr
debug.print rec2.field_bez
next rec2
Dann kommt immernur die Anzahl der Elemente in ImportDefinition aber nur der Inhalt des Letzten was ich hinzugefüghabe. In diesem Beispiel :
„TestN“
„TestNBez“
Warum das?
Wenn ich sage ?ImportDefinition.count kommt die Korrekte Anzahl-n
Bin ein wenig ratlos Hat jemand meinen Fehler gefunden?
ich habe deinen Code nur überflogen. Mal abgesehen davon das ein paar wesentliche Routinen fehlen ( du nicht gepostet) hast, weisst dein Source dennoch Fehler auf!
Ein Bsp
Dim rec as new defimport
set rec = new defimport
Ich glaube so hattest du das gepostet
Was soll der Quatsch?
Ich muss bei jedem durchgang das Obj. neu initialisieren!!!
Auch das ist Quatsch.
Am besten ist es du hast wie gesagt die Klasse
Erstelle nun noch eine Klasse, wo du deine Collection erstellst.
Bsp:
'Klasse Personen
Option Explicit
Private mvarVorname As String
Private mvarNachname As String
Private mvarPersonenID As Long
Public Property Let Vorname(ByVal vData As String)
mvarVorname = vData
End Property
Public Property Get Vorname() As String
Vorname = mvarVorname
End Property
Public Property Let Nachname(ByVal vData As String)
mvarNachname = vData
End Property
Public Property Get Nachname() As String
Nachname = mvarVorname
End Property
Public Property Let PersonenID(ByVal vData As Long)
mvarPersonenID = vData
End Property
Public Property Get PersonenID() As Long
PersonenID = mvarPersonenID
End Property
'Klasse wo die Collection erstellt wird ( PersonenInfo)
Option Explicit
Private mCol As Collection
Private ObjPerson As Personen
'Eintrag hinzufügen
Public Function Add(Vorname As String, Nachname As Long, ID As Long)As Personen
Set ObjPerson= New Personen
With ObjPerson
.Vorname = Vorname
.Nachname = Nachname
.ID = ID
End With
mCol.Add ObjPerson
Set Add = ObjPerson
Set ObjPerson = Nothing
End Function
'Item setzen!
Public Property Get Item(ByVal Index As Long) As Personen
Set Item = mCol(Index)
End Property
'Anzahl der Eintraege
Public Property Get Count() As Long
Count = mCol.Count
End Property
'Eintrag löschen
Public Sub Remove(ByVal Index As Integer)
mCol.Remove Index
End Sub
Private Sub Class\_Initialize()
Set mCol = New Collection
End Sub
Private Sub Class\_Terminate()
Set mCol = Nothing
End Sub
'Code zum Bsp in der Form
Option explicit
Private Menschen as PersonenInfo
'Eintrag hinzufügen
Private Sub SetEntry(Vorname as String, Nachname as String,ID as Long)
if Menschen is Nothing then set Menschen=NEW Personeninfo
call Menschen.Add(Vorname,Nachname,ID)
End Sub
'Eintrag löschen
Private RemoveEntry(ID as long)
if menschen is nothing then exit sub
call menschen.Remove(ID)
End Sub
'Alle Eintraege anzeigen in einer MSGBOX
Private ShowEntry
dim i as Long
dim vRet as Personen
if menschen is nothing then exit sub
if menschen.Count=0 then exit sub
for i=Menschen.Count to 1 step -1
set vRet= Menschen.item(i)
msgbox "Vorname:" & vRet.Vorname & vbnewline & "Nachname: " & vRet.Nachname
next i
End Sub
'Alle Eintraege löschen!
Private Sub ClearCollection
set Menschen=Nothing
End Sub
Ich hoffe ich habe keinen Tippfehler drinnen
Aber wie du siehst brauchst du nicht immer wie du sagst eine neue Instanz erstellen