met vba een rec toevoegen in een linked table

Status
Niet open voor verdere reacties.

reinier22

Nieuwe gebruiker
Lid geworden
26 feb 2017
Berichten
3
Hallo allemaal,

Dit is mijn eerste post hier :)
Ik programmeer al vanaf 2000, maar regelmatig moet ik nog zoeken op internet en soms ook een vraag zetten op een forum..
--

Ik heb 2 tabellen die met elkaar gelinked zijn.(1 to many)
Nu moet ik met VBA een record in de linked table toevoegen en dus ook in de eerste, de 'parent'.
Nu heb ik dat opgelost door eerst een tabel in de parent aan te maken, vervolgens naar het laatste record te gaan en de ID
te pakken, om vervolgens in de linked table een record aan te maken met die ID.

Maar volgens mij moet dat simpeler en efficienter kunnen.

Hoe doen jullie dat?



Alvast bedankt!!!!!!
 
Allereerst welkom bij HelpMij. Maar je komt wel binnen met een vraag waar je het antwoord zelf al op gegeven hebt :). Ik zou namelijk niet weten hoe het simpeler kan, of waarom het überhaupt simpeler zou moeten.

Je hebt sowieso twee acties nodig, want je gaat twee tabellen vullen. In een 1-veel situatie moet het record dat je uit de 1-tabel wilt gebruiken wel bestaan, anders valt er weinig te 'velen'. Probeer het maar in een gekoppelde tabel: als je daarin een record probeert op te slaan met een niet-bestaande waarde uit tabel1, dan gaat dat niet. Al kun je dat dat in de relaties nog wel instellen, maar daarmee trek je het 1-op-veel principe onderuit, dus dat raad ik niet aan.
Kortom: je zult eerst het record in de één kant op moeten slaan, vervolgens de sleutel daaruit ophalen en die waarde dan gebruiken als waarde voor de veel-kant.

Ergo: exact zoals je het nu al doet.
 
nieuw record in linked tabel

Tja, daar lijkt het wel op.
Ik vind het alleen geen fraaie oplossing, ik vraag mij af of het niet mogelijk is met een insert into
(SQL) deze twee in 1 klap te vangen, dus dat automatisch een ID wordt gemaakt in de autonummering.

Op internet heb ik niets kunnen vinden, er staat uberhaubt niet veel over aanmaken van een record in een
linked tabel met vba...
 
En wederom geef je antwoord op je eigen vraag :). Fraai of niet: het is wat het is, punt, basta, finito, end of discussion. Als je wél in twee tabellen tegelijkertijd kan toevoegen, dan is er uiteraard ook geen limiet aan de bovenkant, dus dan kan het ook in 594 tabellen tegelijkertijd.
Databases werken vanuit een Topdown benadering; zo kun je de tabellen wél zo koppelen dat je bij het verwijderen van (bijvoorbeeld) een klantenrecord, ook de gerelateerde orders, reparaties etc. kunt verwijderen. Juist, op basis van een bestaand ID. En daar gaat jouw wens dus mank: op het moment dat je in twee tabellen tegelijkertijd records toevoegt, zijn beide records nog niet opgeslagen. De gekoppelde tabel kan dus het bronrecord niet opzoeken, omdat dat nog niet bestaat.
 
Toch een oplossing gevonden waarmee altijd onder alle omstandigheden de juiste ID gepakt wordt
van een tabel waarvan een nieuw record gemaakt is, waarmee vervolgens de ID gebruikt kan worden
om een record in de linked table te maken.

heel simpel...
With rst
.AddNew
!LeafletCode = LeafletCode
!LeafletName = LeafletName
!UNCPath = "somePath" + LeafletCode + ".xml"
!Media = Media
!CustomerID = cboCustomerID.Column(0)
!PagesIn = PagesIn
!pagesOut = pagesOut
addInsert = CLng(rst!enclosureID) 'ID is passed back to calling routine
.Update
End With
rst.Close
 
Dit is een standaardprocedure om een record aan te maken. Klopt, heel simpel. Maar deze code heeft m.i. niks met je originele vraag te maken :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan