Invoer van gegevens in gekoppelde tabellen.

Status
Niet open voor verdere reacties.

AKSCC

Gebruiker
Lid geworden
24 okt 2008
Berichten
12
Wie kan mij bij het volgende probleem op weg helpen?

Ik heb (dit is een voorbeeld, de werkelijke database bevat andere tabellen die gekoppeld moeten worden) een database met 3 tabellen.

Tabel 1: Id, Achternaam, voornaam
Tabel 2: Id, Adress, woonplaats, Id tabel 1
Table 3: Id, Hobbies, Id tabel 1

Ik heb tabel 1 met tabel 2 en 3 gekoppeld en via een query een formulier gemaakt dat de gegevens van alle 3 de tabellen bevat. Dit formulier staat mij echter niet toe gegevens te wijzigen.

Wie kan mij zeggen wat ik moet doen om via 1 formulier de gegevens van de beide subtabellen 2 en 3 te kunnen wijzigen.

Bij voorbaat dank
 
He zou kunnen dat je de sleutel uit tabel 1 hebt opgenomen in de query. Als je dat doet, is het onmogelijk om gegevens te muteren. Je moet, om de query updateble te maken, de query zien als een verlengstuk van de tabel waarin je records zou willen kunnen toevoegen, bijvoorbeeld tabel 2.
Als je in tabel 2 records wilt toevoegen, zou je dat doen door in alle velden in tabel 2 gegevens in te vullen. In de query neem je daarom ook alle velden uit tabel 2 op. Waarschijnlijk wil je ook de naamgegevens van de persoon willen zien. Je neemt daarom die gegevens ook op in de query. Niet het sleutelveld, want die heb je al uit tabel 2 geselecteerd. Idem voor tabel 3, waar je ook de aanvullende gegevens selecteert.
Als je het op deze manier doet, moet je query bij te werken zijn.

Waarom de query niet werkt als je het sleutelveld uit tabel 1 meeneemt in de query is eigenlijk simpel verklaard: bij toevoegen van een record in een tabel mag je het sleutelveld uiteraard niet twee keer invoegen. Zodra je het sleutelveld uit tabel 1 gebruikt, is dat precies de situatie die je creëert: bij toevoegen wil je een waarde een tweede keer toevoegen. Bij tabel twee zou het omgekeerde gebeuren: je vult wel adres en woonplaats in, maar geen verwijzing naar tabel 1.
Je hebt dan een record zonder verwijzing, en dat mag uiteraard niet.

In (in ieder geval) deze situatie heb je dus een query gemaakt die niet bewerkbaar is.
Mocht dit niet het geval zijn, dan is er iets anders aan de hand. Je zou dan kunnen denken aan verplichte velden in een tabel die niet zijn opgenomen in de query, al krijg je dan een andere foutmelding (zo uit het hoofd). Misschien is het dan handig om de sql van de query te posten.

Michel
 
Michel,

Bedankt voor je antwoord, maar ook na mijn query gewijzigd te hebben, kan ik de gegevens niet wijzigen.

Ik stuur je bijgaand mijn test database. Wellicht dat je hier eens naar kunt kijken.

Bij voorbaat dank
Andre
 

Bijlagen

  • Database3.zip
    53,4 KB · Weergaven: 19
Heb er naar gekeken; en een paar foutjes er uit gehaad.
Om te beginnen: je had van de tabelkoppelingen outer joins gemaakt. Dat is op zich al voldoende om de query alleen-lezen te maken. Je moet, als je records wilt kunnen toevoegen, altijd rechte joins gebruiken. Heb ik dus aangepast.
Ten tweede: zodra je straight joins gebruikt, krijg je alleen gegevens te zien die in beide tabellen aanwezig zijn. (waarschijnlijk de reden dat je dacht: ik maak er outer joins van, dan zie ik alles...) Ik heb dus wat data extra ingevoerd.

Een heel ander punt: de naamverwijzing in de tabellen vond ik niet echt logisch. Als je in tabel 2 verwijst naar de sleutel in tabel 1, dan moet je (vind ik) dat veld [Tabel1_ID] noemen, en niet [Tabel2_ID]. Hetzelfde geld uiteraard voor tabel3, waar de verwijssleutel [Tabel3_ID] heette. Ik heb in het nieuwe voorbeeld dus de veldnamen aangepast.
Nu is ook veel duidelijker met welke tabel je een koppeling hebt gemaakt.

Ander puntje dat mij opviel: je hebt dus drie tabellen, waarvan tabel 1 de naamsgegevens opslaat, tabel 2 een adres, en tabel 3 een leeftijd. Ik zou zeggen dat tabel 3 gekoppeld moet zijn aan tabel 1 (persoon), en niet aan tabel 2 (adres). Tenzij je de leeftijd van een adres wilt weten....

Affijn, hier is de db!

Michel
 

Bijlagen

  • Database3.rar
    23,2 KB · Weergaven: 33
Michel,

Bedankt voor je antwoord. Vwb foutjes zul je ongetwijfeld gelijk hebben. Ik heb mij onder tijdsdruk Access zelf moeten leren en heb nog veel te leren.

De database is een simpele weergave van de produktie database. Deze DB wordt gebruikt om opmerkingen van verschillende project groepen met betrekking tot dezelfde records te verzamelen.

Ik zal later vandaag even naar je aanpassingen kijken en dan waarschijnlijk nog op terug komen.

Voor nu, nogmaals bedankt

Andre
 
Michel,

Ik heb even snel naar je oplossing gekeken en gezien dat je T1 koppelt met T2 en T2 vervolgens met T3. In de database die ik dacht te hebben gezipped was T1 gekoppeld aan T2 en T3. Als je hier een oplossing voor weet, stuur mij dan aub een nieuw voorbeeld.

Wellicht is het mogelijk dat ik je de reden van mijn "oplossing" je telefonisch toelicht. Indien mogelijk laat mij dan aub even weten hoe ik je kan bereiken zonder onze telefoonummers publiek te maken.

Bedankt
Andre
 
Ik heb de koppelingen laten staan zoals in het aangeleverde zipje. Ik kan me voorstellen dat je het zo niet bedoelt.... Je moet 1 aan 2 kunnen koppelen, en 1 aan 3 en dan zou het nog steeds moeten werken.

Michel
 
Overigens heb je nog wel een ander probleem dat je moet tackelen:
Je kunt dus alleen in tabel2 en tabel3 records invoeren waarvan je een ID hebt in tabel1.
Als je in de query een record aanmaakt voor tabel 1, heb je dat record nog niet gelijk beschikbaar voor tabel2 en tabel3; omdat je alles in één dynamisch record presenteert. Je zult dus eerst de query moeten sluiten, en daarna weer openen. Dan heb je het nieuwe record beschikbaar in de oveige tabellen.
Je kunt dit ondervangen door er een formulier over te leggen, waarin je het record van tabel1 opslaat, en daarna het formulier (en dus ook de query) met een Refresh actualiseert. Daar moet dan wel iets voor gemaakt worden in VBA.

Michel
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan