Volgende stap Acces

Status
Niet open voor verdere reacties.

goedlichtJoost

Gebruiker
Lid geworden
7 mrt 2012
Berichten
477
Hallo Allemaal,

Na verscheidene pogingen (ook met vragen op dit forum) Ben ik weer begonnen met mijn acces database probeersel.
Ik heb eerder een voorbeeld geplaatst van mijn gewenste situatie en mijn probeersel tot dan toe.
http://www.helpmij.nl/forum/showthread.php/745218-Koppelen-van-tabellen-aan-formulier

Hieruit bleek vooral dat ik te snel van start was gegaan en nog te weinig kennis had opgebouwd.
Ik heb besloten om de formulieren nog helemaal weg te laten en eerst goedwerkende tabellen te maken.

Ik heb 4 tabellen.
1. Users, hierin staat userID, Gebruikersnaam, Wachtwoord, Rechtenniveau.
2. Contactpersonen. Heleboel informatie, maar vooral belangrijk het klantnummer als primaire sleutel.
3. Obligatietypes. naamgeving en omschrijving etc. maar ook hier vooral belangrijk: obligatietypenummer als primaire sleutel.
4. Obligatie. Obligatienummer,(primaire sleutel) klantnummer(om te koppelen aan tabel 2). Obligatietypenummer (om te koppelen met tabel 3) en vervolgens de gegevens.

Mijn probleem nu, eigenlijk het zelfde als met de formulieren, ik weet niet hoe het koppelen werkt.
Ik weet dat ik dit ergens moet doen in relaties. Maar wat ik nu met wat moet koppelen (één op veel? veel op één etc) is voor mij onduidelijk.

Ik zou graag van iemand hier advies of hulp bij krijgen.

Alvast bedankt!

Mvg
Joost

PS. ik heb mijn database toegevoegd. 2 versies 2007 en 2003(heeft geen tabel veld Bijlage)
Bekijk bijlage Database JB 2003.rar
Bekijk bijlage Database JB.rar



PSS.
Wanneer ik een relatie probeer toe te voegen tussen Obligatietypenummer en klantnummer in de tabel obligatie. dan krijg ik de volgende error bij Referentiële integriteit afdwingen
Error.jpg
Relaties.jpg
 
Laatst bewerkt:
Je foutje is simpel op te lossen, en eigenlijk zegt de foutmelding het ook al. Je kunt alleen velden aan elkaar koppelen die hetzelfde zijn. Dus een tekstveld op een tekstveld, en een Numeriek veld op een Numeriek veld. Daarbij moet (in het laatste geval) het getaltype ook nog eens hetzelfde zijn, dus je kunt een Integer veld niet koppelen aan een Lange integer.
In jouw db is het veld [Obligatietypenummer] in de tabel [obligatie_tbl] een tekstveld, terwijl je in de brontabel een Autonummer veld gebruikt, en dat is een numeriek veld van het type Lange integer. Je moet het veld dus omzetten van tekstveld naar Numeriek.
En als je toch bezig bent: dat geldt ook voor Klantnummer!
 
Laatst bewerkt:
Hallo OctaFish,

Bedankt! dat is in ieder geval gelukt:
Fix.jpg.

Maar nu, Wat is nu eigenlijk de volgende logische stap?
Ik ga een formulier maken om Contactpersonen toe te voegen, Ik ga een formulier maken om Obligatietypes toe te voegen?
Deze moeten eigenlijk precies hetzelfde zijn als de standaard contactpersonen formulier in acces. Nieuwe records toevoegen, records verwijderen en records wijzigen.
Dit gaat wel lukken.

Maar hoe maak ik dan het formulier voor Obligatie toevoegen? hier dien je dan 2 keuze lijsten te hebben met keuze uit records uit tabel Contactpersonen en tabel obligatietypes? en vervolgens ook gegevens invoer velden.
Hierbij ook de bijbehorende opties nieuwe, verwijderen, wijzigen?

Ik ga het eens proberen!

gr
Joost
 
Hallo Octa Fish,

Na wat prullen kom ik op een aantal korte vragen:

