Jag har en tabell med ett Id (datatyp varchar) som primärnyckel, som vidare är sekundärnyckel i en annan tabell. Kan jag på nåt sätt uppdatera primärnyckeln, alltså byta namn på Id?
Försöker jag byta namn på primärnyckeln strider det mot referensintegriteten, vilket är helt i sin ordning eftersom jag har relaterade poster i den andra tabellen. Jag måste alltå på nåt sätt uppdatera båda tabellerna samtidigt, om det går?
Mm, fast jag har ändrat på databasdesignen nu, jag hade inte nån bra lösning förut.
Id är kvar som primärnyckel respektive sekundärnyckel men nu som räknare. I tabellen där Id är primärnyckel har jag lagt till ett fält, IdNamn, där jag har ett vettigt namn på Id. Då kan jag byta IdNamn hur jag vill eftersom tabellerna är kopplade med Id. I Aspkoden kör jag med "Inner Join On Id" och jag kan undvika att användaren kommer i kontakt med Id utan endast med IdNamn.
Vet inte varför jag inte gjorde så här från början, jag hade nog inte riktigt koll på SQL:en i ASP
Jag har en sida där man ska kunna ta bort kategorier ur en dropdownmeny.
<%
RS = "SELECT * FROM Kategorier"
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open RS, Connection, adOpenStatic, adLockOptimistic
%>
<form action="deletekat.asp" method="post" name=FrmDelete>
<select name="Kategori">
<%
RecSet.MoveFirst
Do Until RecSet.EOF
Kategori=RecSet("KatNamn")
Response.Write "<option>" & Kategori
RecSet.MoveNext
Loop
%>
</select>
På nästa sida, deletekat.asp, ska sqlsatsen exekveras
<%
SQLStmt = "DELETE FROM Kategorier WHERE KatId = " & "'" & Request.Form("???") & "'"
'SQLStmt = "DELETE FROM Kategorier WHERE KatNamn = " & "'" & Request.Form("Kategori") & "'"
'SQLStmt = "DELETE FROM Kategorier WHERE KatId = " & "'" & Request.Form("Kategori") & "'"
Connection.Execute(SQLStmt)
%>
Problemet är alltså hur jag ska ange vilken post som ska raderas. Ett sätt är som den första bortkommentarade raden, men det är inte bra. Jag vill använda mig av primärnyckeln för att ange vilken post som ska tas bort. KatNamn skulle ju kunna innehålla dubletter. På nåt sätt måste jag skicka med KatId från den första sidan men jag vet inte hur. Ett annat sätt är ju att byta ut RecSet("KatNamn") mot RecSet("KatId") på första sidan och använda den andra borkommenterade raden. Men då kommer man inte att se kategorinamnen i dropdownmenyn utan bara Idnummret.
???
Just det! Tänkte inte på att man kan lägga till ett value.
En annan grej bara som jag också har undrat förut, kan man ta bort <% %> runt RecSet("KatId") eftersom det redan är inom aspkod? Annars får det bli typ