20. september 2017 - 16:08Der er
11 kommentarer og 1 løsning
Hvordan opdatere jeg data i mange til mange relation?
Hej med jer
Først og fremmest vil jeg sige at jeg er ret ny til MS Acces så bær over med mig.
Jeg har endnu, et spørgsmål som jeg håber i kan hjælpe med, og måske mange flere i fremtiden. Her kommer en beskrivelse af mit problem:
1. Jeg har to tabeller kaldet "tblBruger" og "tblSag". Disse tabeller har jeg forbundet via en joint tabel kaldet "tblBrugerSag" sådan at de danner en mange til manger relation. Idéen er at en bruger kan have mange sager, og samtidig kan en sag have mange brugere.
2. jeg har lavet en formular med to lister. I den ene liste "LstBruger" vises brugerne, som er gemt i tabel "tblBruger" . Idéen er at man vælger en bruger fra listen "LstBruger". Herefter kan man logge ind med et kodeord. Hvis kodeordet accepteres aktiveres den anden liste "LstSag", som nu viser alle de sager fra tabellen "tblSag" som er relateret til den valgte bruger fra "LstBruger" via mange til mange relationen.
3. Jeg vil gerne lave en funktion så at jeg kan oprette nye sager som er relateret til den valgte bruger i listen "LstBruger". Jeg har allerede lavet en trykknap der åbner for en ny formular, hvor jeg kan indtaste oplysninger om sagen som fx. "Sagsnummer" og "Sagsnavn".
4. Når sagens informationer er indtastet, skal man kunne trykke på en anden knap kaldet "Gem". Informationerne bliver nu gemt i tabellen "tblSag".
5. Samtidig med at der bliver gemt nye informationer i "tblSag", skal der oprettes en ny relation mellem de nye informationer og den valgte bruger i listen "LstBruger".
6. Jeg forestiller mig at dette gøres vha. Joint tabellen "tblBrugerSag", fx. hvis de nye informationer har fået ID koden 25 (Autonummer) og den valgte bruger i "LstBruger" har ID koden 3, så skal der i "tblBrugerSag" indsættes følgende data:
BrugerID = 3 (Primærnøgle relateret til "tblBruger" , [BrugerID]) SagID = 25 (Primærnøgle relateret til "tblSag", [SagID])
You can make a main form which has the "Bruger" information and a sub form where you can choose the "Sag" which you want to attach to the current "Bruger".
Try this with the example I sent in your previous question.
In the Relationships window delete the relationship between tblBrugerSag and tblSag then save the changes. Now change the data type for the field Sag in table tblBrugerSag to "Lookup Wizard ..". Follow the wizard choosing both the ID and Sag fields from the table tblSag. When the wizard is finished save the changes.
Now using the form wizard add all fields from tblBruger and also tblBrugerSag. When the wizard is finished you will end up with a form as I mentioned above.
Dette stykke kode indsætter data i "tblSag" og finder samtidig ID koden på de indsatte data. ------------------------------------------------------------------------------------------------------------- 'Insæt indtastede data i tblSag With CurrentDb With .CreateQueryDef("", _ " INSERT INTO tblSag " & _ "(Sagsnummer, Sagsnavn, Kunde, Beskrivelse)" & _ "VALUES ('" & Me.txtSagsnummer & "','" & Me.txtSagsnavn & "','" & Me.txtKunde & "','" & Me.txtBeskrivelse & "')") .Execute dbFailOnError .Close End With 'Find ID nummer på sidst intastede data LastSagID = .OpenRecordset("SELECT @@IDENTITY").Fields(0) End With -------------------------------------------------------------------------------------------------------
Herefter indsætter jeg ID nummeret fra den valgte bruger på listen og ID koden fra de sidst indsatte data i "tblSag" i "tblBrugerSag".
---------------------------------------------------------------------------------------------------- Dim LastSagID As Integer Dim ChosenBrugerID As Integer
Set frm = Forms!frmHovedMenu
'Bruger ID på valgt bruger fra liste "lstBrugere" ChosenBrugerID = frm.LstBrugere.Column(0)
'Indsæt valgt bruger fra "lstBrugere" og ID nummer på sidst intastede data i "tblSag" i "tblBrugerSag" CurrentDb.Execute " INSERT INTO tblBrugerSag(BrugerID , SagID)" & _ "VALUES ( " & ChosenBrugerID & " , " & LastSagID & " ) "
Det skal siges at jeg samtidig havde begået den fejl at lade felterne "BrugerID" og "SagID " i "tblBrugerSag", være styret af felterne i hhv. "tblBruger" og ""tblSag", således at de kun kunne antage værdier af disses primærnøgler. Dette var et eksperiment jeg tidligere havde leget med og som jeg havde glemt alt om. Det havde den indvirkning at jeg ikke kunne nøjes med kun at indtaste værdi i det ene af felterne i "tblBrugerSag". Programmet krævede at man indtastede begge ID numre før tabellen kunne gemmes, og derfor var det ikke muligt at gøre via vba kode, da et vba program i dets udfører én ting af gangen.
Thanks You should do some testing as regards to how you find the LasSagID. In a single user environment it'll probably work fine but maybe not so in a multi user environment where its possible to insert records into tables at the same time.
Are you using linked tables from an SQL Server or plain old Access tables?
Just done a very quick test so dont takle this as being 100% correct :-)
@@IDENTITY contains the ID of the last inserted record no matter which table you insert into. In most cases this will be from the same table/record you just insert but it could be another user inserting into same table or even a different table.
Inserting records directly into tables or through forms doesnt change @@IDENTITY
Synes godt om
Ny brugerNybegynder
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.