formulier om tabel bij te werken

Status
Niet open voor verdere reacties.

Chris Cools

Gebruiker
Lid geworden
19 okt 2008
Berichten
152
Hallo,

een vraag ivm formulieren:
Als ik formulier maak op een query die gegevens uit verschillende tabellen combineert, dan kan ik geen gegevens bewerken of toevoegen.

als het formulier rechtstreeks op 1 tabel is, of op een een query die maar op 1 tabel gebaseerd is, dan lukt dit wel.

Is hier een logische reden voor? en is dit te omzeilen?
bvb als ik op het formulier gegevens wil laten zien uit verschillende tabellen, kan ik deze dan niet updaten, of nieuwe records toevoegen?

thanx!
grtz,

chris
 
Er is een logische reden voor, en hij is (gedeeltelijk) te omzeilen.
Zoals je misschien wel kunt begrijpen, kun je met een formulier maar in één tabel tegelijk records toevoegen. Het toevoegen van een record gebeurt namelijk maar in één tabel die de focus heeft.
In een query kun je verschillende tabellen aan elkaar koppelen, maar ook hier geldt het principe: toevoegen van records kan maar in één tabel van die query. Als je een query maakt waarmee je records wilt kunnen toevoegen, moet je die tabel dus als uitgangspunt nemen. Best begin je dus, als je een query maakt waarmee je records wilt kunnen toevoegen, met die tabel te selecteren, en alle velden uit die tabel in de query te zetten. Doe dat bij voorkeur door de velden te slepen/selecteren en niet met het sterretje (asterix).
Vervolgens voeg je de overige tabellen toe waaruit je velden wilt gebruiken. Als je de relaties goed hebt gelegd, worden de tabellen automatisch gekoppeld aan de basistabel; anders moet je de tabellen zelf koppelen. Normaal gesproken bevatten de toegevoegde tabellen een sleutelveld, dat terugkomt in de basistabel. Hierbij geldt een één-op-veel relatie: de Hoofdtabel tblKlanten is aan de tabel tblFacturen gekoppeld door het veld Klantnummer uit tblKlanten te koppelen aan kl_Klantnummer uit de tabel tblFacturen. Hierbij geldt als regel: in de tabel Klanten mag je een klantnummer één keer toevoegen (sleutelveld); in de tabel Facturen mag een klantnummer meerdere keren voorkomen, want een klant mag meer dan één factuur ontvangen (bij elke bestelling een aparte factuur).

Voorbeeldje: je maakt een formulier voor Facturen, dus je gebruikt alle velden uit de tabel tblFacturen. In die tabel heb je een veld kl_Klantnummer. Om de klantgegevens voeg je dus de tabel tblKlanten toe. In deze tabel is het veld Klantnummer het sleutelveld. In de Relaties heb je het veld Klantnummer gekoppeld aan het veld kl_KLantnummer, dus Access koppelt in de query de velden automatisch aan elkaar. Nu selecteer je uit de tblKlanten de velden Bedrijfsnaam, Adres, Huisnr, Postcode en Plaats. Hetzelfde doe je voor de overige tabellen. Zou ik in het voorbeeld niet het veld kl_Klantnummer gebruiken, maar het veld Klantnummer uit de tabel tblKlanten, dan zou de query niet meer werken.

Waarom werkt deze query nu wel om records toe te voegen? Heel simpel eigenlijk: uit de tabel Facturen zijn alle velden gebruikt, en uit de overige tabellen de velden die geen sleutelveld zijn. Je moet het dus zo zien: alle velden die je in de query hebt opgenomen, slaan hun gegevens op in de tabel waar ze uitkomen. In je query sla je een nieuw record op in tblFacturen. Volgens de integriteit mag een Klantnummer meerdere keren voorkomen in tblFacturen, dus dat is prima. Zou ik het veld Klantnummer gebruiken uit de tabel Klanten, dan heb ik een tweeledig probleem. Als eerste: je zou nu proberen om in de tabel Klanten hetzelfde klantnummer nog een keer toe te voegen. Dat mag niet, want het veld Klantnummer is een sleutelveld. Het tweede probleem heeft hier mee te maken: als je een Factuur record toevoegt, ben je verplicht om een Klantnummer in te voeren. Omdat het klantnummer uit Klanten wordt gehaald, gebeurt dat niet. En dan kun je het record dus niet opslaan.
Het tweede probleem kun je ondervangen door het veld kl_Klantnummer uit tblFacturen ook toe te voegen. Maar deze oplossing lost het eerste probleem niet op: je bent nog steeds bezig om een bestaand klantnummer toe te voegen aan Klanten! En overigens is het klantnummer maar één keer nodig, want uiteraard is het klantnummer voor de tabel Facturen identiek aan het klantnummer in de tabel Klanten. Je hebt het veld du maar één keer nodig.

Conclusie: via een query kun je acties uitvoeren op één tabel tegelijk. Van deze tabel moet je dus alle velden die je wilt invullen opnemen in de query. Uit de aanvullende tabellen neem je de velden die geen sleutelveld zijn. Deze opzet heeft ook nog een (misschien ongewenst) bij-effect. De Klantgegevens zoals Naam en adres zijn wèl te muteren! Als je dus in een query waarin 6 factuurrecords zitten van een klant, en je wijzigt iets in het adres va één record van de query, dan zul je zien dat alle 6 records de nieuwe waarde laten zien. Bedenk zelf maar waarom dat zo is...
 
@Octofish: Autofill form and save record to table

Als ik Octofish goed heb begrepen is dit een manier om via een formulier, data (met bijbehorende relaties) aan een tabel toe te voegen.
Nu heb ik het volgende probleem, mijn formulier bestaan eig uit twee delen, het eerste deel wil ik automatisch laten invullen (dit heb ik al kunnen doen door middel van een query formulier). Dus bv. als ik het Trigram invul wordt de volledige naam van het personeel ingevuld.
Het tweede deel van het formulier (GEEN Subform, gewoon het zelfde formulier), bestaat uit nieuwe informatie die ik toe wil voegen.
Nu wil ik dat de data van dit ingevulde formulier gekoppeld (of opgeslagen) wordt in een nieuwe tabel die al mijn nieuwe invoeringen bij gaan houden.

Samenvating: Ik wil een formulier die zich deels automatisch invult, met behulp van query's (dit is mij gelukt), deze vul ik aan met nieuwe data en moet worden opgeslagen in een tabel die elke nieuwe record bijhoud.
Dit tweede deel is mij nog niet gelukt? Lijkt wel alsof het een van de twee is? Hoop dat je mij hier mee kan helpen:confused:
 
@Cadmesh:
Jouw vraag is niet helemaal hetzelfde als die van de TH. Om die reden (en omdat het niet heel erg beleefd is om iemand ander zijn vraag over te nemen) zou ik je willen vragen een eigen vraag te starten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan