Toon posts:

[Access 2003] Uitklaptabel wil niet lukken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een Access database die o.a. registreerd welke software op welke PC aanwezig is. Naast de meest gangbare beschijvingen zoals het besturingssysteem, office versie, serrive pack etc. moet er ook ruimte zijn voor alle overige applicaties. Deze overige wil ik opslaan in een aparte tabel, en linken aan de hoofdtabel. De bedoeling is dat wanneer je op 'overige software' klikt, er een uitklap tabel komt waar je zoveel overige software kwijt kan als je maar wilt. Dit moet heel simpel zijn, maar ik krijg het maar niet oor elkaar...Hier twee printscreens om het te illusteren:

Afbeeldingslocatie: http://members.home.nl/dajando/printscr1.jpg
Dit is een stukje tabel uit de hoofdtabel. Bij overige software moet je niets in kunnen vullen, maar enkel via de uitklaptabel (je weet wel, met zo'n plusje)

Afbeeldingslocatie: http://members.home.nl/dajando/printscr2.jpg
Dit is de tweede tabel, dus dit moet worden weergeven in de hoofdtabel wanneer je het uitklapt.

Mijn vraag is dus hoe ik deze relatie moet leggen, heb ik percée een sleutelveld met een uniek ID nodig bij één van de twee? Hoop dat het een beetje duidelijk is zo...

[ Voor 3% gewijzigd door Verwijderd op 21-02-2005 13:50 ]


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Je moet om dit voor elkaar te krijgen door een 'relationship' aan te maken, dus:

Toosl --> Relationship...

Verwijderd

Topicstarter
Ik weet dat ik een relatie moet leggen, maar ik weet niet wat voor een relatie ik moet leggen. Hoe krijg ik het voor elkaar dat je bij 'overige software' (het veld zelf, dus niet het uitklapbare) niets in kunt vullen, maar dat je enkel een uitklapplusje te zien krijgt?

Ik heb ook al ale soorten relaties gebobeerd (bijv. van 'overige software' naar 'applicatie' en 'versie') maar dat werkt niet.

  • Boss
  • Registratie: September 1999
  • Laatst online: 14:02

Boss

+1 Overgewaardeerd

Het idee is anders.
Je hebt de tabel met computers, en de tabel met overige software. Om nu voor iedere regel in computers meerdere regels met overige software te kunnen maken, heb je een 1-op-veel relatie nodig.
Maak een extra tabel: computersSoftware. Daarin koppel je per computer alle overige software.

Overigens zou ik je hele ontwerp nog eens goed bekijken, en denk even aan o.a. de volgende dingen:
- Ik zie geen primary key in je tabellen (zeker in je opzoek-tabelletje is dat aan te raden)
- Gebruik liever geen spaties in veldnamen. Krijg je later last mee.
- Waarom zou je Office ook niet onder 'overige software' zetten, net als alle software. Dat werkt makkelijker als je rapporten wilt maken.

Kijk eens naar de voorbeelddatabase 'noorderwind.mdb' die bij Access zit, dan snap je een beetje hoe het met relaties werkt. Anders zet je jezelf echt klem door met een slechte basis te beginnen.

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

Topicstarter
De tabel is wat uitgebreider dan ik heb laten zien, hier een pintscreen van alle velden:

Afbeeldingslocatie: http://members.home.nl/dajando/printscr3.JPG

Ik heb er bewust voor gekozen om alles in 1 tabel te zetten, in eerste instantie had ik verschillende tabellen onderverdeeld in: systeengegevens, hardware, software en netwerkgegevens, maar dat bleek niet te lekker lopen. Dus ik dacht: waarom moeilijk doen als het makkelijk kan? Dus heb ik alles in 1 tabel gezet die totaal heet. Behalve Overige software dus. Bij ieder veld moet je maar ding intikken, behalve bij 'overige software' (heet nu gewoon 'overig', zonder spatie) want bij overig is het niet bekend hoeveel er ingevoerd moet worden.

Nu kan ik wel een relatie leggen tussen de tabel overig en de computernaam, maar dan krijg je zo'n uitklapding onder 'computernaam' toch? Dat is ook niet de bedoeling...en hoe wordt een uitklaptabel in een formulier weergegeven? Want dan zou het zo wel kunnen omdat je daar de volgorde van velden zelf kunt bepalen.

[ Voor 17% gewijzigd door Verwijderd op 21-02-2005 14:59 ]


  • Boss
  • Registratie: September 1999
  • Laatst online: 14:02

Boss

+1 Overgewaardeerd

Oké, die tabel ziet er beter uit. Maar: Bij Overige Software (OverigeSoftware van maken?) wil je dus eigenlijk meerdere dingen in 1 veld kunnen opslaan. Dat kan niet (op makkelijke manier). Wat je dus moet doen is een 'koppel tabel' maken, waarin je per Computernaam kan opgeven welke overige software erop staat. Overigens zou ik om deze reden een extra veld aanmaken, ComputerID van het type autonummering.
In de tabel OverigeSoftware maak je twee kolommen: OverigeSoftwareID en omschrijving (misschien nog andere velden die voor jou van belang zijn).

De koppeltabel heeft dan de kolommen:
ComputerID
OverigeSoftwareID

Nu een koppeling maken tussen ComputerID in de computer tabel en de overige software tabel. Je kan dan per computer meerdere regels aanmaken in de OverigeSoftware tabel: een 1-op-veel relatie.

Nogmaals: kijk eens naar de voorbeeld database. Het lijkt erop dat je het idee van de relaties en/of opzoektabellen nog niet helemaal doorhebt.

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

Topicstarter
Bedank voor je reactie, ik ga er eens even mee aan de slag. Je hebt wel gelijk dat ik het princiepe van de relaties niet helemaal door heb, heb het ooit wel door gehad, maar dat is alweer zo lang geleden ;) Ik zal mezelf weer eens updaten :)

Verwijderd

Eeeuh, gebruik alstjeblieft geen lookup tables, die dingen zijn echt waardeloos:
http://www.mvps.org/access/lookupfields.htm
A Lookup field in a table displays the looked-up value. For instance, if a user opens a table datasheet and sees a column of company names, what is in the table is, in fact, a numeric CompanyID, and the table is linked with a select statement to the company table by that ID.

Any query that uses that lookup field to sort by that company name won't work. Nor will a query that uses a company name in that field as a criteria. If a user creates a combobox to select the company using a value list, the data in the table can be over-written.

Another relationship is created which then creates another set of indexes when a Lookup field is created, thus bloating the database unnecessarily.

If a combobox based on the lookup is used in a form, and a filter is applied, the persistent filter effect of Access often saves the filter and the next time the form is opened, there will be a prompt for the value (which cannot be provided, thus creating an error).

Reports based on the lookup field need a combobox to display the data, causing them to run more slowly. The underlying recordsource can also be modified to include the table, however the index, (unless it was set up within a proper relationship) may not be optimized.

Lookup fields mask what is really happening, and hide good relational methodology from the user.

The database cannot be properly upsized to, or queried by, another engine (without removing all the lookup fields) because no other engines use or understand them.

If security is implemented, permissions to tables is usually denied, and RWOP queries are used for data access. There will often be errors that there are no permissions on a specific table that isn't even being used in a query (because the lookup field is). If the queries are nested or complex, it can take some time to track down the lookup that's causing the error (that is, if it occurs to you).

Verwijderd

Topicstarter
Oei, wat stel jij voor?

  • Boss
  • Registratie: September 1999
  • Laatst online: 14:02

Boss

+1 Overgewaardeerd

DaJan, aub nooit zo maar iets quouten zonder het even in de juiste context te plaatsen.

Lookup tables zijn perfect bruikbaar, en worden in (bijna) alle databases gebruikt. Het artikel wat jij hier quote heeft (en dat ben je voor 't gemak / de verwarring) 'vergeten' te quoten) als titel
The Evils of Lookup Fields in Tables
In Tables. Wat de auteur daar duidelijk wil maken, is dat je geen lookup fields moet definieren in je tabellen, en daar heeft hij helemaal gelijk in. Maar het gebruik van het hele 'lookup-idee' in je database is prima. Alleen moet je de lookup-velden pas op je formulier 'vullen' door middel van combo boxes.

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

Topicstarter
Ik ben trouwens ondertussen verder gegaan met de relaties, heb het nu zo:

ComputerID in de hoofdtabel gekoppeld aan ComputerID in de koppeltabel (één op één relatie, beide primaire sleutels) Dan heb ik een één op veel relatie tussen OverigesoftwareID (primaire sleutel) in OverigeSoftware en OverigeSoftwareID in de koppeltabel (geen sleutel.)

In de hoofdtabel lijkt dat niet helemaal goed te gaan, maar als ik het goed begrijp moet ik aan de slag met comboboxes in het formulier? Of zie ik nog iets over het hoofd :?

  • Boss
  • Registratie: September 1999
  • Laatst online: 14:02

Boss

+1 Overgewaardeerd

Nee, helemaal fout. Volgens mij heb je de voorbeeld database nog steeds niet bekeken :)

Relatie tussen hoofdtabel en 'koppeltabel' moet 1-op-veel zijn. Je wilt immers meerdere 'overige software' kunnen koppelen aan 1 computer.

Die relatie tussen koppel- en opzoektabel zou ik niet leggen.

En nogmaals: bekijk de voorbeelddatabase. Je moet zometeen ook aan de slag gaan met subformulieren. En ik kan hier typen wat ik wil, als je het even voor je ziet snap je meteen waar het over gaat.

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

Topicstarter
Bedankt! Noorderwind inmiddels gevonden (had de access CD niet bij de hand, daar vroeg hij om), zal hem eens grondig bestuderen :)

Verwijderd

Topicstarter
Heb het nu zo:

Afbeeldingslocatie: http://members.home.nl/dajando/printscr4.JPG
Ik begrijp het nut van de koppeltabel niet helemaal. Zo lijkt het te werken, maar vanwaar de koppeltabel dan? Heb deze even buiten gebruik gelaten..

[ Voor 13% gewijzigd door Verwijderd op 22-02-2005 11:04 ]


  • Boss
  • Registratie: September 1999
  • Laatst online: 14:02

Boss

+1 Overgewaardeerd

Ah, we hadden er alletwee een iets ander idee over.

Ik had in gedachte om van 'overige software' ook een lijst te maken, dwz dat de gegevens in een andere (lookup) tabel worden opgezocht. Op die manier kan je later beter en makkelijker zoeken op de software die op de computers staat.
Dan zou je de relatie leggen naar de koppeltabel, en van ieder stukje software op een computer alleen et ID opslaan in plaats van steeds de volledige naam van alle software. Dat heeft wer met normaliseren te maken, de volgende les in database design (zou eigenlijk de eerste moeten zijn( :)

Maar wat je nu hebt werkt ook, die koppeltabel is niet nodig. Hoewel ik je toch zou aanraden om het op mijn manier te doen.

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

Topicstarter
Oké, ik wil het graag op jou manier proberen, maar ik vat hem niet helemaal. Zijn de tabellen zoals ze nu zijn ook geschikt voor jouw methode, want ik ben vanalles aan het proberen, maar ik heb het idee dat er iets niet klopt. Weet alleen niet precies wat. Hoe leg ik nu precies de relaties? Ik dacht dat je van ComputerID bij Totaal, naar ComputerID bij koppeltabel moet. En van OverigeSoftwareID bij OverigeSoftware naar OverigeSoftwareID bij de koppeltabel. Maar je zei eerder "Die relatie tussen koppel- en opzoektabel zou ik niet leggen." De opzoektabel is nu toch OverigeSoftware? (zie de tabelnamen in de screenshot hierboven voor de duidelijkheid)

[ Voor 3% gewijzigd door Verwijderd op 22-02-2005 14:35 ]


  • Boss
  • Registratie: September 1999
  • Laatst online: 14:02

Boss

+1 Overgewaardeerd

Je zit op de goede weg hoor. Die laatste relatie (tussen koppeltabel en opzoektabel) leg ikzelf meestal niet, omdat dat (soms) lastig is in Access. Maar er is niets mis mee om hem wel te leggen.

Op dit punt is het ook handig om de koppeltabel te hernoemen, denk ik. Een naam die wat duidelijkheid geeft. Ikzelf zou voor deze subtabel (het gaat immers om 'onderdelen' van de tabel Totaal) iets gebruiken van TotaalOverigeSoftware. (Hoewel ik totaal weer zou hernoemen naar computers :) )

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

Boss schreef op dinsdag 22 februari 2005 @ 08:44:
DaJan, aub nooit zo maar iets quouten zonder het even in de juiste context te plaatsen.

Lookup tables zijn perfect bruikbaar, en worden in (bijna) alle databases gebruikt. Het artikel wat jij hier quote heeft (en dat ben je voor 't gemak / de verwarring) 'vergeten' te quoten) als titel

[...]


In Tables. Wat de auteur daar duidelijk wil maken, is dat je geen lookup fields moet definieren in je tabellen, en daar heeft hij helemaal gelijk in. Maar het gebruik van het hele 'lookup-idee' in je database is prima. Alleen moet je de lookup-velden pas op je formulier 'vullen' door middel van combo boxes.
Voor zover ik begreep wou hij het ook serieus in de tabel plaatsen.
Deze overige wil ik opslaan in een aparte tabel, en linken aan de hoofdtabel. De bedoeling is dat wanneer je op 'overige software' klikt, er een uitklap tabel komt waar je zoveel overige software kwijt kan als je maar wilt.
en
Dit is een stukje tabel uit de hoofdtabel. Bij overige software moet je niets in kunnen vullen, maar enkel via de uitklaptabel (je weet wel, met zo'n plusje)
Er is inderdaad niets mis met lookup velden, maar dan met comboboxes op een formulier. TS stelt voor om dit in de tabel te doen, en daar ben ik allergisch voor. :)

Verwijderd

Topicstarter
Uiteindelijk moet het ook een formulier worden hoor, kende alleen de term 'lookup table' niet, vandaar uitklaptabel effe uitgelegd ;)

  • Boss
  • Registratie: September 1999
  • Laatst online: 14:02

Boss

+1 Overgewaardeerd

Verwijderd schreef op dinsdag 22 februari 2005 @ 14:53:
[...]
Er is inderdaad niets mis met lookup velden, maar dan met comboboxes op een formulier. TS stelt voor om dit in de tabel te doen, en daar ben ik allergisch voor. :)
Kan inderdaad een hoop mis mee gaan, heb ook nooit echt begrepen waarom die optie erin zit.

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