Link naar record in formulier, in keuzelijst

Status
Niet open voor verdere reacties.
Hij maakt er meteen =[cboPersoneel].[Column](-1) van, dus met haken
Als ik dan in formulierweergave zit staat er #Naam?
Werkt dit wel als het eerste vak meerdere records accepteert?
 
Haken zijn goed, maar -1 kan niet. De eerste kolom is kolom 0. Vandaar dat je van de kolom die je wilt zien 1 moet aftrekken. Goede vraag overigens... probeer het uit :)
 
Laatst bewerkt:
Wat bedoel je precies? Ik neem aan dat je het niet hebt over een caravan die aan een Landcruiser moet komen te hangen...
 
Ik zie dat dit systeem niet gaat werken. In mijn tabel cliënten blijft ieder 1 maal zichtbaar met daarbij 1 of meer invallers
Maar als ik bijvoorbeeld 3 invallers aangeef, dan krijg ik in mijn formulier ook 3 records waar ik doorheen kan bladeren
Hij veranderd wel netjes in elk record alles, maar dan "loop" ik er niet gemakkelijk doorheen....
Dus ik ga toch weer invaller 1, 2 en 3 maken, en in plaats van een link dan maar met =cbo de belangrijkste info meteen zichtbaar maken... Dus graag antwoord op het koppelen

Als ik ipv "Niet-afhankelijk" "Invaller1" Typ dan horen die vakken dus bij elkaar
Als ik dan in het formulier kijk wordt netjes het personeelsnummer weergegeven
Nu wil ik daar graag de achternaam hebben, dus met =cbo, maar waar moet ik dat dan ingeven?

, dan geef ik de rest op en sluit ik het topic
Heeeeeeeeel erg bedankt voor de hulp zover, ik open vandaag of morgen wel weer een nieuwe vraag ;)
 
Laatst bewerkt:
Velden met meervoudige waarden hebben een paar (al dan niet vervelende) eigenschappen, die het bouwen van formulieren e.d. nogal gecompliceerd maken, daarom ben ik ook helemaal geen voorstander van dit veldtype. Nog afgezien van het feit dat je de compatibiliteit met andere db's in één keer kwijt bent. Maar het moet natuurlijk wel goed werken. Blijkbaar heb je het veld verkeerd in je formulierbron gezet, waardoor Access het veld uitsplitst. Mooi, maar niet altijd de bedoeling zoals in jouw geval. En het kan ook exact zoals je het wilt. Zonder de db kan ik uiteraard niet zien of dat zo is, maar ik denk wel dat het is op te lossen. Maar dat is aan jou. Of je geeft het op, met de finish in zicht, of je loopt nog een klein stukkie door :)
 
Eerst lijkt me het sowieso handig te weten hoe ik velden moet koppelen om die =cbo te kunnen gebruiken, die lijkt me in verschillende db en formulieren erg handig.
Natuurlijk wil ik verder kijken als je denkt dat we het verschijnsel van meerdere records in de formulier-omgeving kunnen oplossen... Maar je steekt er al zoveel tijd in en er zullen vast nog meer vragen komen waar ik hulp bij nodig heb....
 
Een tekstvak koppel je zo aan een keuzelijst: geef de regel <Besturingselementbron> deze formule =[cboTrainer].[column](2). In dit geval heet mijn keuzelijst cboTrainer, en bevat de derde kolom de waarde die ik wil zien.
Verder heb ik een trucje bedacht voor je meervoudige keuzelijst, waar je gewoon veel te weinig mee kan doen, met dank aan Microsof... Ik heb nu een oplossing waarbij je een tweede niet-gebonden keuzelijst met invoervak gebruikt die de geselecteerde waarden uit de eerste lijst haalt. Ik heb er twee plaatjes van gemaakt ter illustratie. De meervoudige keuzelijst (de linker dus) heeft dit als Rijbron:
Code:
SELECT [Instructeur nr], [achternaam] & ", " & [Instructeur voornaam] & " "+[tussenvoegsel] AS Naam, [ranking-groep] FROM tblInstructeurs 
WHERE ([uit dienst] Is Null) ORDER BY [achternaam] & ", " & [Instructeur voornaam] & " "+[tussenvoegsel];
De meervoudige instelling staat uiteraard in de tabel ingesteld, en hij laat dus netjes de lijst zien met de selectievakjes.
De tweede keuzelijst wordt gevuld met de gekozen waarde uit de eerste keuzelijst. Dat gaat als volgt:
Code:
SELECT [Instructeur nr], [achternaam] & ", " & [Instructeur voornaam] & " "+[tussenvoegsel] AS Naam, Adres, TrainingID 
FROM tblInstructeurs INNER JOIN tblTrainingen ON tblInstructeurs.[Instructeur nr] = tblTrainingen.TrainerID.Value 
WHERE ((TrainingID=[Formulieren]![fTrainingen]![TrainingID]) AND ([uit dienst] Is Null));
De tweede keuzelijst haalt dus de sleutelwaarden voor het geselecteerde record ([TrainingID]) op uit de tabel Instructeurs. Omdat je natuurlijk ook waarden moet kunnen veranderen, en de tweede keuzelijst dat niet automatisch doet, moet je nog een gebeurtenis aan die keuzelijst hangen. Deze actie is genoeg.
Code:
Private Sub cboTrainer_Enter()
    Me.Dirty = False
    Me.cboTrainer.Requery
End Sub
Hiermee sla je het record op, en wordt de keuzelijst ververst. En omdat de keuzelijst ook bij het openen van een willekeurig record de juiste waarden moet laten zien, gebruik je onderstaande code:
Code:
Private Sub Form_Current()
    Me.cboTrainer.Requery
End Sub
Waarom zou je deze constructie gebruiken? Omdat ik nu nog niet weet hoe je een actie kunt hangen aan een meervoudig veld (de standaard handelingen doen niks) en bij de gewone keuzelijst werkt dat wel. Je kunt dus een formulier openen op basis van een persoon die je in cboTrainer selecteert. Kortom: het kan wel, met een beetje moeite!
 

Bijlagen

  • Meervoudige Keuzelijst 1.png
    Meervoudige Keuzelijst 1.png
    20,8 KB · Weergaven: 47
  • Meervoudige Keuzelijst 2.png
    Meervoudige Keuzelijst 2.png
    3,1 KB · Weergaven: 28
Laatst bewerkt:
Ik leer veel! en omdat ik ook wil begrijpen wat ik doe (en niet klakkeloos kopieeren) hier weer verdere vragen:

ik heb nu in het besturingselement van het tekstvak =[cboInvaller1].[Column](1) (ook (2) en (3) geprobeerd)
in de ontwerpweergave geeft hij geen foutmeldingen meer, maar in formulierweergave staat er nog steeds #Naam?
dus het is nog niet helemaal gelukt

dan je verdere verhaal, die moet ik natuurlijk ombuigen naar deze database
je eerste stuk code lijkt erg veel op wat ik al had

Alleen staat er bij jou AS Naam in... daarmee maak je een extra veld waar alles gesamelijk instaat?
Dan heb jij [ranking-group], waar is dat voor, die had ik helemaal niet (of hoort dat dus bij AS Naam...? maar dat heb je in de tweede code niet...)
De WHERE en ORDER BY had ik inderdaad al uitgevonden

(Hersenspinsel: nu hebben we toch wat we hadden? dus er worden nu toch al meerdere records gemaakt in de formulierweergave als ik dit opsla?)

Dan de 2e code... die volg ik helemaal niet....
En wat is daar de toegevoegde waarde van als je code 1 niet weg gaat gooien?
Kun je daar dan een link van maken en van de eerste niet?
 
Dan zou je de rijbron van cboInvaller1 ook moeten laten zien, en de kolominstellingen van de keuzelijst moeten controleren. Als die keuzelijst bij <Aantal kolommen> het aantal 1 heeft staan, kun je alleen Column(0) gebruiken. Dus het aantal kolommen moet wel kloppen.
wat de rest betreft: omdat ik je db niet heb, moet ik een eigen variant gebruiken. En daar zitten uiteraard andere velden in. Omdat ik ook met de cursus bezig ben, en ik dit voorbeeldje wel kan gebruiken, zit dat veld er in!
En ja, van de tweede keuzelijst (de tweede select dus met plaatje 2) kun je een link maken, van de eerste keuzelijst (code 1 en plaatje 1) niet.
 
SELECT Personeel.Personeelsnummer, Personeel.Voornaam, Personeel.Naam, Personeel.Telefoon Mobiel FROM Personeel WHERE (((Personeel.[Soort dienstverband]) Not Like "Beëindigd")) OR (((Personeel.[Soort dienstverband]) Is Null)) ORDER BY Personeel.[Voornaam];
Afhankelijke kolom 1; Aantal kolommen 4; Kolombreedte 0cm;2,2cm;2,803cm;0cm (want alleen de middelste 2 zijn zichtbaar in keuzelijst
Nu wil ik alleen het telefoonnummer in het tekstvak laten verschijnen

Dus als ik voor mijn codes de gestripte versies wil gebruiken:
Code 1:
SELECT Personeel.Personeelsnummer, Personeel.Voornaam, Personeel.Naam, Personeel.[Telefoon Mobiel], Personeel.[Soort dienstverband] FROM Personeel WHERE (((Personeel.[Soort dienstverband]) Not Like "Beëindigd")) OR (((Personeel.[Soort dienstverband]) Is Null)) ORDER BY Personeel.Voornaam;

Code 2:
Kom ik niet uit.... Jouw tblInstructeur is mijn tblPersoneel. achter INNER JOIN moet dan mijn tblKlanten?
Hmm... volg hem echt niet...
 
Het keuzevak-met-invoerlijst "Invaller" heeft rijbron:
SELECT Personeel.Personeelsnummer, Personeel.Voornaam, Personeel.Naam, Personeel.[Telefoon Mobiel] FROM Personeel WHERE (((Personeel.[Soort dienstverband]) Not Like "Beëindigd")) OR (((Personeel.[Soort dienstverband]) Is Null)) ORDER BY Personeel.[Voornaam];
De zichtbare cellen in de keuzelijst zijn de voor en achternaam, de zichtbare cel na selectie in keuzelijst is de voornaam.

Vraag 1:
Daarvoor wil ik een vak waarin het personeelsnummer zichtbaar wordt (deze zie je dus niet in de keuzelijst)
Dus ik dacht =cboInvaller.Colomn(0) maar dan krijg ik #Naam?

Vraag 2:
Verder weet ik dat het personeelsnummer hetgene is dat opgeslagen wordt, maar ik kan hier dan geen criteria op loslaten omdat het de naam is die zichtbaar is. Hoe kan ik wel een relatie maken tussen personeelsnummer (in bijvoorbeeld "Rooster") en de invaller?
 
Typfoutje wellicht? =cboInvaller.Colomn(0) moet in ieder geval zijn: =cboInvaller.Column(0)
Criteriums kun je op elk willekeurig veld maken. Hooguit kun je instellen welke velden je wilt zien in de keuzelijst of in de Select query. Dat doe je dan door het veldje <Weergeven> aan of uit te zetten. In je SQL filter je op [Soort dienstverband], maar je laat hem niet zien.
 
Ja typfoutje, in de db staat het wel goed. Maar ik krijg dus #Naam? en niet het personeelsnummer
Criteria en zichtbare velden in de keuzelijst lukken dus inderdaad allemaal al wel.

Vraag 1:
Hij laat dus geen personeelsnummer zien, waar gaat dat fout?

Vraag 2:
Hoe gebruik ik deze als criterium in een andere tabel/query? Dan dus ook alleen voornaam gebruiken?

Vraag 3:
Waarom laat hij eigenlijk Voornaam zien (is 2e kolom en 1e zichtbare) is heel fijn, wil ik ook, ,maar stel dat ik een ander wil laten zien, kan dat dan en zo ja hooe?
 
En je weet ook 100% zeker dat de keuzelijst de goede naam heeft? En de formule staat in het tekstvak in het <Besturingselementbron>?
 
Laatst bewerkt:
Bij besturingelementbron van de keuzelijst staat "Invaller1"
Bij besturingelementbron van het tekstvak staat =[cboInvaller1].[Column](1)
 
De eerste regel laat de verkeerde eigenschap zien: het gaat om de naam van de keuzelijst. Die staat op het tabblad <Overige>. Je ziet de naam overigens ook in de titel en Keuzelijst als als je het venster <Eigenschappen> bekijkt.
 

Bijlagen

  • Eigenschappen Keuzelijst.png
    Eigenschappen Keuzelijst.png
    7 KB · Weergaven: 23
Dus dan is dit je situatie:
Bij naam van de keuzelijst staat "Invaller1"
Bij besturingelementbron van het tekstvak staat =[cboInvaller1].[Column](1)
En dan weet je al dat de code niet gaat werken, want je moet verwijzen naar de naam van het object, niet naar het veld.
Je kunt dus ofwel de formule aanpassen, ofwel de naam. Ik zou zeggen: doe de naam, want het is geen goed idee om je aan te leren objecten verkeerd te benoemen. Juist omdat het in Access heel belangrijk is om te weten dat een object met de naam txtAchternaam is gekoppeld aan het veld [Achternaam] een Tekstveld is. Access zelf doet dat jammer genoeg nooit, dus als je een formulier maakt met de wizard, dan heeft het object dezelfde naam als het gekoppelde veld.
 
Help... Ik volg dit in totaal niet...

Ik doe een gooi, want daar leer je van:
txtInvaller1 moet de naam worden van het tekstvak als Invaller1 ook een tekstveld zou zijn geweest?
Dan moet het nu (...)Invaller1 worden waarbij (...) staat voor keuzelijst met invoervak?

Als dit juist is, waar kan ik dan afkortingen van objecten vinden?
Zo niet:
Wil je me uitleggen waar(1) ik welke naam(2), waarin(3) moet veranderen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan