[Access] Veel-op-veel relatie subform

Pagina: 1
Acties:
  • 125 views sinds 30-01-2008
  • Reageer

  • Dr. Strangelove
  • Registratie: Februari 2001
  • Laatst online: 18:02

Dr. Strangelove

Moderator General Chat
Topicstarter
Ik ben een projectendatabase aan het opzetten. Eén van de gegevens die ik wil vastleggen is medewerkersinzet. M.a.w, welke medewerkers hebben aan een bepaald project gewerkt. Dit is dus een veel op veel relatie: een project kan meerdere medewerkers hebben en een medewerker kan aan meerdere projecten werken.

Het relationeel model; ik heb een tabel Project en een tabel Medewerker. Beiden hebben een aantal attributen, met ProjectID en MedewerkerID resp. als primaire sleutels. Ze zijn gekoppeld via een junction tabel met daarin ProjectID en MedewerkerID als vreemde sleutels.

Functioneel kom ik er echter niet uit. Ik wil dus een formulier Project met daarin een medewerkersinzet Subformulier. Daarin moet ik via een pop-up menu zoveel medewerkers als nodig kunnen toevoegen (de attributen zoals mail, tel en adres erachter). List is fixed, en verwijdering van een medewerker van het subformulier moet natuurlijk niet lijden tot verwijdering in de tabel medewerkers.

These are my principles. If you don't like them, I have others.


Verwijderd

heee, MSProject opnieuw aan het programmeren?

Verwijderd

ik snap niet precies wat je bedoelt.. als je via dat popup scherm medewerkers toevoegd, bedoel je dan:
bestaande medewerkers aan dit project koppelen
of
nieuwe medewerker aanmaken en deze aan het project koppelen?

in het eerste geval hoef je alleen een nieuwe record in die koppelingstabel te maken met die twee vreemdesleutels

en in het tweede geval eerst die nieuwe medewerker aanmaken en daarna dat record in de koppelingstabel

  • Dr. Strangelove
  • Registratie: Februari 2001
  • Laatst online: 18:02

Dr. Strangelove

Moderator General Chat
Topicstarter
Het gaat om bestaande medewerkers aan een project te koppelen. De vraag is echter hoe ik het subform moet maken. Wat ik wil:

Een subform met een lege regel. Daarin het vak voor Achternaam aan klikken en de betreffende medewerker kiezen. De bijbehorende attributen (eentje hangend aan de junction, nl. rol, de rest aan de tabel medewerkers) moeten dan op de rest van de regel verschijnen. Op deze manier moet ik dus alle betreffende medewerkers kunnen toevoegen.

Ik gebruik Project niet om verschillende redenen. Project is niet beschikbaar voor 90% van onze mensen, en ik wil flexibeler zijn dan Project me toelaat.

These are my principles. If you don't like them, I have others.


  • Boss
  • Registratie: September 1999
  • Laatst online: 04-09 10:35

Boss

+1 Overgewaardeerd

Je beschrijft toch al wat je wilt en wat je wilt doen? Als je de koppelingen goed maakt, moet het allemaal gewoon werken hoor.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

ja? wat is nou je probleem? je beschrijft toch wat je wil... je heb het nog niet eens geprobeerd...

je kan gewoon een query maken en die als recordsource voor dat subform gebruiken :?

  • Dr. Strangelove
  • Registratie: Februari 2001
  • Laatst online: 18:02

Dr. Strangelove

Moderator General Chat
Topicstarter
Ik geloof dat het niet helemaal duidelijk is dat ik NIEUW ben in Access. Ik ben bekend met relationele modellen, maar het implementeren ervan in een programma dat je niet kent is wat anders. En ik ben al vanaf 9 uur bezig, dus ik heb het echt wel geprobeerd.

Ik weet dat jullie het goed bedoelen, maar als je een programma niet kent dan heb je weinig aan instructies als bovenstaande.

Als ik even beschrijf wat ik doe dan wordt het misschien duidelijker waar ik fout ga:

- Ik heb een tabel Projecten met ProjectID als primaire sleutel. Daar hangen een stel attributen aan.
- Ik heb een tabel Medewerkers met MedewerkerID als primaire sleutel. Ook daar hangen wat attributen aan.
- Ik heb een junction tabel Medewerkersinzet gemaakt met gecombineerde sleutel ProjectID en MedewerkerID; deze zijn beiden gerelateerd aan hun primaire sleutels in Projecten en Medewerkers. Aan de junction tabel hangt verder een attribuut Rol met een lookup naar een tabel Rollen.

Tot zover geen problemen.

- Ik maak een formulier Projectenoverzicht aan. Daarin gaan alle attributen van Projecten.
- Ik maak een subformulier aan. Ik kies om bestaande tabellen als bron te gebruiken.
- Ik selecteer de betreffende attributen uit de tabel Medewerkers, en het attribuut Rol uit de junction tabel (volgens mij doe ik hier iets fout).
- Nu wordt er gevraagd om links tussen het subform en het main form, hier kies ik geen (nl. geen idee wat Access hier precies vraagt).
- Subform gecreeërd, ziet er in principe goed uit. Probleem is natuurlijk dat ik nu zelf data moet enteren, en dat ik dat via pop-ups wil doen: eentje bij voornaam, waardoor meteen alle andere attributen in het subform worden ingevuld, en achteraan de rij, een pop-up voor de rol.
- Ik ga naar het design view van het betreffende subform. Hier gaat het mis op verschillende punten.
- Ik selecteer rol (beginnen met de makkelijkste). Change to combo-box. Bij properties > Row Source > tabel Rollen. Het stomme is dat onafhankelijk van welk BoundColum ik selecteer ik alleen maar de ID column krijg, en niet de Rol column. Niet handig bij invoeren.
- Hetzelfde gebeurt bij de achternaam, met als extra probleem dat een verandering van het MedewerkerID geen corresponderende verandering oplevert in de andere attributen die daar aanhangen...

Ik hoop dat het zo iets duidelijker is. Alvast bedankt!

These are my principles. If you don't like them, I have others.


  • Boss
  • Registratie: September 1999
  • Laatst online: 04-09 10:35

Boss

+1 Overgewaardeerd

Aha.

- Ik maak een formulier Projectenoverzicht aan. Daarin gaan alle attributen van Projecten.
OK.

- Ik maak een subformulier aan. Ik kies om bestaande tabellen als bron te gebruiken.
OK, hoewel je beter niet de wizard kan gebruiken maar zelf een form maken.

- Ik selecteer de betreffende attributen uit de tabel Medewerkers, en het attribuut Rol uit de junction tabel (volgens mij doe ik hier iets fout).
Denk ik ook. Dit formulier wil je op basis van de junction tabel hebben. Dat je die medewerkers via een combobox aan hun ID wil koppelen, maakt hier niet uit.

- Nu wordt er gevraagd om links tussen het subform en het main form, hier kies ik geen (nl. geen idee wat Access hier precies vraagt).
Dat is ook fout. Hier moet je opgeven welk veld het hoofd en subform aan elkaar bindt. Dat is het ProjectID veld. Access zal dan voor elk ProjectID uit het hoofdform de overeenkomstige records laten zien in het subform, dus met hetzelfde projectID.

- Subform gecreeërd, ziet er in principe goed uit. Probleem is natuurlijk dat ik nu zelf data moet enteren, en dat ik dat via pop-ups wil doen: eentje bij voornaam, waardoor meteen alle andere attributen in het subform worden ingevuld, en achteraan de rij, een pop-up voor de rol.
Waar je 'pop-up' hebt staan zou ik 'combo box' gebruiken. Met in de eerste kolom MedewerkerID en in de 2e de voornaam.

- Ik ga naar het design view van het betreffende subform. Hier gaat het mis op verschillende punten.
Aha.

- Ik selecteer rol (beginnen met de makkelijkste). Change to combo-box. Bij properties > Row Source > tabel Rollen. Het stomme is dat onafhankelijk van welk BoundColum ik selecteer ik alleen maar de ID column krijg, en niet de Rol column. Niet handig bij invoeren.
Je moet een combobox ook niet aan de tabel hangen, maar een querie invoeren bij de rowsource. Die bestaat uit (in dit geval) 2 kolommen: RolID en Rol. Vervolgens moet je op het eerste tabblad van de properties opgeven dat er 2 kolommen zijn en dat de breedte 0 is.

- Hetzelfde gebeurt bij de achternaam, met als extra probleem dat een verandering van het MedewerkerID geen corresponderende verandering oplevert in de andere attributen die daar aanhangen...
Dan moet je die andere velden koppelen in de source van het formulier, als het goed is.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.

Pagina: 1