Hej Man kan t.ex. ta bort alla tidigare och lägga till de nya värdena. Typ: Ifall du vil göra en så enkel lösning som möjligt så tar du bort alla de gamla kopplingarna först, som Henke säger.Uppdatera/radera information i en kopplingstabell
Jag har ett formulär på en asp-sida som sparas ner i tabell A. Ett av fälten i formuläret är av typen <select multiple name='ts'>, värdena i select'en hämtas från tabell B. Jag har gjort en kopplingstabell, tabell C, som innehåller id (pk) från tabell A och id (pk) från tabell B.
Jag har löst det om det är ny information som ska sparas, dvs insert. Först sparar jag ner informationen till tabell A och får tillbaka ett id. Jag hämtar innehållet i ts och kör en split och for each på den och för varje innehåll så gör jag en insert till tabell C.
Däremot vet jag inte hur jag ska lösa det när man plockar upp formuläret för att editera redan sparad information. Att uppdatera tabell A är inga problem, men hur uppdaterar jag min kopplingstabell? Det kan ju finnas alternativ som var valda förra gången och dessa ska raderas från tabell C innan jag lägger till de som är valda nu ...
Hur sparar man ner detta i databasen på bästa sätt?
Jag använder MSSQL.
Tack på förhand
/LisbetSv: Uppdatera/radera information i en kopplingstabell
DELETE FROM C WHERE c.A_FK = a_ID för att sedan köra insert kommandona på nytt.
/HenkeSv: Uppdatera/radera information i en kopplingstabell
Ifall du vill göra en lösning med så få uppdateringar i databasen som möjligt så kan du göra så här:
Hämta innehållet ifrån ts och slå ihop det till en kommaseparerad sträng:
strIds = Request.Form("ts")
Använd den för att bara ta bort de kopplingar som inte ska vara kvar:
"DELETE FROM C WHERE c.A_FK = " & a_ID & " and not c.B_FK in (" & strIds & ")"
Sedan hämtar du de kopplingar som finns kvar. Därefter loopar du igenom de kopplingar som skapas och innan du lägger till en koppling så kollar du att den inte redan finns.
Tips: Det du får ifrån Request.Form är redan en lista. Du behöver inte splitta den för att få något att loopa igenom:
For each strId in Request.Formt("ts")
...
Next