Ik heb nu een formulier om obligaties aan te maken, echter heb ik alleen een relatie met Klantnummer en Obligatietypenummer. Ik kan dus deze enkel kiezen uit een lijst om naar dat record te gaan. Daarom denk ik dat het noodzakelijk is om Achternaam en Obligatienaam ook te koppelen? zodat deze gegevens beschikbaar zijn op het formulier?
Wat is hiervoor de beste methode?

Ik heb nu ook de andere formulieren aangemaakt, inclusief een inlogscherm en een mainmenu (om naar de 3 hoofdformulieren te gaan) maar hoe kan ik nu een knop in het main formulier wel of niet zichtbaar maken (aan de hand van de userrechten, van de ingelogde gebruiker)

Mvg
Joost
 
De bedoeling van koppelingen tussen tabellen is eigenlijk heel simpel. In je tabel [Obligaties] leg je de gegevens vast. Hierbij gebruik je een KlantID en een ObligatieTypedID. Meer hoef je niet vast te leggen in die tabel; als je het KlantID weet, dan weet je namelijk ook de overige klantgegevens, want KlantID is uniek. Hetzelfde geldt voor ObligatieTypedID. Op je formulier frmObligaties maak je dus twee keuzelijsten die de KlantID en ObligatieTypedID selecteren. Die twee keuzelijsten halen hun gegevens uit de respectievelijke tabellen.
Wat je verder met je formulier wilt doen, is aan jou. Wil je meer klantgegevens zien, wat een natuurlijke reflex is, dan kun je die m.b.v. tekstvelden uit de keuzelijsten halen. Of, als je een query als basis voor het formulier gebruikt, kun je die velden ook in de query zetten. Vervolgens zet je de velden op je formulier, en dan heb je ze ook.
Ik zou zeggen: maak eerst de hoofdstructuur, en ga pas als alles af is nadenken over het wel of niet zichtbaar maken van knoppen. Eerst lopen, dan snelwandelen, en dan pas rennen :)
 
Haha, ja ik ga graag te hard.
Ik heb de basis van mijn formulieren al gemaakt (Het staat nog erg rommelig en zeker niet in de definitieve vorm)
Maar ik zou toch echt eerst een compleet werkend geheel hebben voordat ik met de finaltouches begin.

Bijgevoegd mijn database tot nu toe.

Inloggen werkt (maar hij onthoud de user dus niet).
Menu structuur werkt (maar alle knoppen worden altijd weergegeven)
Contactpersonenformulier werkt
Obligatietype formulier werkt.

maar obligatieformulier werkt niet naar behoren. In de bovenste: "Ga naar" keuze menu, zou ik dus graag klantnaam en obligatienaam zien in plaats van klantnummer en obligatietypenummer.
En in de velden hier onder zou ik dan graag ook namen zien in plaats van nummers.

In de onderstaande keuze menu's is dit wel gelukt.

Het gebruik van queries is voor mij onbekend/onduidelijk. en het koppelen aan een tekstveld is niet gelukt.

Bekijk bijlage Database JB 2003.rar

Mvg

Joost
 
In je Obligaties formulier heb je geen keuzelijsten gemaakt voor Klanten en Obligatietypenummer. De velden klantnummer en Obligatietypenummer bevatten de respectievelijke Sleutelwaarden, en dat moet uiteraard zo blijven. Wel kun je in de keuzelijsten (die je dus nog moet maken) de eerste kolom (met de sleutelwaarde) verbergen, zodat je de Klantnaam en het Obligatietype ziet. Als je de keuzelijsten met de wizard maakt, is dat de standaardinstelling, dus dat gaat wel goedkomen :)
 
En wat betreft je zoeklijst: als je die alleen baseert op de tabel [Obligatie_tbl] dan zul je alleen de getallen zien. Je zult dus de tabellen [Contactpersonen_tbl] en [Obligatietypes_tbl] moeten toevoegen aan de query. Dan kun je de door jou gewenste velden gebruiken.
 
Hallo OctaFish,

De Keuzelijst is gelukt hij laat nu inderdaad namen zien ipv nummers.

Echter betreffende de zoeklijst, weet ik niet goed wat ik aan de query moet wijzigen om wel een obligatienummer(record in oblicatie tabel) te kiezen maar bijbehorende Klantnaam en Obligatietype te zien.

