[VBA] eenvoudige expressie werkt niet

Pagina: 1
Acties:

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Ik kom er even helemaal niet uit.

In Access heb ik een zoekscherm gebouwd voor een database dat de resultaten in een lijst weergeeft.

Om er nu voor te zorgen dat het volgende zoekresultaat weer in een lege lijst terechtkomt, heb ik onderstaande code geschreven.

code:
1
2
3
4
aantal = Me.lstzoekresultaat_wedstrijden.ListCount
For x = 1 To (aantal - 1)
    Me.lstzoekresultaat_wedstrijden.RemoveItem x
Next


Overigens is de variabele aantal keurig gedefinieerd als een integer.

De lijst heeft kolomkoppen, vandaar dat ik item 0 niet laat verwijderen en de rest wel.

Wat gebeurt er echter... een keer zoeken gaat goed, de tweede keer geeft een foutmelding: kan item 2 niet verwijderen uit de lijst.

Bij de eerst zoekactie is 1 resultaat gevonden. In de foutopsporingsmodus blijkt dan ook keurig dat ListCount op 2 staat (columnheads en 1 item), maar desalniettemin staat de variabele aantal op 3!

Dit terwijl dit gewoon keurig met een '=' gelijk aan elkaar zou moeten zijn.

Gevolg is dat hij een item probeert te verwijderen dat er niet is en dat laat de database vastlopen voor wat betreft user interface.

Enig idee waarom Access variabelen niet gelijk wil maken aan elkaar?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09:13

Janoz

Moderator Devschuur®

!litemod

Ik zag zelf een ander probleem. Als jij een lijst met 5 items hebt en je hebt de eerste 3 verwijderd. Dan is er toch geen 4e item meer om te verwijderen?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Altijd van achteraan de lijst items verwijderen. Standaardregeltje :)

code:
1
2
3
4
aantal = Me.lstzoekresultaat_wedstrijden.ListCount
For x = 0 to (aantal-2)
    Me.lstzoekresultaat_wedstrijden.RemoveItem (aantal - x)
Next


Disclaimer: ik ken geen VBA. :p

[ Voor 10% gewijzigd door Verwijderd op 28-07-2004 16:01 ]


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 17:14
misschien kun je idd beter werken met iets als

while Me.lstzoekresultaat_wedstrijden.ListCount > 2
Me.lstzoekresultaat_wedstrijden.RemoveItem 1
wend

(weet niet of dit prefcies werkt zoals je wilt, maar t'is een id)

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Nou ja, waarom Access deze fout maakte geen idee, maar heb het maar zo opgelost

code:
1
2
'dan resultatenlijst leegmaken
Me.lstzoekresultaat_spelers.RowSource = "'SpelerID';'Voornaam';'tv';'Achternaam';'Geboortedatum';'Nationaliteit'"

Verwijderd

[oeps]

[ Voor 237% gewijzigd door Verwijderd op 28-07-2004 16:05 ]


  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Verwijderd schreef op 28 juli 2004 @ 16:00:
Altijd van achteraan de lijst items verwijderen. Standaardregeltje :)

code:
1
2
3
4
aantal = Me.lstzoekresultaat_wedstrijden.ListCount
For x = 0 to (aantal-2)
    Me.lstzoekresultaat_wedstrijden.RemoveItem (aantal - x)
Next


Disclaimer: ik ken geen VBA. :p
Als het idd van achteraan moet, dan hoort je code wel andersom denk ik.

code:
1
for x = (aantal-1) tot 0


Maar goed, wat gewoon stom was: in de foutopsporingsmodus kun je door je muis een variabele te houden de waarde daarvan zien.

Terwijl hij dan vastliep op het remove-gebeuren kon ik zien dat aantal de waarde van 3 had, terwijl listcount de waarde 2 had.

Dat is logisch tegenstrijdig, los van de nu zelf al gebruikte oplossing.

Verwijderd

TromboneFreakus schreef op 28 juli 2004 @ 16:03:
[...]


Als het idd van achteraan moet, dan hoort je code wel andersom denk ik.

code:
1
for x = (aantal-1) tot 0
Dan kijk je niet goed naar mijn code :p. Kijk nog es ;).

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Verwijderd schreef op 28 juli 2004 @ 16:06:
[...]


Dan kijk je niet goed naar mijn code :p. Kijk nog es ;).
SOrry (aantal -x) gemist
Pagina: 1