Combobox selectie

Status
Niet open voor verdere reacties.

Kirana2014

Gebruiker
Lid geworden
21 okt 2020
Berichten
55
Beste,

Hoe dit probleem op te lossen? select-waarde op Combobox hangt af van de textbox waarde
Is het mogelijk om de combobox in te vullen op basis van de gegevens in een tekstbox.
Ex. Bij het invoeren van een naam in het textbox a_name, zou de combobox hetzelfde moeten weergeven.

Voorbeel in textbox = Alex in combobox verschijnt alleen naam Alex
Voorbeeld bijgevoegd.
Bij voorbaat dank.
 

Bijlagen

  • combobox.png
    combobox.png
    20,2 KB · Weergaven: 35
  • Data.zip
    28,6 KB · Weergaven: 18
Laatst bewerkt:
Waarom zou je dat willen doen? Dat is, op zijn minst: de omgekeerde wereld. Je gebruikt doorgaans een keuzelijst (met invoervak) om een ánder tekstvak te vullen met een waarde uit je keuzelijst. Andersom is zeer ongebruikelijk. Waarom zou je dat willen doen? \
Laten we het ook even over de techniek hebben: je gebruikt deze query onder de keuzelijst:
Code:
SELECT NamaID, Nama FROM Nama ORDER BY Nama
De keuzelijst retourneert dus een getal, geen tekst. Je zult dus, als je dezelfde naam wilt selecteren in de keuzelijst als de getypte waarde, de naam moeten 'omzetten' naar het bijbehorende NamaID. Dat kan uiteraard best, maar is behoorlijk ingewikkeld. Ik zie echt niet waarom je dat zou willen doen.
 
Hoi Kirana,

dat is zeker mogelijk. Ik zal er deze namiddag/avond proberen naar kijken.
Vriendelijke groeten
Noëlla
 
Omdat Er komt username login in de textbox
Maar dan nog: waarom zou je dat doen? Die staat immers ook al in de keuzelijst? Nogmaals: (en ik heb nooit gezegd dat het niet kon, noella), het kan best wel, maar het is zo zinloos. Als je een username wilt in het tekstvak, dan is dat ofwel de gebruikersnaam die je kiest in de keuzelijst (en dat is simpel op te lossen), ofwel je gebruikt de ingelogde gebruiker om de user te selecteren (ook logisch; waarom zou je inloggen als iemand anders?). In het tweede geval kun je op basis van de login naam van de gebruiker automatisch de juiste gegevens op laten zoeken in het systeem. Wat dus niet logisch is, is dat je de db opstart zonder één van deze twee opties, maar een gebruiker een naam in het tekstvak in laat typen, en dat je dan een actie laat uitvoeren (met een knop?) die de gebruiker opzoekt en vervolgens dezelfde informatie in de keuzelijst ophaalt. Is zó onlogisch....

Nog afgezien van het feit dat je in een keuzelijst veel beter en behoorlijk foutloos een gebruiker(naam) kan opzoeken dan dat je die zelf in moet typen, met alle kans op typefouten. Nogmaals dus mijn vraag: wat is je proces precies?

Kleine aanvulling nog: wat mij wél logisch lijkt, is dat je in het tekstvak van de keuzelijst met invoervak de naam invoert, en bij de keuze ervan vervolgens de username in het tekstvak zet met de formule =[cmbnama].[column](1).

En om je een idee te geven hoe je het kan oplossen op de manier zoals je het vraagt, deze code:

Code:
Private Sub Nama_AfterUpdate()
Dim res As Variant
    res = DLookup("[NamaID]", "[Nama]", "[Nama] = """ & Me.Nama.Value & """")
    If IsNull(res) Then Exit Sub
    Me.cmbnama.Value = res
    Me.Cabang.SetFocus
End Sub

Deze doet dus niets als je een foute naam invoert, en zoekt de juiste persoon op als die wél bestaat. Doe er je voordeel mee....
 
Natuurlijk kan men van alles zeggen: de omgekeerde wereld. Je gebruikt doorgaans een keuzelijst (met invoervak) om een ánder tekstvak te vullen met een waarde uit je keuzelijst.

Hoe je ook went of keert, een tabel met namen die zal je ook moeten intypen en daar kan je ook fouten mee maken.

Er kan ook een code gemaakt worden als een naam niet voor komt in de keuzelijst (met invoervak), maar daar kan je ook fouten maken.

Lood om koud ijzer dus allemaal.

Kirana wil het op een andere manier en haar tekstvak Nama gebruiken om een nieuwe naam toe te voegen in de keuzelijst.

Wil nog wel meegeven dat het gebruik van een tabel met nama, een formulier met Nama, een tekstveld met Nama kan leiden tot problemen.

Maar goed om vanuit het tekstveld de tabel te vullen met een nieuwe naam kan u de volgende code gebruiken:

Code:
With CurrentDb.OpenRecordset("nama")
        .AddNew
        !nama = Me!nama
        .Update
    End With
Me.cmbnama.Requery

Gr. Cor
 
Dag Kirana,

Enkele vragen: wordt de login naam op één of andere wijze automatisch in het formulier ingevuld bij inloggen/openen van het formulier? Is dit de Windows usernaam van degene die inlogt? Wat is het gebruik van dit scherm, is dit het login scherm waarin gecontroleerd wordt of de ingelogde gebruiker genoeg rechten heeft?
Wat moet er gebeuren als daar een naam staat die nog niet in de tabel voorkomt?

In het bijgevoegde voorbeeld vind je één van de mogelijkheden om de naam automatisch in te vullen. Als de naam niet bestaat krijg je een foutmelding. Hopelijk geeft dit wat inspiratie.
 

Bijlagen

  • Data.zip
    57 KB · Weergaven: 11
Is het mogelijk om de combobox in te vullen op basis van de gegevens in een tekstbox.

Laten we er voor het gemak eens vanuit gaan dat pletter gelijk heeft, en dat Kirana nieuwe waarden wil kunnen toevoegen aan haar onderliggende tabel van de keuzelijst.
Kirana wil het op een andere manier en haar tekstvak Nama gebruiken om een nieuwe naam toe te voegen in de keuzelijst.

Laten we de eerste opmerkingen van Cor achterwege (gemaakte fouten kun je simpel afvangen, zoals blijkt uit mijn voorbeeldje)
Dan zijn de aangedragen oplossingen bepaald niet ideaal, en is de ideale oplossing dus een oplossing die je vanuit de keuzelijst triggert. Immers: de keuzelijst wordt gebruikt om een gebruiker te selecteren. Die keuzelijst kun je dus óók gebruiken om nieuwe personen toe te voegen. Daar heeft de keuzelijst namelijk gewoon een actie voor. Gebruik die dan ook, zou ik zeggen. En dan krijg je dus, gewoon zonder extra knoppen of tekstvakken, deze code die aan de keuzelijst hangt:

Code:
Private Sub cmbnama_NotInList(NewData As String, Response As Integer)
Dim msg As String, res As Integer
    msg = "'" & NewData & "' is geen gebruiker." & vbCrLf & "Wil je '" & NewData & "' toevoegen?"
    res = MsgBox(msg, vbYesNo + vbQuestion, "Onbekende gebruiker")
    Select Case res
        Case vbYes
            DoCmd.SetWarnings False
            DoCmd.RunSQL "INSERT INTO Nama ( Nama ) Values (""" & NewData & """)"
            DoCmd.SetWarnings True
            Response = acDataErrAdded
        Case vbNo
            MsgBox "Kies een andere persoon uit de lijst.", vbExclamation + vbOKOnly, "Verkeerde keuze gemaakt"
            Response = acDataErrContinue
            Exit Sub
    End Select
    res = DLookup("[NamaID]", "[Nama]", "[Nama] = """ & NewData & """")
    If IsNull(res) Then Exit Sub
    Me.cmbnama.Value = res
    Me.Cabang.SetFocus
End Sub

Hij is wat uitgebreid, maar dat komt omdat er een stukje foutafvanging in zit. In essentie werkt het simpel: je typt in de keuzelijst een naam in die niet bestaat, en als je de keuzelijst verlaat wordt de gebeurtenis <Bij niet in lijst> getriggerd. Die vraagt of je de nieuwe waarde wilt toevoegen. Zo ja: record wordt aangemaakt in de tabel Nama (ik ben het met pletter eens dat de naamgeving behoorlijk ongelukkig is van tabel, veld etc.) en de nieuwe waarde wordt geselecteerd. Simpel en doeltreffend.
 

Bijlagen

  • Data.zip
    34,1 KB · Weergaven: 20
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan