Koppeling verwijst naar ID ipv naar naam

  • Onderwerp starter Onderwerp starter EdHa
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

EdHa

Verenigingslid
Lid geworden
6 mei 2012
Berichten
57
Is er een verklaring voor dat als ik in een gekoppelde tabel in de backend database een gegeven ophaal uit een gejoinde tabel en daar keurig de naam zie, ik deze in de frontend als een nummer (de ID) terugvind, zelfs na opnieuw koppelen en zelfs helemaal weghalen en opnieuw koppelen van de brontabel? Het probleem begon er mee dat ik de gekoppelde tabel vanuit de frontend niet meer kon bijwerken via koppelingsbeheer omdat de naam niet herkend werd. Daarop heb ik de tabel een andere naam gegeven en de oorspronkelijke opnieuw gekoppeld, maar dat probleem blijft. kennelijk doe ik iets niet goed, maar wat? Dit forum is altijd mijn redding, dus vast ook vandaag.
Groet,
:cool:
 
Laten we dan maar proberen om je niet teleur te stellen :). Voordat ik een antwoord kan geven een tegenvraag: heb je in de backend toevallig keuzelijsten gebruikt in je tabel(len)? En zijn die dan gebaseerd op andere tabellen? Zo ja: dan ligt daar waarschijnlijk je probleem. En de oplossing.
 
Ik heb in de backend voor bepaalde gegevens in tabellen (namen, voorvoegsels) de wizard opzoeken gebruikt die de gegevens uit een andere tabel haalt, dat klopt. Dat eventuele for luieren in de frontend dan opnieuw moeten worden gemaakt is mij duidelijk, maar ook als ik rechttrekt in de gekoppelde tabel inde frontend kijk zie ik bij sommige velden de ID en bij ander keurig de naam. Waarom de ene keer wel en de andere niet?
 
Doe jezelf een plezier en gebruik NOOIT keuzelijsten in tabellen, tenzij op basis van een lijst met waarden.
Zet in je backend om te beginnen dus alle velden om naar tekstvelden en vernieuw dan de koppelingen. Dan zou je er eigenlijk al vanaf moeten zijn.
 
Maar Octafish,
Een van de basisprincipes is toch dat je de database normaliseert en gegevens die meermalen voorkomen in aparte tabellen opslaat? Dan ontkom je toch niet aan koppelingen tussen die tabellen op basis van opzoekvelden? Of mis ik iets?
 
Misschien moet ik de vorige vraag even anders formuleren: Als ik GEEN gebruik zou willen maken van de wizard opzoeken, die nu eenmaal in Access wordt aangeboden, maar waarvan jij geen fan bent omdat er problemen uit voortkomen, hoe kan ik dan de koppeling leggen met een andere tabel met namen? Een voorbeeld is plaatsnamen. Ik heb voor de adressen een verwijzing opgenomen naar een tabel plaatsnamen die bij aanvang is opgebouwd en naar believen (via 'niet in lijst') kan worden aangevuld. Als er een adres van een persoon wordt ingevoerd wordt voor de plaatsnaam verwezen naar die tabel en worden die opties getoond. Voordeel: geen schrijffouten in plaatsnamen en hergebruik van reeds bekende gegevens. Deze worden via het opzoeken in de tabel gevonden. Kan dat ook op een andere betrouwbare manier? Want wat ik niet zou willen is dat gebruikers maar wat gaan aanrommelen.
 
Gebruikers laten 'rommelen' is uiteraard uit den boze :). Als ik het voor het zeggen had bij de ontwikkelafdeling van Microsof, dan zouden er een hoop onzinnige functies uit Access verdwijnen, kan ik je zeggen! M. wil (vermoed ik althans) dat alle pakketten die ze leveren door alle (al dan niet geschoolde) gebruikers moeten worden gebruikt. Dat werkt prima bij applicaties als Outlook, PowerPoint, Word en desnoods Excel, maar dus niet voor Access. Het bouwen van een database vereist nu eenmaal onderliggende kennis die het programma niet voorziet. Dat concentreren op gebruikersgemak leidt er dus toe dat er allerlei onzin in het pakket wordt ingebouwd, en geeft een nietsvermoedende gebruiker al snel de indruk dat hij/zij 'best een database kan bouwen'.

Dat gezegd hebbende, is het dus belangrijk om als bouwer goed inzicht te hebben in hoe een database wordt opgebouwd, en waarom je bepaalde dingen niet moet doen, en andere dingen juist weer wel. Je bent, als ik je berichtjes zo lees, al redelijk goed bezig, want je hebt inzicht in herhalende gegevens. En je bent begonnen om die apart te zetten in eigen tabellen. Ik vermoed dat je tabel [tPlaatsnamen] een veld [Plaatsnaam] heeft, misschien een veld [Gemeente], en een veld [PlaatsnaamID]. Wellicht werk je landelijk en heb je ook nog een veld [ProvincieID] (en dan dus ook een tabel [tProvincies]). In de tabel [tKlanten] heb je dan een veld [PlaatsnaamID] zodat je plaats en klant kunt koppelen. Gaat het om veel klanten, dan kun je wellicht nog overstappen op een koppeling met een Postcodetabel, want nu zit je in [tKlanten] vermoedelijk nog met niet-genormaliseerde straatnamen. En dat levert doorgaans nog meer ellende op dan Plaatsnamen :).

Laten we ons echter beperken tot Plaatsnaam en Klant, want de structuur van verdere opsplitsing is toch hetzelfde. De tabellen [tKlanten] en [tPlaatsnamen] moet je in het scherm <Relaties. aan elkaar koppelen op basis van het veld [PlaatsnaamID]. Daarbij zet je altijd de optie <Referentiële integriteit afdwingen> aan, anders kun je de relatie net zo goed weglaten. Nu zijn de tabellen gekoppeld; in de tabel [tKlanten] zie je dus het veld [PlaatsnaamID]. Waar zet je nu die keuzelijst? Want je laat je gebruikers uiteraard niet getallen inkloppen. Is heel simpel: die keuzelijsten maak je op de gebruikersformulieren. En dáár maak je dan de constructie zoals je die nu dus in de tabel hebt staan.

Waarom geen keuzelijsten in tabellen? Eigenlijk heel simpel: in een tabel wil je altijd de opgeslagen waarden kunnen zien. Zie een tabel als het fundament van een huis; zonder fundament valt het huis om, maar niemand zal het in zijn hoofd halen om de fundamenten te behangen! Is ook logisch, want als er scheurtjes in de fundering zitten, wil je ze wel kunnen zien. En dat kan niet als je ze behangen hebt! Datzelfde geldt dus ook voor tabellen: als er wat mankeert aan de data, moet je kunnen zien wat je feitelijk hebt opgeslagen! Sowieso is het mijn overtuiging dat een gebruiker niets te zoeken heeft in een tabel. Die werkt bij mij altijd via formulieren. En op die formulieren maak je dus alles netjes, met keuzelijsten, knoppen etc.
Eén van de (vele) problemen die je tegenkomt met keuzelijsten in tabellen is, dat je bij exports en sommige soorten queries hoe dan ook tóch de opgeslagen waarden ziet. Dus terwijl je in de tabel de plaatsnaam 'Rotterdam' ziet, staat in je export de waarde '1'. En wat dacht je van filteren in een query? Als je 'Utrecht' ziet in je query, en je wilt op 'Utrecht' filteren, dan wil je toch "Utrecht" intypen als criterium, en niet "12"?

Ik hoop dat je nu voldoende aansporing hebt om al je keuzelijsten alsnog om te zetten naar tekstvelden :D.
 
Even snel. Later uitgebreider: top! Dank je wel.
 
Als beloofd even een uitgebreidere reactie.

Ik begrijp uit je reactie dat jij, zo te lezen op goede gronden, de opzoekvelden in tabellen verafschuwt. Vervelend dat Microsoft die functie speciaal opneemt in de tabel middels de wizard opzoeken. Dat zet je dus op het verkeerde been.

Dan op de inhoud: Je hebt het over een postcodetabel. Dat klinkt heel goed. Bestaan er soms standaardtabellen die binnengehaald kunnen worden? Of bedoel je dat ik in dit geval zelf net zoals ik de plaatsnamentabel heb opgebouwd een postcodetabel kan opbouwen?

Ik ga in elk geval mijn tabellen aanpassen. Het is tot dit moment nog steeds een database 'in progress' zodat er nog geen gebruikers last van hebben. Ik zit in de testfase en het wijzigen kan nu nog makkelijk zonder gevolgen.

Ik heb ook een tabelletje met voorvoegsels gemaakt, maar heb die nu omgezet in een lijst met waarden. Het zijn er niet zo heel veel, dus dat moet kunnen. Om eenduidigheid te krijgen leek me dat handig, zodat we niet 'v.d.' de ene keer en 'van de' of 'van der' de andere keer krijgen. Grappig genoeg zijn er toch al snel een stuk of 15 voorvoegsels die in mijn database voorkomen, dat had ik niet verwacht.

Eerder had ik wel eens problemen in een andere database met die relaties. Ik denk dat ik nu begrijp wat ik toen mogelijk niet goed deed. Als ik nu naar mijn relaties kijk en op 'alle' klik is er door de wizard opzoeken een wirwar van relaties ontstaan die volgens mij eerder verwarrend dan verhelderend werkt. Zeker de moeite waard om aan te passen dus.

Als gezegd, je hebt me weer goed geholpen. Dank nogmaals.
 
Toch nog een probleem in de relatiesfeer.
Als ik een relatie probeer te leggen tussen het veld woonplaats en het ID-veld van de tabel Plaatsen en referentiële integriteit probeer af te dwingen krijg ik de bijgaande foutmelding. De relatie moet hetzelfde aantal velden bevatten met identieke gegevenstypen. Dat had ik dus in het verleden ook steeds. Wat gaat er niet goed? De tabel Plaatsen heeft twee velden, het ID-veld en de plaats zelf. Als ik de wizard opzoeken gebruik zie ik dat die relatie wel goed wordt gelegd.

Octafish, help!

image.png
 
De wizard gebruikt geen relaties, dus dat verklaart m.i. een hoop... Een correcte relatie (met Referentiële integriteit dus) controleert of je in de tabel [Klanten] alleen plaatsen hebt ingevoerd die ook in de tabel [Plaatsen] bestaan. Dus als je 100 plaatsen hebt, die zijn genummerd van 1 naar 102, dan mag je in de tabel [Klanten] géén PlaatsID hebben gebruikt met de waarde 105. Die bestaat dan niet in de tabel [Plaatsen] en dat levert dus een conflict op m.b.t. gegevensintegriteit. Dayt zou één verklaring kunnen zijn. Je kunt dat simpel controleren met de query wizard Niet-gerelateerde records. Die spuugt netjes de klanten records uit met niet-bestaande adressen.

Een andere oorzaak kan zijn als je in [Klanten] niet het ID veld opslaat, maar de feitelijke tekst. In dat geval probeer je een tekstveld te matchen met een numeriek veld, en dat kan ook niet. Dat kun je alleen oplossen door een numeriek veld aan Klanten] toe te voegen en met een Bijwerkquery de ID's in te vullen. Je matcht dan op basis van de tekstvelden.

Is geen van deze oorzaken het geval, dan wil ik de db zelf wel even zien :).
 
Het is gelukt, ik ben geheel tevreden. Ik heb nog even je handleidingen er bij genomen en ben in een schone database begonnen te maken wat ik wilde. Vervolgens heb ik bekeken waar de verschillen zaten en toen was ik er uit. Dank opnieuw. Nog een laatste vraag: Bestaat er een index van je handleidingen? Ik grijp er regelmatig naar maar voor zover ik heb kunnen vinden is er geen index zodat je door heel veel afzonderlijke delen moet bladeren om te zien welke je moet hebben voor een bepaald onderdeel. Als er geen index is, misschien een tip?

Ik zal het issue als opgelost markeren als je dit gelezen hebt.
 
Ik heb 'm gezien :). Ben nog wel benieuwd naar wat nu het verschil was, zoals je in je laatste aangaf.
Het klopte dat er geen index (althans: geen goede) is van de cursus. Je bent ook niet de eerste die er naar vraagt. Schrijven is leuk, de administratie ervan een stuk minder :). Ik zal er binnenkort eens naar kijken; ik zet hem dan in het eerste bericht van het vaste draadje dat bovenin het forum staat.
 
Belangrijkste verschil was dat de rijbron (die je dmv een query opgeeft) niet goed ingevuld was. En verder de juiste koppeling tussen ID van plaatsen en plaatsnaam van klanten. Eerst vond ik door jouw advies uit hoe de referentiële integriteit kon worden bereikt, even vervolgens bleef ik nog steeds nummers zien ipv namen. Dat had te maken met 'tekst' of 'numeriek' maar ook met die query en de weergave van alle kolommen met de juiste breedtes. Dus meerdere dingen die stuk voor stuk dwars zaten.

Overigens ben ik bij wijze van tegenprestatie best bereid om eens een begin met de index te maken. Het zou al heel wat zijn als duidelijk is in welk nummer welk onderwerp wordt behandeld. Een excelletje met die gegevens wil ik wel eens opmaken. Je hoeft wat mij betreft niet veel meer te doen, maar op de site staat wel een heel vage aanduiding en de ene keer staat er wel op het titelblad waar het over gaat, de ander niet.

Deal?
 
Dank voor het aanbod, maar ik denk niet dat dat nodig is. Ik ben al bezig geweest met het samenvoegen van de hoofdstukken en op basis van het complete document maak ik dan een inhoudsopgave en index. Dus ik kan alles in beginsel gewoon vanuit Word genereren. Ik moet gewoon wat minder lui zijn :).
 
Lui ben je volgens mij allerminst. Je hebt haast een dagtaak aan het bijhouden van deze berichten en dat doe je trouw en nauwgezet. Mijn waardering daarvoor is groot!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan