Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VBA / ACC2010] Gecombineerde keuzelijst met invoervak

Pagina: 1
Acties:

  • Dinnesch
  • Registratie: September 2009
  • Laatst online: 22-08 11:01
Ik heb een Access formulier waarop ik een keuzelijst met invoervak heb zodat de gebruiker snel een persoon kan kiezen. In dit invoervak heb ik 2 velden uit de tabel gecombineerd: 'voorletters' en 'achternaam'. Om deze velden te combineren heb ik
code:
1
Expr1: [voorletters] & " " & [achternaam]

als gegevensbron ingesteld, wat werkt zoals verwacht:
Afbeeldingslocatie: http://i.imgur.com/5JnBW.png

Om de gegevens van de gekozen persoon te laden in het formulier heb ik dit script aangepast om de gecombineerde velden die de gebruiker kiest te begrijpen:

VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub LidKiezen_AfterUpdate()
Dim rs As DAO.Recordset 'variabele die de nieuwe waarden van formulier tijdelijk opslaat

Set rs = Form_Leden_aanpassen.RecordsetClone

'Zoek naar de eerste match van [voornaam]+spatie+[achternaam] in tabel
rs.FindFirst "[voorletters]& "" "" &[achternaam] = " & Me.LidKiezen 
    If rs.NoMatch Then
        MsgBox "Niet gevonden!"
    Else
        Form_Leden_aanpassen.Bookmark = rs.Bookmark 'Stel formulier in op gekozen lid
    End If

Set rs = Nothing
DoCmd.GoToControl "Find_Combo"
End Sub


Als ik met deze code een naam kies in de keuzelijst krijg ik de volgende fout:
quote: access
Fout 3077 tijdens uitvoering:

De expressie bevat ongeldig gebruik van ".", "!" of "()"..
waarna blijkt dat regel 6 deze fout veroorzaakt. Ik snap niet wat er mis is met de syntax, want als je een quote in een quote wil hebben(de spatie in dit geval) moet je volgens de handleiding een dubbele quote gebruiken.

Kan iemand mij vertellen wat ik verkeerd doe?

Bedankt :)

[ Voor 3% gewijzigd door Dinnesch op 08-05-2012 12:13 ]


  • Mental
  • Registratie: Maart 2000
  • Laatst online: 20-10-2020
Wat wil je nou eigenlijk?
Je start een string, je zet een & teken neer om een string te koppelen met een andere string voordat je de string zelf afsluit, & teken doet in dit geval niets.
Je sluit vervolgens je string niet af maar zet er een quote in, vervolgens een spatie en dan weer een quote.
Vervolgens weer een &teken en de rest van de string.

Hele vage constructie en niet verwonderlijk dat je een error krijgt.

edit:

Maar even kort, je hebt een keuzelijst met waardes waar je wat mee wil doen?
Die keuzelijst is al gekoppeld aan een record dus waarom je die nog moet gaan opzoeken is me niet helemaal duidelijk.

[ Voor 19% gewijzigd door Mental op 08-05-2012 12:24 ]


  • Dinnesch
  • Registratie: September 2009
  • Laatst online: 22-08 11:01
Zoals ik probeerde duidelijk te maken met het screenshot in de startpost, laat de keuzelijst 2 velden gecombineerd zien(zodat de gebruiker onderscheid kan maken tussen 2 personen met dezelfde achternaam maar andere voorletters), als de gebruiker een persoon in de lijst aanklikt horen de bijbehorende gegevens van die persoon in het formulier geladen te worden. Dit probeer ik te doen via het script in de startpost wat niet naar behoren werkt.
Maar even kort, je hebt een keuzelijst met waardes waar je wat mee wil doen?
Die keuzelijst is al gekoppeld aan een record dus waarom je die nog moet gaan opzoeken is me niet helemaal duidelijk.
Is er dan een 'cleanere' manier om aan de hand van het keuzevak met de 2 gecombineerde velden het Bookmark(de getoonde gegevens) van het formulier te veranderen? LidKiezen (de keuzelijst) heeft namelijk geen Bookmark eigenschap en ik heb al uitgebreid gegoogled op dit onderwerp.
Je start een string, je zet een & teken neer om een string te koppelen met een andere string voordat je de string zelf afsluit, & teken doet in dit geval niets.
Je sluit vervolgens je string niet af maar zet er een quote in, vervolgens een spatie en dan weer een quote.
Vervolgens weer een &teken en de rest van de string.
Het is toch zo dat FindFirst zoekt op alles in de buitenste quote(wat in het formaat voorletters+spatie+achternaam moet om het correct te vergelijken met waar de gebruiker op klikt)? Omdat [voorletters], de spatie en [achternaam] niet van hetzelfde type zijn moet er volgens mij een & tussen. Als ik de & tekens op regel 6 weglaat krijg ik zoals verwacht een syntax error.

  • Mental
  • Registratie: Maart 2000
  • Laatst online: 20-10-2020
Ok, dit is redelijk eenvoudig te doen.

Voeg in je formulier ( in het blauwe gedeelte) een keuzelijst met invoervak toe, kies voor 'Een record in het formulier opzoeken op basis van de waarde die is geselecteerd in de keuzelijst met invoervak'.

Selecteer de kolommen die je wil gaan zien in je invoervak (voorletters & achternaam).
Laat vinkje aanstaan bij 'sleutelkolom verbergen' en rond de wizard af.

Nu ben je al een heel eind, je zal alleen zien dat in het invoervak slechts de voorletters zijn ingevuld en je de achternaam pas ziet bij het openklappen.

Pas in de eigenschappen van de keuzelijst het volgende aan:

Gegevens - Rijbron, dit was (ongeveer):
code:
1
SELECT [leden].[Id], [leden].[voorletters], [leden].[achternaam] FROM leden;

En dit mag worden:
code:
1
SELECT [leden].[Id], [leden].[voorletters] & " " & [leden].[achternaam] FROM leden;


Opmaak - Aantal kolommen
Dit was: 3.
Dit mag worden: 2.

Klaar ;)

  • Dinnesch
  • Registratie: September 2009
  • Laatst online: 22-08 11:01
Helemaal top Mental, met behulp hiervan + een paar kleine aanpassingen is het me gelukt. En dit is een "cleanere" manier omdat hij gewoon het ID ipv een voor-computers-vage combinatie van gebruikersnaam+achternaam gebruikt voor het zoeken :)

Mocht iemand er nog wat aan hebben in de toekomst is hier het 'totaal' van wat ik gebruik:

Instellingen keuzelijst / combobox
Naam: LidKiezen
Aantal kolommen: 2
Kolombreedten: 0cm;50cm (Tenzij je het ID aan de gebruiker wil laten zien)
Afhankelijke kolom: 1

SQL query:
code:
1
SELECT leden.ID, leden.voorletters & " " & leden.achternaam FROM leden;

(In de eerste kolom het ID, in de tweede voorletters+spatie+achternaam)

AfterUpdate code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub LidKiezen_AfterUpdate()
Dim rs As DAO.Recordset
    
If Not IsNull(Me.LidKiezen) Then 'Controle of het vak niet leeg is(om errors te voorkomen)
    Set rs = Form_Leden_aanpassen.RecordsetClone

    rs.FindFirst "[ID] = " & Me.LidKiezen 'Vergelijk het ID uit tabel met het ID wat bij de gekozen naam hoort
        If rs.NoMatch Then
            MsgBox "Niet gevonden!"
        Else
            Form_Leden_aanpassen.Bookmark = rs.Bookmark
        End If
End If
Set rs = Nothing
End Sub