Avatar billede glaede.dk Nybegynder
07. september 2010 - 09:13 Der er 6 kommentarer og
1 løsning

Problemer med foreign key

Hej,

Sidder med et stort problem. Jeg har en database hvor i jeg har nogle tabeller som gerne skulle have et One-To-Many relationship hvor jeg har en PK i min "main" tabel og så har jeg min ekstra tabel hvor jeg har en anden PK, og så har jeg det som skulle være en FK.

I følge Tools->Relationships så er der en forbindelse mellem mine to tabeller og der er et 1 tal ved min main tabel og et infinity tegn ved den anden tabel. I mit relationship er der sat flueben ved "Enforce Referential Integrity".

Umiddelbart vil jeg mene at mit relationship er i orden, men når jeg indsætter data i tabellen (via Visual Basic kode), så bliver der ikke automatisk indsat en FK, som jeg gerne vil have det..

Er der nogen som har erfaring med at skrive et stykke Visual Basic kode som automatisk indsætter PK i min hjælpe tabel når der bliver indsat noget i ens main tabel? Sådan fungere det jo normalt synes jeg.

Mvh Søren
Avatar billede neoman Novice
07. september 2010 - 09:55 #1
Kan du klistre din VBA ind?

Så vidt jeg forstår så opretter du en record i hovedtabellen, og ønsker FK i undertabellen når du opretter record(s) dér. Er det forstået korrekt?

Systemet kan - i VBA - ikke af sig selv gætte, hvilken specifik record i hovedtabellen du ønsker at pege på fra den nye record i undertabellen (og omvendt).Jeg ville tage PK fra hovedtabellen efter at den vedkommende record er oprettet (hovedtabel.PK)  og indsætte den i dataene for den nye record i undertabellen (undertabel.FK=hovedtabel.PK)
Avatar billede glaede.dk Nybegynder
07. september 2010 - 10:09 #2
Aha, se det troede jeg at VBA selve kunne finde ud af. Fungere det ikke sådan "normalt" ?

Min nuværende VBA kode:

Set db = CurrentDb()

Set myRS = db.OpenRecordset("Tabel1")

myRS.AddNew
myRS!fileLink = fileLink.Value

myRS.Update
myRS.Close

Det er sådan i hovedtræk hvordan jeg sætter data ind i "main" tabellen kaldet Tabel1. Efterfølgende gør jeg det samme ved Tabel2. Det jeg gerne vil have er altså at når der indsættes en record i Tabel1, så bliver der automatisk indsat en record i Tabel2 med det korrekte ID. Forstår du hvad jeg mener? Det troede jeg skete pr automatik.
Avatar billede glaede.dk Nybegynder
07. september 2010 - 10:10 #3
Det skal siges at jeg indsætter flere værdier i tabellen - gad bare ikke lige skrive dem alle ind da det fungere på samme princip.
Avatar billede neoman Novice
07. september 2010 - 10:21 #4
Det kan ikke ske per automatik, da systemet ikke kan vide på forhånd, hvilken record i myRS du ønsker at knytte til de nye i din Tabel2. Referential Integrity sikrer blot, at du ikke kan oprette en undertabelrecord uden en tilknyttet overtabelrecord, og ikke kan delete en overtabel record hvis der stadig findes undertabelrecords knyttet til den.

Prøv nedenstående (med lidt forbehold, da jeg er lidt rusten her:-)
Set db = CurrentDb()

Set myRS = db.OpenRecordset("Tabel1")
Set myRS2 = db.OpenRecordset("Tabel2")

myRS.AddNew
myRS!fileLink = fileLink.Value

myRS.Update

myRS2.AddNew
myRS2.FK=myRS.PK
myRS2.andredata=???
myRS2.Update

myRS2.Close

myRS.Close
Avatar billede glaede.dk Nybegynder
07. september 2010 - 10:35 #5
Så nu fik jeg det sku' alligevel til at fungere! :)

Har kun brugt ca. hele dagen i går på at løse dette problem i og med at jeg selv troede at VBA fandt ud af det, så jeg har hele tiden troet at problemet lå i database designet :)

Men super, send lige et svar. Det skal dog lige tilføjes at før det kan fungere korrekt, så skal man benytte denne linje kode som "flytter" sig til sidste nye record:

myRS.Bookmark = myRS.LastModified

Ellers så tager den ikke den sidste nye record i databasen hvilket betyder at ens PK og FK ikke stemmer overens.
Avatar billede neoman Novice
07. september 2010 - 10:36 #6
Fint (tørrer sveden af min rustne pande) :-)
Avatar billede glaede.dk Nybegynder
07. september 2010 - 10:38 #7
Hehe rusten eller ej, så fik vi løst problemet ;) Tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester