Hej! Kontrollera att du har rätt datatyp: Kan det vara så att du "äter upp" för mycket minne med din kod ? För mig ser det ut som en loop som fyller collectionen med objekt. Hej och tack för svaren Jag måste säga att jag är förvånad Andreas. Jag har antagit at en instans av objektet motsvarar en post i databasen.Får inte ut värde från en collection
Jag har laddat in värden i en collection som ligger i en modul som public.
Grejen är den att när jag vill sätta ett visst värde (i detta fallet en sträng)
till en variabel (oxå sträng) så kommer det uppe tt felmeddelande:
Object doesen´t support this property or method.
Jag har gjort likadant på andra ställen i min applikation, och det funkar utmäkrt.
det hör till saken att collection alla item s är fulla med värden
Vad gör jag för fel
lite kod
i modulen:
public g_ColRto as new collection
i formuläret samlas värde in via en klassmodul
Private Sub GetRtoValue()
Dim i As Integer
For i = i To UBound(m_aArticlesAtLine)
Set oClsRto = New clsRto
oClsRto.GetRtoValue m_aArticlesAtLine(i)
g_ColRto.Add oClsRto
Next i
End Sub
här vill jag sätta värdena till en listview
Private Sub SetRtoValueToList()
Dim columnHeaders As ColumnHeader
Dim myListItem As ListItem
Dim test As String
Set columnHeaders = lvwRtoValue.columnHeaders.Add(, , _
g_rsRtoValue.Fields.Item(0).Name, _
TextWidth(g_rsRtoValue.Fields.Item(0).Name))
Set columnHeaders = lvwRtoValue.columnHeaders.Add(, , _
g_rsRtoValue.Fields.Item(1).Name, _
TextWidth(g_rsRtoValue.Fields.Item(1).Name))
här kommer felmeddelandet:
Set myListItem = lvwRtoValue.ListItems.Add(, , g_ColRto.Item(22).Factory.value)
myListItem.SubItems(1) = g_ColRto.Item(22).Line
'myListItem.SubItems(2) = m_collRtoValue.item(22).ArtNo
End Sub
mvh Stefan HSv: Får inte ut värde från en collection
Debug.print TypeName(g_ColRto.Item(22))
Sv:Får inte ut värde från en collection
Hur som helst ser det lite skumt ut att skapa ett nytt objekt i din loop...
For i = i To UBound(m_aArticlesAtLine)
Set oClsRto = New clsRto <--------------------
oClsRto.GetRtoValue m_aArticlesAtLine(i)
g_ColRto.Add oClsRto
Next i
Nu vet jag ju inte vad det objektet är till för, men det är ju en lite udda lösning.
/MartinSv: Får inte ut värde från en collection
Därför är det naturligt att instansiera objekten.
Felmeddelande tyder på att objektet på position inte stödjer inte medlemen. Det beror antingen på att det är vel värde som stoppats in eller anropet.
Testa med följande kod:
Private Sub SetRtoValueToList()
Dim columnHeaders As ColumnHeader
Dim myListItem As ListItem
Dim test As String
Dim oClsRto As clsRto
Set columnHeaders = lvwRtoValue.columnHeaders.Add(, , _
g_rsRtoValue.Fields.Item(0).Name, _
TextWidth(g_rsRtoValue.Fields.Item(0).Name))
Set columnHeaders = lvwRtoValue.columnHeaders.Add(, , _
g_rsRtoValue.Fields.Item(1).Name, _
TextWidth(g_rsRtoValue.Fields.Item(1).Name))
Set oClsRto = g_ColRto.Item(22)
Set myListItem = lvwRtoValue.ListItems.Add(, , oClsRto.Factory.value)
myListItem.SubItems(1) = oClsRto.Line
'myListItem.SubItems(2) = oClsRto.ArtNo
End Sub
Om det är fel objekt i g_ColRto kommer du få ett fel på:
Set oClsRto = g_ColRto.Item(22)
Eventuellt kommer du få ett kompilerings fel på någon av raderna under.
Sv: Får inte ut värde från en collection
Jag hittade felet.
Jag hade satt egenskapen till private istället för public
Än en gån tack för era svar
Stefan HSv:Får inte ut värde från en collection
En skicklig programmerare som du kan väl ändå inte mena att ett objekt ska instansieras lika många gånger som en loop "snurrar".
Objektet instansierar man ju innan loopen.
Det finns ju inget som hindrar att man byter data i loopen.
EDIT:
tja....efter en stunds funderande kan faktiskt även jag se att det kan finnas tillfällen då det finns anledning att göra så, men....då gäller det att hålla tungan i rätt mun.....Sv: Får inte ut värde från en collection
Att ladda alla rader kan på sikt ge prestanda problem. Det tar tid och resurser att ladda objekten.
Så länge det rör sig om små datamängder som inte växer i någon strre takt borde det inte vara några problem.