Ik heb een vaag probleem in Access, lees aub goed door, heb zo goed mogelijk proberen te omschrijven:
Ik heb een scherm, met daarop een zoekveld en een keuzelijst (listbox). In de keuzelijst - daarin worden de records weergegeven - kunnen gebruikers uit de records kiezen door de juiste regel te selecteren (klikken), in het scherm wordt dan de bijbehorende record weergegeven.
In het zoekveld kunnen gebruikers het persoonsnummer ingeven, na ingave worden de persoongegevens weergegeven.
[zoekveld]
[keuzelijst]
1 Piet
2 Jan
[3 Klaas]
4 Hein
In dit geval: klikken of zoeken op "3" en je ziet de adresgegevens van klaas (tis maar een voorbeeld).
Uiteraard geen problemen hier, echter, de gebruikers hadden gevraagd om de zoekfunctie uit te breiden met een aantal velden, bijv. niet alleen het nummer maar ook de naam en de woonplaats.
Dat heb ik gemaakt door bij [keuzelijst].rowsource = "" een query op te geven na bijwerken van het keuzeveld die parameters heeft voor de vereiste zoekvelden (die allemaal in dat ene zoekveld ingegeven worden, dus EN nr, EN naam, EN plaats en nog andere velden)
Als je dus in het zoekveld Amsterdam ingeeft, zie je nu iedereen die in Amsterdam woont.
Welnu: als je een zoekopdracht geeft die meerdere records als resultaat geeft (Piet en Heijn wonen in beide amsterdam), dan zal de gebruiker zelf nog met de muis de juiste persoon moeten aanklikken om zijn gegevens te zien.
Als je echter een zoekopdracht ingeeft die maar 1 resultaat geeft (bijv zoeken op "Piet") dan zou de computer zelf die ene record moeten selecteren en de bijbehorende gegevens moeten weergeven, want er is maar 1 mogelijke record, dus waarom nog eens extra klikken.
Ik heb daarvoor de volgende code achter het zoekveld gezet:
m.a.w.:
- eerst beperkt het zoekveld de inhoud van de keuzelijst dmv baseren op de query "zoek persoon" met parameters obv het zoekveld
- daarna wordt bekeken of de keuzelijst 1 resultaat weergeeft
- volgende stap is het selecteren van die ene regel
(- ter controle wordt in een msgbox de sleutel (persoonsnr) weergegeven) -> nu uitgeschakeld
That's it, werkt allemaal.
Het probleem (hehe
):
Na uitvoering van de code en weergave van die ene regel, die ook nog eens geselecteerd is (!), kan ik verder helemaal niets
Om te beginnen is dus wel degelijk de juiste regel geselecteerd, want in de msgbox verschijnt de geselecteerde regel van de keuzelijst, maar in het scherm worden niet de persoonsgegevens weergegeven zoals wanneer je op het scherm klikt, dit terwijl via selected de record geselecteerd is.
Als ik dan de keuzelijst wil laten herberekenen (.requery) dan gaat dat niet, krijg ik een foutmelding over het opslaan van een record (?!) die ik niet thuis kan brengen.
Verder werkt ook klikken op de keuzelijst niet, op de een of andere manier is dat ding niet beschikbaar. Requery, repaint etc op het formulier of de keuzelijst geven allemaal foutmeldingen, de focus kan niet verplaatst worden, ik kan helemaal NIETS.
Ook zoiets raars is dat als ik zoek op een persoon en ik maar 1 record terugkrijg ik zijn nummer in beeld krijg (msgbox) en de juiste record geselecteerd zie, maar als ik dan naar de ontwerpweergave van het scherm ga dan krijg ik NOG eens die msgbox met dat nummer in beeld.
Het lijkt wel alsof access in 1 of andere loop vastzit.
Ik heb geen idee wat er aan de hand is en ik heb toch wel redelijk ervaring met Access en VBA, maar ik zit hier al 2 dagen op de kloten...
volgens mij overzie ik een heel simpel detail of zo
Ik heb een scherm, met daarop een zoekveld en een keuzelijst (listbox). In de keuzelijst - daarin worden de records weergegeven - kunnen gebruikers uit de records kiezen door de juiste regel te selecteren (klikken), in het scherm wordt dan de bijbehorende record weergegeven.
In het zoekveld kunnen gebruikers het persoonsnummer ingeven, na ingave worden de persoongegevens weergegeven.
[zoekveld]
[keuzelijst]
1 Piet
2 Jan
[3 Klaas]
4 Hein
In dit geval: klikken of zoeken op "3" en je ziet de adresgegevens van klaas (tis maar een voorbeeld).
Uiteraard geen problemen hier, echter, de gebruikers hadden gevraagd om de zoekfunctie uit te breiden met een aantal velden, bijv. niet alleen het nummer maar ook de naam en de woonplaats.
Dat heb ik gemaakt door bij [keuzelijst].rowsource = "" een query op te geven na bijwerken van het keuzeveld die parameters heeft voor de vereiste zoekvelden (die allemaal in dat ene zoekveld ingegeven worden, dus EN nr, EN naam, EN plaats en nog andere velden)
Als je dus in het zoekveld Amsterdam ingeeft, zie je nu iedereen die in Amsterdam woont.
Welnu: als je een zoekopdracht geeft die meerdere records als resultaat geeft (Piet en Heijn wonen in beide amsterdam), dan zal de gebruiker zelf nog met de muis de juiste persoon moeten aanklikken om zijn gegevens te zien.
Als je echter een zoekopdracht ingeeft die maar 1 resultaat geeft (bijv zoeken op "Piet") dan zou de computer zelf die ene record moeten selecteren en de bijbehorende gegevens moeten weergeven, want er is maar 1 mogelijke record, dus waarom nog eens extra klikken.
Ik heb daarvoor de volgende code achter het zoekveld gezet:
code:
1
2
3
4
5
6
7
8
9
10
11
| Dim CTL As Control
Me![keuzelijst].RowSource = "zoek persoon"
If Me![keuzelijst].ListCount - 1 = 1 Then
Set CTL = Me![keuzelijst]
CTL.Selected(1) = True
' MsgBox CTL.Column(0, 1)
End If |
m.a.w.:
- eerst beperkt het zoekveld de inhoud van de keuzelijst dmv baseren op de query "zoek persoon" met parameters obv het zoekveld
- daarna wordt bekeken of de keuzelijst 1 resultaat weergeeft
- volgende stap is het selecteren van die ene regel
(- ter controle wordt in een msgbox de sleutel (persoonsnr) weergegeven) -> nu uitgeschakeld
That's it, werkt allemaal.
Het probleem (hehe
Na uitvoering van de code en weergave van die ene regel, die ook nog eens geselecteerd is (!), kan ik verder helemaal niets
Om te beginnen is dus wel degelijk de juiste regel geselecteerd, want in de msgbox verschijnt de geselecteerde regel van de keuzelijst, maar in het scherm worden niet de persoonsgegevens weergegeven zoals wanneer je op het scherm klikt, dit terwijl via selected de record geselecteerd is.
Als ik dan de keuzelijst wil laten herberekenen (.requery) dan gaat dat niet, krijg ik een foutmelding over het opslaan van een record (?!) die ik niet thuis kan brengen.
Verder werkt ook klikken op de keuzelijst niet, op de een of andere manier is dat ding niet beschikbaar. Requery, repaint etc op het formulier of de keuzelijst geven allemaal foutmeldingen, de focus kan niet verplaatst worden, ik kan helemaal NIETS.
Ook zoiets raars is dat als ik zoek op een persoon en ik maar 1 record terugkrijg ik zijn nummer in beeld krijg (msgbox) en de juiste record geselecteerd zie, maar als ik dan naar de ontwerpweergave van het scherm ga dan krijg ik NOG eens die msgbox met dat nummer in beeld.
Het lijkt wel alsof access in 1 of andere loop vastzit.
Ik heb geen idee wat er aan de hand is en ik heb toch wel redelijk ervaring met Access en VBA, maar ik zit hier al 2 dagen op de kloten...
[ Voor 5% gewijzigd door Stefke op 08-10-2003 21:35 ]