1 op 1 relatie en INSERT INTO

Status
Niet open voor verdere reacties.

ReneRijk

Gebruiker
Lid geworden
23 mrt 2008
Berichten
112
Hoi allemaal,

Ik heb 2 tabellen met een 1 op 1 relatie.

tabel 1 heeft een aantal velden
tabel 2 heeft een aantal velden
Alle twee staan ze in een SQL 2005 database.

Tabel 1 is van een database van een gekocht programma.
Ik wil in deze tabel geen "eigen" velden aanmaken. Dit om problemen bij een eventuele update/upgrade van het programma te voorkomen.

In Tabel 1 ontbreken een aantal velden die wij willen gebruiken in ACCESS 2007.
Dus ik heb een Extra tabel aangemaakt (tabel 2 voor het gemak)

Nu is Tabel 1 al deels gevuld met records. Tabel 2 is nog maagdelijk leeg.
Als ik ze nu 1 op 1 link dan snap je dat je een error krijgt tijdens het invullen.

Ik heb dat opgelost door in SQL een query te laten draaien,

INSERT INTO KlantenCompanyAdditions(company_id) select company_id from company;

Werkte prima. Tabel 2 heeft netjes de zelfde primary keys gekregen als Tabel 1.
Nu is de 1 op 1 relatie voorelkaar en werkt.
Maar,

De velden van beide tabellen zijn samengevoegd op een form.
Als ik nu een nieuwe klant aanmaak "dus in Tabel 1 wordt een nieuwe primary key aangemaakt" dan wordt in Tabel 2 deze primary key niet over genomen.

Ik moet dus eigenlijk iedere keer als ik een nieuw record aanmaak die query laten lopen zodat de primary key van Tabel 2 dezelfde waarde krijgt als Tabel 1.
( INSERT INTO KlantenCompanyAdditions(company_id) select company_id from company; )

Maar geen id hoe ik dit moet doen.
Ik wil het liefts dat dit in ACCESS gebeurd en nadat ik een nieuwe klantnaam invul in een nieuw record.

Wie o wie kan mij helpen....

Peace,
Rich_Art. :thumb:
 
Update:

De update query is gelukt maar ik zie dat het niet helemaal loopt zoals ik wil.

Zoals het nu is, moet ik eerst een nieuwe record aanmaken met de klantnaam ingevuld.
Dan het form sluiten zodat er een primary key wordt aangemaakt in Tabel 1,de toevoeg query runnen om in tabel 2 de primary sleutels te laten updaten/toevoegen.
Dan moet ik mijn form weer openen en kan ik de resterende gegevens pas invullen.
Niet echt een goede oplossing lijkt mij.
Tevens krijg ik tijdens het runnen van de query de melding of ik X records wil updaten.
Daarna de melding dat niet alle records zijn geupdate (logisch want de records die er al zijn hebben allemaal al een Primary key)
En als afsluiting een foutmelding dat niet alle records kunnen worden geupdated vanwege een restrictie. :(

Is het niet gewoon mogelijk om 1 veld van het laatse record toe te voegen aan Tabel 2 zodat de primary keys gelijk lopen. (wat nodig is voor een 1 op 1 relatie)

Ik ben even de draad kwijt hier..

Peace,
René :thumb:
 
als je een beetje handig bent met vba, dan lukt alles. maak je form unbound en execute je queries met currentdb.execute ...
 
Laatst bewerkt:
Haha, ja idd. Ik zal me maar eens gaan verdiepen in VBA.
Ben er al wel mee bezig geweest maar nog niet erg diep.

Peace,
René :thumb:
 
Haha, ja idd. Ik zal me maar eens gaan verdiepen in VBA.
Ben er al wel mee bezig geweest maar nog niet erg diep.

Peace,
René :thumb:


René,

Voordat je je in VBA gaat storten even dit
Ik wil in deze tabel geen "eigen" velden aanmaken. Dit om problemen bij een eventuele update/upgrade van het programma te voorkomen.
Het is te hopen dat de update van het programma geen nieuwe tabellenstructuur inhoud want heb je een probleem.

Omdat je iedere keer met de zelfde sleutel wilt werken zou ik van de bestaande tabel en de aanvullende tabel één nieuwe tabel maken waar alles in staat. Deze dan uiteraard de naam geven van de tabel van de leverancier.

Hierdoor ben je en de afhankelijkheid van de leverancier kwijt, en kan je gewoon met een tabel werken.

Wie weet kom je er hiermee ook uit.

Wim
 
Omdat je iedere keer met de zelfde sleutel wilt werken zou ik van de bestaande tabel en de aanvullende tabel één nieuwe tabel maken waar alles in staat. Deze dan uiteraard de naam geven van de tabel van de leverancier.

Hierdoor ben je en de afhankelijkheid van de leverancier kwijt, en kan je gewoon met een tabel werken.

??
Wat is hierin het verschil met de aanvullende velden in de bestaande tabel maken?
Er is 1 tabel Company genaamd. Deze tabel wordt gebruikt door een gekocht helpdesk programma. Wij gebruiken deze database als Back_end voor onze front_end apllicaties.
Vandaar dat ik liever niet in een bestaande tabel aanvullende velden toevoegen.

Zoals jij het voorstelt snap ik niet helemaal.

Wij gebruiken dus deze Company tabel ook in Access. Als wij een Company toevoegen dan zien wij dat dus in het gekochte helpdesk programma als ook in Access.

Jij zegt, maak 1 hele nieuwe tabel van de twee tabellen met de zelfde naam.
Dat is in mijn ogen dus hetzelfde als in de bestaande tabel de aanvullende velden toevoegen.
En twee taballen met dezelfde naam gaat natuurlijk niet.

Misschien zie ik het helemaal verkeerd hoor.
In ieder geval hartelijk dank voor het meedenken zover. :D

Peace,
René :thumb:
 
??
Wat is hierin het verschil met de aanvullende velden in de bestaande tabel maken?
Er is 1 tabel Company genaamd. Deze tabel wordt gebruikt door een gekocht helpdesk programma. Wij gebruiken deze database als Back_end voor onze front_end apllicaties.
Vandaar dat ik liever niet in een bestaande tabel aanvullende velden toevoegen.

Zoals jij het voorstelt snap ik niet helemaal.

Wij gebruiken dus deze Company tabel ook in Access. Als wij een Company toevoegen dan zien wij dat dus in het gekochte helpdesk programma als ook in Access.

Jij zegt, maak 1 hele nieuwe tabel van de twee tabellen met de zelfde naam.
Dat is in mijn ogen dus hetzelfde als in de bestaande tabel de aanvullende velden toevoegen.
En twee taballen met dezelfde naam gaat natuurlijk niet.

Misschien zie ik het helemaal verkeerd hoor.
In ieder geval hartelijk dank voor het meedenken zover. :D

Peace,
René :thumb:

René,

Dit geeft inderdaad een ander idee over wat je wilt doen.
Dan kies ik ook voor een andere insteek en wel het volgende:

De query om de tabel2 bij te werken gaat iedere keer uit van alle waardes die voorkomen in tabel1 (Company).
Ik neem even aan dat je vanuit een formulier de updat voor tabel2 gaat doen, dan kan je beter met één unieke waarde deze tabel bijwerken.

Code:
INSERT INTO KlantenCompanyAdditions (company_id) VALUES (Me!company_id);
Hierbij is Me!company_id de waarde uit Company die nu op je formulier staat.
Als je de INSERT binnen een macro doet dan moet je nog wel even de "" juist zetten.
Code:
"INSERT INTO KlantenCompanyAdditions (company_id) VALUES (" & Me!company_id & ");"

Succes
Wim
 
Laatst bewerkt:
Heel erg bedankt Wim,

Ik ben weer een stapje verder. :)
Ik hou nu alleen nog een klein probleempje over.
Ik type de Company name in.
Save de record. Primary ID wordt dan idd netjes gevuld.
Start Jouw query. (via macro button die de query start)
INSERT INTO dbo_additiontabel (company_id)
VALUES (Me!company_id);

Maar dan krijg ik de melding,

Parameter waarde opgeven
Me!company_id.

:confused:

Ben wel erg lastig geloof ik. Of ik ben erg dom dat ik het niet zo 1,2,3 voor elkaar krijg

Peace,
René :thumb:
 
Heel erg bedankt Wim,

Ik ben weer een stapje verder. :)
Ik hou nu alleen nog een klein probleempje over.
Ik type de Company name in.
Save de record. Primary ID wordt dan idd netjes gevuld.
Start Jouw query. (via macro button die de query start)
INSERT INTO dbo_additiontabel (company_id)
VALUES (Me!company_id);

Maar dan krijg ik de melding,

Parameter waarde opgeven
Me!company_id.

:confused:

Ben wel erg lastig geloof ik. Of ik ben erg dom dat ik het niet zo 1,2,3 voor elkaar krijg

Peace,
René :thumb:

Ik weet niet hoe goed je bent in het maken van VBA code (gebeurtenisprocedure), maar dat is wel aan te raden op dit moment.
Je moet dan bij de gebeurtenis 'Na bijwerken' de volgende code opstarten (gaat vanzelf daar hoef je dan niets meer aan te doen)
Code:
Private Sub Form_AfterUpdate()
    Dim SQLSTR As String
    
    SQLSTR = "INSERT INTO KlantenCompanyAdditions (company_id) VALUES (" & Me!company_id & ");"
    DoCmd.RunSQL SQLSTR
End Sub
Ik neem hierbij aan dat het veld op je formulier 'company_id' heet, anders moet je dat na de Me! even aanpassen.
 
Hoi Wim,

Super bedankt voor je geduld en uitleg.
Het is idd gelukt...
Als je weet hoe het moet dan is het simpel. Mja dat is met veel dingen zo.

Nogmaals bedankt en neem een pilsje op mijn rekening.


Peace,
René :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan