Toon posts:

[Access/VB] Listbox index probleem

Pagina: 1
Acties:
  • 276 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Wanneer ik een record toevoeg komt dit bij in de listbox (gesorteerd) maar wanneer ik erop klik geeft de textbox de naam weer van de volgende record en wanneer ik op de laatste record klik krijg ik de naam van de toegevoegde record. Een probleem met de index dus. Als ik het form sluit en terug open werkt alles wel. Hoe kan ik dit oplossen zonder het form steeds te sluiten?

code van listbox:
code:
1
2
3
4
5
6
7
8
9
Private Sub List2_Click()

 Dim iHuidigeRecord As Integer
 
 iHuidigeRecord = List2.ListIndex + 1

 DoCmd.GoToRecord acDataForm, "categorieewa", acGoTo, iHuidigeRecord
 
End Sub


hier is de databank: http://rapidshare.com/files/45723885/Database1.accdb.html


Kan iemand hier ff naar kijken? Bedankt

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:49
Dit heeft niets met Software engineering & Architecture te maken, maar hoort gewoon in programming thuis
-> PRG

Heb je al eens gedebugged ? Ben je zeker dat je de goede index neemt ? Op wat wordt je iHuidigeRecord variable geinitialiseerd , en ben je zeker dat je die met 1 moet verhogen ?

https://fgheysels.github.io/


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 15-07 13:36

sopsop

[v] [;,,;] [v]

De listindex van je listbox is gewoon het x-e item in de listbox. Dat heeft in principe niets met een index van je recordset te maken. Je kunt in de itemdata van je listbox ook de primary key van je recordset zetten bij het laden en die vervolgens bij een onclick op je listbox opzoeken in je recordset.

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

In een vervolg op sopsop:
Hoe wordt je listbox gevuld? Ik gok via een query?
Wat je dan het beste kan doen is je query zo aanpassen dat je ook de PK van je tabel waarin je wil navigeren erin opneemt. Dan pas je het aantal kolommen voor je listbox aan naar 2, waarbij je de tweede kolom (met de PK dus) een breedte van 0 geeft. Vervolgens navigeer je in je _Click event op basis van de waarde van de PK. De Index zegt zoals sopsop al aangeeft niets over de positie van je record in je database; het zegt alleen iets over de positie van het item in de lijst.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:49
Ik vroeg me ook al inderdaad af hoe die 'GoToRecord' precies werkte; verwacht die een primary key, en gaat die dan naar het record met die primary key ?
Dan is het idd onzin om met die index van je listbox te gaan werken.

https://fgheysels.github.io/


  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Nee, GoToRecord verwacht geen PK, die verwacht een index van een record in je recordset. Voor navigeren op PK moet je iets beter je best doen :)
Hint: je moet zoeken in een kopie van de recordset en daarna je positie copieren. Hoe je dat doet laten we voor nu over als oefening voor de TS ;)

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Verwijderd

Topicstarter
Bedankt voor de replys. Ik had e-mail notification aangezet, maar heb geen mail gekregen.. Daarmee dat ik niet antwoordde.

whoami:
Heb je al eens gedebugged ? Ben je zeker dat je de goede index neemt ? Op wat wordt je iHuidigeRecord variable geinitialiseerd , en ben je zeker dat je die met 1 moet verhogen ?
iHuidigeRecord is gewoon de geselecteerde in de listbox. Ik verhoog deze met 1 omdat ik ander de record krijg die voor de geselecteerde staat.

ATS:
Hoe wordt je listbox gevuld? Ik gok via een query?
Nee, gewoon vanuit een tabel.

ATS, wat is een PK en kan ik deze ook aanpassen in een tabel?

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:49
PK = Primary Key.
Wat een primary key is, is basiskennis database - systemen, dus ik vermoed wel dat je weet wat dat is. :) Indien dit toch niet het geval is, dan stel ik voor dat je ff op Google eea opzoekt daaromtrent.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ahja uiteraard..
Ik heb mijn listbox nu 2 kolommen gegeven. Hoe navigeer ik nu volgens de waarde van de PK?.
bedankt

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Verwijderd schreef op woensdag 01 augustus 2007 @ 23:03:
Ik heb mijn listbox nu 2 kolommen gegeven. Hoe navigeer ik nu volgens de waarde van de PK?.
Dan komen we weer terug bij de vraag: wat heb je al geprobeerd? Ik heb je een paar postings eerder al een hint gegeven. Ik zou zeggen: kijk eens in de help van het Recordset object hoe je kan zoeken in een recordset.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Verwijderd

Topicstarter
Ja, dat heb ik gedaan en ik kwam uit op deze code:
Private Sub List2_Click()

Dim iHuidigeRecord As Integer

iHuidigeRecord = List2.ListIndex + 1

DoCmd.GoToRecord acDataForm, "categorieewa", acGoTo, iHuidigeRecord

End Sub
Maar die levert dus een probleem op. Ik denk dat ik gewoon iets klein aan de code moet aanpassen maar weet niet wat. Ik wil eventueel wel een kleine vergoeding geven voor degene die de file ff wil bekijken en aanpassen (als dit toegelaten is op een forum). Ik ben hier nu toch al een tijdje naar op zoek en vind het echt niet en heb het wel vrij dringend nodig.

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Je komt nu terug met precies dezelfde methode waarvan je al weet dat die niet werkt, en waarvan ook al is uitgelegd waarom die niet werkt. Dat schiet natuurlijk niet op. :X Wat je hier doet is niet zoeken in je recordset, maar proberen direct te navigeren met behulp van een listindex die niets met je recordset te maken heeft. Dat werkt hier écht niet. Je moet echt zoeken.

Maar vooruit O-), wat concretere aanwijzingen dan: gebruik de methode RecordsetClone op je formulier. Als je in de Access1 documentatie kijkt bij RecordsetClone, dan staat daar een voorbeeld wat precies doet wat je wil... Dat had je zelf ook wel kunnen vinden denk ik.

1. Ik kijk nu in de documentatie van Access 2003 NL...

[ Voor 17% gewijzigd door ATS op 03-08-2007 15:10 ]

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Verwijderd

Topicstarter
Ok bedankt.
Nu heb ik dit gefabriceert:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub List2_Click()

 Dim iHuidigeRecord As String
 Dim rstCategorie As Recordset
 
 iHuidigeRecord = List2. ??????                         <---
 Set rstCategorie = Me.RecordsetClone

 rstCategorie.FindFirst iHuidigeRecord

 If rstCategorie.NoMatch Then

    MsgBox "No match found"

  Else

    Me.Bookmark = rstCategorie.Bookmark
    
  End If
  
End Sub


Ben ik al op de juiste weg?
De tabel heeft dus maar 1 kolom met 'categorie' genaamd. Hoe spreek ik die nu aan?

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Nee, dit gaat niet werken, want FindFirst verwacht iets anders dan wat je hem nu voert. Dat staat ook in het voorbeeld in de documentatie. Wat snap je daar niet aan?

Verder ben je op zoek hoe je nu die PK krijgt uit je listbox in regel 6 toch? Het ListBox object heeft een "column" eigenschap waarmee je de waarde van een bepaalde cel in je lijst kan opvragen (ik geef toe, dat is een onlogische naam voor wat hij echt doet.) Combineer deze met je listIndex van je lijst (hier dus wel, want hier gaat het over de lijst zelf en niet over de recordset waar je wat mee wil!), en je kan je PK ophalen. Deze PK gebruik je in regel 9 (maar dan volgens het voorbeeld in de Access documentatie) om het record te zoeken waar je heem wil navigeren. Alweer geldt: kijk eens in de documentatie...

Uit de opmerking op de laaste regel leidt ik af dat je denkt dat de naam van een variable op de of andere magische manier iets te maken heeft met de kolomnamen in je tabel. Dat is een vergissing. Een variable is niets anders dan een naam voor iets dat een waarde kan bevatten. Die naam is alleen voor jou relevant, en niet voor de computer, die kijkt alleen of je steeds dezelfde naam gebruikt.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Verwijderd

Topicstarter
Ja ok maar hoe combineer ik dan de column eigenschap van de listbox en de index?
iHuidigeRecord = ?
En ik weet ook dat je FindFirst een string-waarde moet voeren, maar hoe kom ik daaraan als een index toch integer is of niet?
Btw ik ben bezig in access 07 en er staat maar bitter weinig informatie in de help functie over RecordsetClone. Op internet staan wel enkele voorbeelden, maar niet veel nuttige.
Bedankt

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Verwijderd schreef op vrijdag 03 augustus 2007 @ 17:05:
Ja ok maar hoe combineer ik dan de column eigenschap van de listbox en de index?
iHuidigeRecord = ?
Als je nu eens kijkt in de documentatie van de column eigenschap van ListBox, en je je realiseert dat het rijnummer dat je zoekt gelijk is aan de listIndex die je al eens eerder geprobeerd had te gebruiken... Denk je dat je dan iets kan verzinnen om die PK te pakken te krijgen?
En ik weet ook dat je FindFirst een string-waarde moet voeren, maar hoe kom ik daaraan als een index toch integer is of niet?
Het gaat er niet om dat je een stringwaarde moet voeren, dat deed je namelijk al in jouw code die je daarstraks gepost hebt (ondanks de i voor de variabele naam). Het gaat er om hoe die string er uit ziet. Jij probeert hem alleen maar een waarde te voeren, maar het moet, zoals ook in de documentatie én in het voorbeeld staat, er uit zien als de WHERE clausule van een query. Bovendien moet je dus niet de index van de lijst gebruiken daar, maar de PK die je met behulp van die die index uit je lijst gevist hebt.
Btw ik ben bezig in access 07 en er staat maar bitter weinig informatie in de help functie over RecordsetClone. Op internet staan wel enkele voorbeelden, maar niet veel nuttige.
Kennelijk stond het voorbeeld waar ik op doelde er wel in, want die had je bijna overgetypt. De documentatie is natuurlijk niet 100%, maar voor wat jij wil echt voldoende. Het is natuurlijk wel de bedoeling dat je die documentatie dan ook gebruikt als je hints krijgt... Verder vond ik het internet altijd een waardevolle bron, ook als het om Access programmeren gaat. Dat wat je vindt niet altijd helemaal precies is wat je nodig hebt is logisch, er wordt ook enige inspanning van jezelf verwacht.

Ik krijg het gevoel dat het je gewoon aan inzicht in programmeren sec. ontbreekt, en dat is niet iets dat even in een GOT topic opgelost kan worden. Misschien toch maar eens een basisboek over programmeren in visual basic er op na slaan?

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Verwijderd

Topicstarter
Waar heb ik ergens gezegd dat ik kan programmeren? Niet iedereen heeft access gestudeerd.. Het gaat erom dat ik nog enkele lijntjes code nodig heb (de enige in heel het programma/databank) en dan is de applicatie af. Moet ik daarom direct boeken over programmeren beginnen lezen? Ik dacht dat die code niet zo moeilijk zou zijn en dus vroeg ik het hier, maar blijkbaar is dat toch te moeilijk en dus zal ik het wel ergens anders gaan vragen. Bedankt voor de antwoorden nog.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

offtopic:
Hethad geholpen als je je topic in het juiste subforum had gezet, in dit geval officesuites en -software. Als je daar in de search even bookmark of findfirst oid intikt vind je meteen wat voorbeelden.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 16-07 12:26

NMe

Quia Ego Sic Dico.

Laat ik dit topic dan maar voor future reference in OFF zetten. Maar goed, swordfish666: als je in een programmeerforum een vraag stelt, dan wordt in elk geval hier op GoT wel van je verwacht dat je weet waar je het over hebt. Je zal dus inderdaad wel enige kennis van programmeren moeten hebben om hier mee te komen. Als je niet bereid bent je die kennis eigen te maken, dan is de Devschuur misschien niet het meest geschikte onderdeel van GoT voor jou. :)

PRG>>OFF

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Ok ik ben vrij zeker dat ik nu de juiste methode gevonden heb, maar ik krijg nog een syntax error in expression fout op lijn 4.


code:
1
2
3
4
5
6
Private Sub List2_AfterUpdate()
    Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst Me![List2]
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

  • Witte
  • Registratie: Februari 2000
  • Laatst online: 15:44
Kijk dan eens verdorie in de help bij FindFirst.

Je moet FindFirst vertellen op welk VELD je wil zoeken en welke WAARDE de eerste hit oplevert, bijv:

rs.FindFirst "[Achternaam] = 'Jansen'"

zal in je recordset de eerste record met de naam Jansen opleveren, maar jij wil hebben:

rs.FindFirst "ID = " & me!list2

Houdoe


Verwijderd

Topicstarter
Nog steeds syntax error en nu geeft hij soms ook "the microsoft office access database does not recognise -geselecteerde record- as a valid name or expression"

code:
1
2
3
4
5
6
7
8
Private Sub List2_AfterUpdate()
    Dim rs As Object
    Set rs = Me.Recordset.Clone

    rs.FindFirst "Categorie =" & Me!List2

    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

  • Witte
  • Registratie: Februari 2000
  • Laatst online: 15:44
Volgens mij begrijp jij het gebruik van PK's niet.
Als je het goet doet, levert je listbox een unieke key op, zoals hierboven al staat, die kolom geef je desnoods breegte 0, dat je hem in je Listbox niet ziet.
Met deze key zoek je in je recordset naar het juiste record.

Je kan debuggen door een
code:
1
msgbox me!list2

er boven te zetten

Overigens moet op deze manier je listbox wel in het zelfde formulier staan als je waar je dataset zich bevindt. Mag in de kopregel of voetregel, maar wel hetzelfde formulier. Logisch, anders kan je je dataset niet clonen om de bookmark ze toeken.

Houdoe


Verwijderd

Topicstarter
Hahaaa fantastisch het werkt eindelijk. Ik moest dus gewoon in de tabel een veld ID maken en dat autonummering geven en dan de listbox 2 kolommen geven. Hier ben ik dus al 3 weken naar aan het zoeken. Bedankt !

Verwijderd

Topicstarter
Nu heb ik nog iets vreemds gevonden. Wanneer ik de code .currentattachment (access 07) gebruik op een button werkt dit, maar als ik dit op een tab gebruik niet. Weet iemand hoe ik dit toch kan laten werken? Mn laatste vraag..
Pagina: 1