[VBA] 2d array error

Pagina: 1
Acties:

  • Paxlie
  • Registratie: Oktober 2000
  • Laatst online: 09-02 10:40

Paxlie

chaos en inslag

Topicstarter
En de volgende VBA vraag weer :)

Volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
Dim rst As Recordset
Dim dbs As Database
Dim i As Integer
Dim avarrecords As Variant
MsgBox Left(Right(Forms.Retour_invul.Productcode, 38), 6)
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Extra Opties")
avarrecords = rst.GetRows(rst.RecordCount)
For i = 0 To rst.RecordCount
MsgBox avarrecords(0, i)
Next i

De tabel Extra Opties ziet er zo uit (jah, ik weet dat spaties in een tabel niet handig zijn :))
code:
1
2
3
4
5
optienummer Productcode Optie

1       700041      dip
2       700041      blaat
3       700041      woei

Het lijkt mij nu dus dat ie gewoon in die msgbox eerst 1 dan 2 en dan 3 neergooit. Hij geeft echter bij het tweede gebeuren. Dus dan is i=1 en zou die IMHO van de 2 rij de 1e kolom moeten pakken. Ik krijg dan de melding dat het subscript out of range is. Volgens mij is dit echter niet zo, maar wat ik ook probeer, ik kom er niet uit waardoor dat komt. Iemand die enig idee heeft, want op het moment zit ik nu in een combinatie van 8)7 + |:(

Wie werd waar wanneer geboren en waarom werd hij door wie hoe genoemd?
braque© zijn is een keuze


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:48
Begint een array in VBA te indexeren vanaf 0 of vanaf 1?
Heb je al eens gedebugged?

https://fgheysels.github.io/


  • Paxlie
  • Registratie: Oktober 2000
  • Laatst online: 09-02 10:40

Paxlie

chaos en inslag

Topicstarter
Een array begint in VBA bij 0, vandaar ook dat ik bij 0 begin.

Tevens heb ik al een aantal keer gedebugged. Ik ben hier al een tijdje mee bezig, maar ik kom er niet helemaal uit, vandaar dit topic @ /14

Als i = 0 doet ie het dus wel
en als i groter wordt, dan niet meer. In de help van Access staat het ook zo beschreven (tenzij ik die verkeerd lees ofzow, ben nog steeds ietwat dood van campzone :z )

M.a.w. ;(

Wie werd waar wanneer geboren en waarom werd hij door wie hoe genoemd?
braque© zijn is een keuze


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:48
Ben je dan wel 100% zeker dat er meer dan 1 element in jouw array zit?

https://fgheysels.github.io/


  • Paxlie
  • Registratie: Oktober 2000
  • Laatst online: 09-02 10:40

Paxlie

chaos en inslag

Topicstarter
Jah, al heb ik absoluut geen idee van hoe ik dit zou moeten testen, maar ik heb een ander brok source-code wat ongeveer hetzelfde doet maar andere dingen doet met de data uit de array en daar werkt het wel. Zo wat ik zie zijn dat exacte kopieen van elkaar. Dat maakt het alleen maar vreemder dus :)

Wie werd waar wanneer geboren en waarom werd hij door wie hoe genoemd?
braque© zijn is een keuze


Verwijderd

ik ben bang dat je recordcount 3 aangeeft en dat ie in de array van 0 tot 3 gaat kijken terwijl ie maar van 0 tot 2 moet lopen.
Probeer eens:
For i = 0 To rst.RecordCount - 1
te doen

  • Paxlie
  • Registratie: Oktober 2000
  • Laatst online: 09-02 10:40

Paxlie

chaos en inslag

Topicstarter
Ok, maar dan zou die bij de 2e tog nog geen error moeten geven? Want hij laat de eerste wel zien. Enniehoe, ik ga het ff proberen. Denk niet dat het de oplossing is, maar we zullen zien. :)

Overigens heb ik al met i zitten stoeien en gewoon die-hard waardes erin te gooien. Dan doet ie het ook niet.....

Wie werd waar wanneer geboren en waarom werd hij door wie hoe genoemd?
braque© zijn is een keuze


Verwijderd

en als je dit nu eens gebruikt :
For intRecord = 0 To UBound(avarRecords, 2)
(uit de help van Access)

  • Paxlie
  • Registratie: Oktober 2000
  • Laatst online: 09-02 10:40

Paxlie

chaos en inslag

Topicstarter
Die telt ook gewoon heel vrolijk hoeveel er in die array zitten. Hij zegt dan ook vrolijk dat er 2 rijen inzitten met 0 waardes :|
k snap er echt geen kloot meer van van waar het nou fout gaat. Ik bedoel, ik laat een recordset, die zit vol met waardes. Als ik dat dan ompleur naar die 2d array, dan issie in ene leeg? Ik snap niet helemaal waar dit nou fout gaat. Het leuke is namelijk dat ik bij dat andere brokje sourcecode hetzelfde doe en daar werkt het wel :/

soort van bewijs:
code:
1
2
3
4
5
6
7
Dim rst As Recordset
Dim avarrecords As Variant
Dim hulpjeding As String
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Verslaghulp")

avarrecords = rst.GetRows(rst.RecordCount)

Als ik dan later die array oproep, dan gaat het wel goed, dus ik vind het allemaal nogal vreemd :/

Wie werd waar wanneer geboren en waarom werd hij door wie hoe genoemd?
braque© zijn is een keuze


Verwijderd

Heb je al eens een breakpoint gezet en gekeken naar avarrecords ?
Ik heb een zelfde stukje code uitgevoerd en mijn array is prima gevuld.
Wat doet ie bij jou ?

Verwijderd

Ik heb net mijn code met DAO gedaan (werk altijd met ADO) en dan geeft ie recordcount = 1
Dus een rst.movelast ertussen gezet en dan vult ie de array zonder problemen.

/edit

en ook weer een rst.movefirst anders krijg je alleen het laatste record 8)7

  • Paxlie
  • Registratie: Oktober 2000
  • Laatst online: 09-02 10:40

Paxlie

chaos en inslag

Topicstarter
Met rst.movelast leest ie wel heel netjes de hele code in. Ik denk dat ik verder wel uitkom. Hij geeft nu nog de zelfde error, maar hij heeft wel alle waardes in zich zitten, dus komt wel goed ik :)

Wie werd waar wanneer geboren en waarom werd hij door wie hoe genoemd?
braque© zijn is een keuze

Pagina: 1