De query wordt beschreven in de volgende regel:
Rijbron: SELECT [Obligatie_tbl].[Obligatienummer], [Obligatie_tbl].[Klantnummer], [Obligatie_tbl].[Obligatietypenummer] FROM [Obligatie_tbl];

Hoe dien ik deze aan te passen?

Ik heb getest met: SELECT [Obligatie_tbl].[Obligatienummer], [Contactpersonen_tbl].[Achternaam], [Obligatietypes_tbl].[Naamgeving] FROM [Obligatie_tbl],[Contactpersonen_tbl],[Obligatietypes_tbl];
Dit werkt in principe, maar nu laat hij alle mogelijke combinaties zien? ik zou eigenlijk alleen maar de aanwezige records willen zien (dus de reeds aangemaakte obligaties)
 
Laatst bewerkt:
Dat komt omdat je alleen de tabel hebt toegevoegd, en de tabellen niet hebt gekoppeld. Een goede SQL ziet er zo uit:
Code:
SELECT Obligatie_tbl.Obligatienummer, [Voornaam] & " " & [Tussenvoegsel]+" " & [Achternaam] AS Naam, Obligatietypes_tbl.Naamgeving
FROM Obligatietypes_tbl INNER JOIN (Contactpersonen_tbl INNER JOIN Obligatie_tbl 
ON Contactpersonen_tbl.Klantnummer = Obligatie_tbl.Klantnummer) 
ON Obligatietypes_tbl.Obligatietypenummer = Obligatie_tbl.Obligatietypenummer;
 
Top! beetje aanpassen en het is gelukt;) hij liet namelijk alleen maar van 1 gebruiker zien.

Maar nog één klein probleem en dan ben ik echt heel erg geholpen en kan deze opweghelp thread dicht:

Hoe krijg ik nu mijn Users gekoppeld. Hoe kan ik ze onthouden / knoppen laten controleren welke user is ingelogd. En hoe krijg ik dan een database waar je gewoon niet meer in komt zonder user en wachtwoord. (zonder menu dus)
En moet ik dan 2 versies maken? 1tje voor de user die moet inloggen, en 1tje voor mij dat ik hem kan aanpassen?

Mvg
Joost
 
Ik heb zelf een systeem gemaakt waarbij gekeken wordt naar de Login naam van de gebruiker. Dat is dan de AD login naam, en die leg je dan vast in een tabel. Je kijkt dus naar de inlognaam van de gebruiker, en op basis daarvan mag je de db openen of niet. De verdere rechtenstructuur kun je per formulier meegeven, of met een Public variabele.
Maar je kan de gebruiker natuurlijk ook de db laten starten, en dan een inlogscherm aanbieden, waar ze een naam uit moeten kiezen. Alleen heeft dat als nadeel dat iemand een inlogcode van een hoger gekwalificeerde gebruiker kan 'lenen'.
 
Hallo OctaFish,

Ik ben er zelf al uitgekomen:

Oplossing
Ik voer in het begin mijn gebruikersnaam in, deze word uitgelezen vanuit mijn Main formulier. Nu tijdens het laden van het main formulier voer ik een controle uit met Dlookup naar de gebruikersnaam en hieruit kan ik dan de rechtenniveau zien.
Dit incombinatie met een If then, zet ik gewoon bepaalde knoppen op onzichtbaar.

Tevens heb ik het linker navigatie menu standaard verborgen (tijdens het laden van mijn login_formulier) en wanneer ik dan inlog onder de mezelf dan maak ik het navigatiemenu weer zichtbaar. hierdoor kan niemand wat aanpassen. (rechtermuisknop menu is ook gedisabled).

En wanneer ik zelf dus inlog krijg ik volledige functionaliteit.

Het zal vast heel omslachtig zijn, en er zullen vast genoeg "lekken" in zitten. maar voor mijn toepassing is dit voorlopig ruimschoots voldoende.


harstikke bedankt voor al je hulp,
Deze vraag kan dicht, wanneer ik weer hulp nodig heb zal ik een nieuwe vraag openen!

Met vriendelijke groeten,

Joost
 
Je werkwijze is vrij gangbaar, dus daar hoef je je niet voor te schamen :) En de vraag mag je zelf op Opgelost zetten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan