Werking afhankelijke keuze lijst tijdens bewerken

Status
Niet open voor verdere reacties.

snelledre

Gebruiker
Lid geworden
1 dec 2013
Berichten
40
Allen,

Ik heb een afhankelijke keuze lijst gemaakt V2 zoals in de cursus hoofdstuk 9.
De heb ik ook nog uitgebreid met nog een invoervak dus 4 stuk.
Dit werkt perfect als ik bijvoorbeeld een nieuwe registratie aanmaak met formulier1.
Bijvoorbeeld veld1: Lijn A, veld2: uitsteeklijn, veld3: 1e 2 walswerk en de veld 4 is in dit geval leeg. record opgeslagen.
Nu wil ik later deze orderbewerker omdat ik een fout heb gemaakt.
Ik heb nu een bijna een één op één kopie gemaakt for mulder1 nu genoemd formulier2 met dezelfde afhankelijk keuze lijst.
Maar nu het probleem hoe kan ik ervoor zorgen dat de gegevens worden opgehaald in de afhankelijke keuze lijst en deze weergeeft?
En natuurlijk ook als ik een record terug of verder ga.
Ik hoop dat het duidelijk is.

André
 
Nee, ik snap je niet helemaal vrees ik. Je hebt het steeds over een formulier, maar ligt het probleem niet in je tabel? Een formulier met keuzelijsten laat in die keuzelijsten waarden (recordsets) zien die uit een andere tabel komen (meestal dan). De hoeveelheid velden in die keuzelijst boeit eigenlijk niet; daar kun je makkelijk velden aan toevoegen zonder dat het de werking van je formulier aantast.
Anders wordt het als je een afhankelijke keuzelijst op een formulier maakt, dat dus afhankelijk is van de waarde van een andere keuzelijst. Dat werkt prima als je een nieuw record aanmaakt, omdat je dan de volgende keuzelijst vult op basis van de eerste keuzelijst.
Bij het openen van een bestaand record heb je echter een probleem, omdat in de eerste keuzelijst geen selectie wordt gemaakt, en de tweede keuzelijst dus niet wordt gevuld. Resultaat: de keuzelijst blijft leeg. Wél blijft de waarde die je eerder had gekozen gewoon in de tabel staan. Dus heel rampzalig is het niet. Maar wil je de gekozen waarde toch zien, dan moet je de tweede keuzelijst dus voorzien van een recordbron die de opgeslagen waarde kan laten zien. Daar zijn verschillende manieren voor: je kunt hem vullen met de complete tabel (zit de gekozen waarde er automatisch tussen) of je regenereert de keuzelijst op basis van de eerste keuzelijst. En dan heeft hij weer een geldige recordbron, en zie je dus weer de gekozen waarde.
 
Ik heb dus twee keuzes:

1) Ik laat zien wat er gekozen is kan deze eventueel wijzigen met de afhankelijke keuze lijst maar dat moet de vorige keuze niet overschreven worden zoals nu wel het geval is. Waarom??
2) De keuzelijst regenereren op basis wat er isn de record staat maar dat is mij even niet duidelijk (abracadabra) zullen we maar zeggen.

André
 
Ik wil het wel voor je maken in je database, maar dan moet je er even een voorbeeldje bij doen.

Je eerste opmerking is niet helemaal correct overigens. Als je 2 keuzelijsten hebt, dan zal de eerste keuzelijst alle records laten zien. Die keuzelijst wordt verder niet gefilterd; hij laat dus ook bij het bewerken van records de gekozen waarde zien, want die wordt uit dezelfde tabel gehaald. Als dat niet zo is, heb je een ander probleem.
De 2e keuzelijst is afhankelijk van (een keus die je maakt in) de eerste keuzelijst. Díe zal dus niks laten zien, omdat er bij het muteren geen keus wordt gemaakt. En daarvoor heb je dus een aparte SQL nodig. Meestal controleer ik of een record on de Toevoegmodus staat of niet. In het laatste geval laat je dan alles zien, in het eerste geval de aangepaste keuzelijst. Een voorbeeldje:

Code:
Private Sub cboCat1_Click()
    strSQL = "SELECT Cat.CatID, Cat.Naam, Cat.ParentID, Count(SubCat.CatID) AS AantalSub " _
        & "FROM tCategorie As Cat " _
        & "LEFT JOIN tCategorie AS SubCat ON Cat.CatID = SubCat.ParentID " _
        & "WHERE (Cat.ParentID = " & Me.cboCat1 & ") " _
        & "GROUP BY Cat.CatID, Cat.Naam, Cat.ParentID " _
        & "ORDER BY Cat.Naam;"
    
    Me.cboCat2.RowSource = strSQL
    Me.cboCat2.Requery
End Sub

Deze keuzelijst wordt op de keuzelijst cboCat2 gezet na een klik op cboCat1. Deze keuzelijst blijft bij bladeren dus leeg, want in de keuzelijst cboCat1 wordt niks geselecteerd als je bladert. Dus om de keuzelijst alle records te laten zien, kun je simpel dit gebruiken:
Code:
Private Sub Form_Current()
    strSQL = "SELECT Cat.CatID, Cat.Naam, Cat.ParentID " _
        & "FROM tCategorie As Cat ORDER BY Cat.Naam;"
    Me.cboCat2.RowSource = strSQL
    Me.cboCat2.Enabled = False
End Sub
Nu krijgt de keuzelijst de standaard opties te zien, maar kun je niks meer wijzigen. Maar dat hoeft ook niet. Maar er zijn meer (en iets betere) oplossingen.
 
Octafish,

Ik heb je even een email gestuurd vanuit het forum met de file.
Ik heb nog wel de bovenstaande code geprobeerd maar dit werkt deels voor mij.
Inderdaad nu wordt het record niet overschreven maar is alleen 1 van de 4 velden zichtbaar en zijn ook niet te wijzigen.

André
 
Twee opmerkingen: doordat je een SQL database hebt gekoppeld, zit er geen data in, en dat werkt een beetje lastig. Maak, als dat kan, een voorbeeldje door op basis van de SQL koppelingen nieuwe tabellen in Access zelf te maken, en vul die met wat (dummy) gegevens, zodat alles gewoon werkt. Tweede opmerking: over welk formulier hebben we het hier eigenlijk?
 
Octafish,

Het gaat om het formulier storing zoeken bewerken.
Ik heb toevallig nog een oude probeer versie liggen zonder koppeling naar SQL.
De link mail ik je weer even.
Maar deze werkt wel correct dus ik zie hierin wel de cbo gevult.
Kan jij beoordelen aan de code wat er goed of fout zit?
Zo nee, dan hoor ik dat graag en zal ik de andere om moeten bouwen naar de database in access.

André
 
De eerste keuzelijst is op een verkeerde query gebaseerd. Die hoeft geen koppeling met zichzelf te hebben, maar kun je op alleen tCategorie baseren.
 
Het is me nog niet volledig duidelijk maar goed.
Dezelfde werkt met de database in access perfect maar naar de sql database niet.
Maar goed we gaan nog even doorstoeien.

André
 
Als de SQL tabel goed in Access te lezen is, dan moet de keuzelijst dat ook zijn. Daar kan het eigenlijk niet aan liggen. Tenzij je een PassThrough query probeert op de keuzelijst.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan