Hoe als merk is ingevuld alleen type overhouden?

Status
Niet open voor verdere reacties.

Deadcops

Gebruiker
Lid geworden
8 feb 2008
Berichten
205
Hallo,

Ik heb een database gemaakt met scooter gegevens.
Nou heb ik een tabel met daarin het type en het merk scooter.
Bijvoorbeeld je hebt een Piaggio Fly.
Nou wil ik deze 2 velden door middel van wizard opzoeken in laten vullen.
Dit lukt allemaal wel maar ik wil het volgende:

Als ik het merk invul wil ik dat alleen de type van dat merk nog in de autoinvul box terecht komen.

Wie kan mij helpen?

Alvast bedankt
 
Laatst bewerkt:
Ik vermoed dat je precies het omgekeerde wilt: je kiest eerst een merk, en wilt dan vervolgens alle typen zien van dat merk. En daarbij maak je denk ik gebruik van twee keuzelijsten, één voor de merken, en één voor de typen?
Als dat zo is, kijk dan eens naar dit voorbeeld:
 

Bijlagen

Ik vermoed dat je precies het omgekeerde wilt: je kiest eerst een merk, en wilt dan vervolgens alle typen zien van dat merk. En daarbij maak je denk ik gebruik van twee keuzelijsten, één voor de merken, en één voor de typen?
Als dat zo is, kijk dan eens naar dit voorbeeld:
Klopt en ik heb het veranderd.
Ik zal in de loop van de dagen naar het voorbeeld kijken en ik hoop dat dit is wat ik zoek.
 
Database

Okee dit is wat ik zoek alleen kan ik niet vinden hoe het nu gedaan is...
Ik heb gezocht in het formulier ontwerp, de tabellen maar kan het niet vinden.
Bijgevoegd heb ik mijn database.

Nu is het de bedoeling dat je in de tabel contracten kan kiezen uit de merk/type die in de tabel scooterkosten staan. En als je het merk uitgekozen hebt moet je in de kolom type alleen de type zien van dat merk.
Dit kan natuurlijk ook gewoon in een formulier ingevuld worden.

Kun je er ook misschien een beetje uitleg bij geven wat je gedaan hebt zodat ik niet alleen de oplossing heb maar ook snap hoe ik het zelf bij een andere database kan doen?

Dankuwel
 

Bijlagen

Ik heb je voorbeeldje aangepast, en via wat plaatjes en dit verhaal, hoop ik dat je snapt wat er gebeurt!

Allereerst: je hebt een keuzelijst gemaakt voor de merken, die bijna goed is, maar nog niet helemaal... Je hebt er namelijk een query voor gemaakt, die alle merken en types laat zien, terwijl je eigenlijk alleen maar uit de merken wilt kunnen kiezen. In jouw voorbeeld zijn er bijvoorbeeld 2 Vespa's in de lijst, en dat komt omdat je 2 types hebt. Maar het merk hoef je natuurlijk maar één keer te zien. In het nieuwe voorbeeld heb ik dat aangepast, door alleen de kolom Merk in de keuzelijst te zetten, en de optie <Totalen> te gebruiken, zodat je kunt groeperen op Merknaam. Door dit te doen, komen de merken maar één keer voor in de lijst, en dat is wat je ook wilt. Zoals je ziet, heb ik de kolom Typen verwijderd; zou ik dat niet hebben gedaan, dan hadden de merken er nog steeds twee keer in voorgekomen, omdat de optie Groeperen alle combinaties van velden maakt, en die één keer laat zien. Omdat je twee typen hebt voor Vespa, zou je er nog steeds twee zien.
Da's een!

Nu het moeilijkste deel.... De tweede keuzelijst. Zoals je al snapt, kun je pas een type selecteren als je weet welk merk het is. Omdat Access formulieren niet automatisch bijwerkt als je iets op een formulier verandert, moeten wij dat zelf doen. Dat doe je, door Gebeurtenissen te maken.
In dit geval maken we een procedure bij de gebeurtenis <Na bijwerken> van de keuzelijst Merken, omdat deze keuzelijst de verandering op het formulier triggert: je kiest tenslotte een merk uit de keuzelijst, waarna de Typen keuzelijst moet veranderen.
De code die we gaan maken, ziet er als volgt uit:

Code:
Private Sub cboMerk_AfterUpdate()
Dim strSQL As String

    strSQL = "SELECT Type FROM [Scooter kosten] " _
    & "WHERE (Merk = '" & Me.cboMerk.Value & "') ORDER BY Type;"
    Me.cboType.RowSource = strSQL
    Me.cboType.Requery

End Sub
Wat doen we hier nu precies?

Allereerst maken we gebruik van een variabele. Dit is een stukje geheugen in Access, waar we iets in gaan bewaren, in dit geval een stukje tekst.
We beginnen dus met de regel Dim strSQL as String.
Vervolgens qaan we een query maken. Zelf maak ik, als de query een beetje ingewikkeld is, een query via de Querybuilder, en kopieer vervolgens de code naar het VBA scherm. Daarna pas ik de query zodanig aan dat hij goed werkt, en klaar is-tie!
In dit geval kun je hem uiteraard ook overtypen, want hij is niet zo lang. We gaan een SQL (query) tekstregel maken, die we toewijzen aan de variabele die we hebben gedeclareerd.
strSQL = "SELECT Type FROM [Scooter kosten] " _
Het eerste deel van de tekst selecteert het veld Type uit de tabel Scooter kosten.
Het tweede deel
& "WHERE (Merk = '" & Me.cboMerk.Value & "') ORDER BY Type;"
bevat de selectie die we gaan maken uit de tabel Scooter kosten. We willen de types hebben uit de tabel waarvan het Merk gelijk is aan het merk dat we hebben geselecteerd uit de keuzelijst cboMerk. Die vergelijking vind je achter het WHERE deel: Merk='Vespa' zou bijvoorbeeld een uitkomst kunnen zijn als je Vespa hebt geselecteerd, of Merk='Asprilia' als je Asprilia aanklikt.
De tekst wordt opgehaald met de formule Me.cboMerk.Value.

Daarmee is de SQL tekst klaar: er staat dus iets als: Selecteer in de tabel Scooter Kosten de types, als het merk Vespa is.
(Vrij vertaald)

De volgende stap is: vertel de keuzelijst Type dat de lijst moet opties is aangepast.
Dat gebeurt hier:
Me.cboType.RowSource = strSQL
We zeggen dus: we stellen de Rijbron (in Eigenschappen) van de keuzelijst Type in op de tekst die we met strSQL hebben gemaakt.
Om de waarden nog te kunnen zien als we een ander merk kiezen, hebben we nog één opdracht nodig, en die luidt:
Me.cboType.Requery
Hiermee wordt de bron van de keuzelijst a.h.w. ververst. Laat je die regel weg, dan zal het formulier altijd de keuze laten zien die je de eerste keer krijgt als je een Merk selecteert. En da's natuurlijjk niet de bedoeling!
Hopelijk is het een beetje duidelijker, anders hoor ik het wel!
 

Bijlagen

  • Opdracht C BLZ 413.rar
    Opdracht C BLZ 413.rar
    26,7 KB · Weergaven: 19
  • VBA code Merk_After Update.jpg
    VBA code Merk_After Update.jpg
    30,6 KB · Weergaven: 31
Dankjewel

Heeeey Super.

Dankjewel voor de goede uitleg, het werkt perfect.
Sorry dat het zolang geduurt heeft voordat ik antwoorde maar ik zat met de tijd en toen ik tijd had en het aan het testen was had ik niet gezien dat ik bij column width 0cm had staan en dacht ik van wat doe ik fout.

Ik heb nog 1 vraagje. Is dat cbo in de querry nodig voor de code is is dit iets wat je zelf verzonnen hebt?
Ik bedoel dus cboType en cboMerk.

Hartelijk bedankt voor de tijd en de moeite om mij dit uit te leggen :thumb::D
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan