Avatar billede Senpei Juniormester
20. september 2017 - 16:08 Der 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])

Jeg har forsøgt at løse det med følgende kode:

--------------------------------------------------------------------------------------------

ID = frm.LstBrugere.Column(0)

CurrentDb.Execute " INSERT INTO tblSag([Sagsnummer],[Sagsnavn],[Kunde], [Beskrivelse])" & _
"VALUES ('" & Me.txtSagsnummer & "','" & Me.txtSagsnavn & "','" & Me.txtKunde & "','" & Me.txtBeskrivelse & "')"

CurrentDb.Execute " INSERT INTO tblBrugerSag([BrugerID])" & _
"VALUES ('" & ID & "' , ) "

-----------------------------------------------------------------------------------------

Men det virker ikke. Informationer bliver godt nok lagret i "tblSag", men "tblBrugerSag" bliver ikke opdateret.

Er der nogen der ved hvad der er galt, og som kan hjælpe mig med dette problem?
Avatar billede Senpei Juniormester
20. september 2017 - 16:11 #1
Jeg glemte lige at frm refere til hovedformularen hvor listerne er placeret. Det er gjort med følgende kode.

____________________________

Dim frm As Form
Set frm = Forms!frmHovedMenu

_______________________________
Avatar billede Slettet bruger
20. september 2017 - 19:43 #2
du har jo glemt sagID i dette:

CurrentDb.Execute " INSERT INTO tblSag([Sagsnummer],[Sagsnavn],[Kunde], [Beskrivelse])" & _
"VALUES ('" & Me.txtSagsnummer & "','" & Me.txtSagsnavn & "','" & Me.txtKunde & "','" & Me.txtBeskrivelse & "')"

eller ?
Avatar billede terry Ekspert
20. september 2017 - 20:02 #3
I wouldn't use SQL to do this.

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.
Avatar billede terry Ekspert
20. september 2017 - 20:11 #4
If the "Sag" doesn't exist in the combobox you can use the NotInList event to open the form you use for creating "Sag" and add it to the combo.

Explanation in thi slink http://allenbrowne.com/ser-27-01.html
Avatar billede terry Ekspert
24. september 2017 - 20:33 #5
If there is something you dont understand then drop a comment ;-)
Avatar billede Senpei Juniormester
25. september 2017 - 13:00 #6
Tak for dit svar. Jeg fandt selv en løsning. Men tak alligevel :)
Avatar billede terry Ekspert
25. september 2017 - 14:27 #7
can you share your solution also?
And you can close question by accepting one of the comments/answers given ;-)
THX
Avatar billede Senpei Juniormester
26. september 2017 - 08:52 #8
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 & " ) "

---------------------------------------------------------------------------------------------------------------
Avatar billede Senpei Juniormester
26. september 2017 - 08:59 #9
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.
Avatar billede terry Ekspert
26. september 2017 - 09:26 #10
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?

You may have already seen this link which might help
http://www.utteraccess.com/forum/lofiversion/index.php/t2003802.html
Avatar billede terry Ekspert
26. september 2017 - 09:47 #11
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.
Avatar billede terry Ekspert
26. september 2017 - 09:52 #12
Inserting records directly into tables or through forms doesnt change @@IDENTITY
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