Access Database

Status
Niet open voor verdere reacties.

joeppoep12

Gebruiker
Lid geworden
2 mei 2010
Berichten
151
Hallo allemaal,

Ik ben bezig met een database, en ben hier een beginner in.
Ik heb een formulier en hier in staat een keuzelijst, die gekoppeld is aan een query. Maar deze keuzelijst word nu ingevuld met alle waarden uit de query maar het is de bedoeling dat er maar een bepaalde selectie is te zien.

Er zijn meerdere accounts, stel je hebt account: 9999, 9991, 9992 en aan elk account zijn andere klassen toegevoegd. Nu is het de bedoeling dat in de keuzelijst, afhankelijk van met welk account je ingelogd bent, de klassen worden weergegeven die bij dat account passen.

Alvast Bedankt,

Joep van de Ven
 
Ga je dan uit van een Windowsaccount of een Accessaccount? En over welke access versie hebben we het?
 
Ik bedoel hiermee een Accesaccount, ik heb een inlogform en het account dat daar word ingelogd moet vervolgens worden gebruikt. En de gebruikte Access is Access 2010
 
Gelukkig is de vraag versie-onafhankelijk, tenzij je de klassen in het accountrecord in een keuzelijst met meerdere waarden hebt opgeslagen. Laat de SQL eens zien van de query die je in de keuzelijst gebruikt.
 
Dank u voor het snelle antwoord. Het is project op school, en het meest recente bestand heb ik niet tot mijn beschikking. Ik zal het morgen ochtend meteen hier posten. Verder heb ik niets zelf handmatig aan de SQL toegevoegd. De query bevat: Account_nummer_docent, Afkorting_docent, Naam_docent en Klas. En de keuzelijst moet dus aan de hand van de van te voren ingevoeren gebruikersnaam aangeven welke klassen bij zijn Account_nummer of Afkorting horen, dit zijn beide unieke waardes dus en maakt niet uit welke er gebruikt word.
 
Laatst bewerkt door een moderator:
Je moet in ieder geval je keuzelijst filteren door er een criterium aan toe te voegen. Hoe je dat doet, is afhankelijk van de manier waarop je het Accountnummer ophaalt.
 
Ja dat had ik al begrepen. Alleen ik weet dus niet hoe ik dat criterium er aan koppel, zodat het criterium aangepast is aan dat account_nummer. Wat is de makkelijkste manier om het account op te vragen?
 
Daarvoor geef je te weinig informatie. Een aantal opties:

1. Een public variabele vullen met de AccoutID
2. AccoutID 'meegeven' bij openen van volgend formulier
3. AccoutID opzoeken met DLookup
4. Query vullen vanuit VBA code

En zo kan ik nog wel even doorgaan...
 
Dan zal ik helaas toch even moeten wachten op morgen, om zeker te zijn van de juiste informatie.
 
Hee OctaFish,

Dit is de SQL code achter de query:

SELECT DISTINCT Klassen.Klas, Account_Docent.Account_nummer_docent, Docent.Docent_afkoring, Docent.Docent_naam
FROM Auteur INNER JOIN Boeken ON Auteur.Auteur_nummer = Boeken.Auteur_nummer, ((Account_Docent INNER JOIN Docent ON Account_Docent.Account_nummer_docent = Docent.Account_nummer_docent) INNER JOIN Klassen ON Docent.Docent_afkoring = Klassen.Docent_afkorting) INNER JOIN (Account_Leerling INNER JOIN Leerlingen ON Account_Leerling.Account_nummer_leerling = Leerlingen.Account_nummer_leerling) ON Klassen.Klas = Leerlingen.Klas;

Verder is dit de code die achter het inlogformulier zit:

Option Compare Database
Private intLogonAttempts As Integer

Private Sub Form_Open(Cancel As Integer)
'Begin bij Gebruikersnaam
Me.Inlog_box.SetFocus
End Sub

Private Sub Inlog_box_AfterUpdate()
'Daarna naar wachtwoord
Me.Wachtwoord_box.SetFocus
End Sub

Private Sub Inlog_button_Click()

'Controleren of er een Gebruikesrnaam is ingevoerd

If IsNull(Me.Inlog_box) Or Me.Inlog_box = "" Then
MsgBox "Je moet een gebruikersnaam invullen.", vbOKOnly, "Geen gegevens"
Me.Inlog_box.SetFocus
Exit Sub
End If
'Controleren of er een wachtwoord is ingevoerd

If IsNull(Me.Wachtwoord_box) Or Me.Wachtwoord_box = "" Then
MsgBox "Je moet een wachtwoord invullen", vbOKOnly, "Geen gegevens"
Me.Wachtwoord_box.SetFocus
Exit Sub
End If

'Controleren of wachtwoord klopt

If Me.Wachtwoord_box.Value = DLookup("Wachtwoord_docent", "Account_Docent", "[Account_nummer_docent]=" & Me.Inlog_box.Value) Then

login_account = Me.Inlog_box.Value


'Login Form sluiten, openen volgende form

DoCmd.Close acForm, "Inloggen", acSaveNo
DoCmd.OpenForm "Keuze_klas"


Else
MsgBox "Verkeerd wachtwoord. Probeer het opnieuw.", vbOKOnly, "Geen toegang!"
Me.Wachtwoord_box.SetFocus
End If

'Drie keer vekeerd wachtwoord

intLogonAttempts = intLogonAttempts + 1
If intLogonAttempts > 3 Then
MsgBox "Je hebt te vaak het verkeerde wachtwoord ingevuld! Raadpleeg de administrator.", vbCritical, "Geen toegang!"
Application.Quit
End If

End Sub
 
Zal er eens rustig naar kijken. In de tussentijd kun je de code nog even netjes opmaken met de CODE knop :)
 
Een eerste indruk: die query bevat wel èrg veel tabellen en velden; je wilt neem ik aan Klassen zien op basis van DocentID. Die gegevens haal je volgens mij al uit de tabel [Klassen] waar je het veld [Docent_afkorting] hebt. En daar wil je toch op filteren? En [Docent_afkorting] is neem ik aan een waarde die je ophaalt in het inlogscherm?
 
Een eerste indruk: die query bevat wel �rg veel tabellen en velden; je wilt neem ik aan Klassen zien op basis van DocentID. Die gegevens haal je volgens mij al uit de tabel [Klassen] waar je het veld [Docent_afkorting] hebt. En daar wil je toch op filteren? En [Docent_afkorting] is neem ik aan een waarde die je ophaalt in het inlogscherm?

Op de constatering van over het Veld Klassen, dit klopt inderdaad. Dus deze kan ik beter weglaten?
En bij het inlogscherm log je in aan de hand van een inlogcode die is gekoppeld aan een account_nummer_docent en deze is weer gekoppeld aan Docent_afkorting.
 
Nu staat er in de query alleen nog maar:

Code:
SELECT DISTINCT Klassen.Klas, Klassen.Docent_afkorting
FROM Klassen;
Dit is inderdaad compacter. Maar in dit geval bevat tabel Klassen, exact dezelfde informatie als de query waardoor in mijn ogen deze query overbodig word. Kun je de keuzelijst dan ook koppelen aan een tabel en deze dan filteren op de voorheen gekozen account?
 
Laatst bewerkt:
Dat werkt precies hetzelfde, met dit verschil dat je als je de tabel koppelt gelijk alle tabelvelden in de keuzelijst krijgt, wat je vermoedelijk niet wilt, en dan heel goed moet gaan tellen welke kolommen je wel en niet wilt zien. Een query werkt bij uitstek dus heel goed in een keuzelijst, en is dus absoluut niet overbodig. Uiteraard sla je die query verder niet op, want dat is wel (doorgaans) onzinnig.
 
Oke dat klinkt erg logisch, dan doe ik dat. Vervolgens nu het echte probleem, hoe filter ik deze keuzelijst.
 
Het lijkt mij handig om aan Docent_afkorting een variable te koppelen, die vervolgens weer opgehaald word en deze toegepast word als filter voor de keuzelijst. Alleen hoe doe ik dit?
 
Ik zie dat je de CODE knop nog niet gevonden hebt.... Mag je toch aanraden om die eens te gaan gebruiken ;)
Je query mist nu het filter. Iets als:
Code:
SELECT DISTINCT Klas, Docent_afkorting FROM Klassen
WHERE [Docent_afkorting] = & Me.login_account
Het zou een heel stuk schelen als je een voorbeeldje zou posten; waarschijnlijk was dit draadje dan nog in januari opgelost geweest.
 
Sorry, wat bedoel je dan precies met de Code knop? Waar kan ik deze vinden? En gewoon de database hier posten bedoel je?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan