Probleme mit einer Collection

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 :frowning: Hat jemand meinen Fehler gefunden?

Danke für Eure Hilfe!!!

Gruss Alex

Probleme mit einer Collection *GELÖST*
Hallo,

ich habe den Fehler gemacht, nachdem ich das Objekt der Collection hinzugefügt habe, habe ich NICHT das Objekt neu initialisiert:

set rec = new ImportDef

Ich muss bei jedem durchgang das Obj. neu initialisieren!!!

Gruss Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Alex,

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 :confused:
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 :wink:
Aber wie du siehst brauchst du nicht immer wie du sagst eine neue Instanz erstellen :wink:

MfG Alex

Gruss Alex