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?
Uppdatera primärnyckel
7 svar · 412 visningar · startad av PlayerOne
Kan du inte bryta förlovningen för en stund?
------------------
Gunnar Liljas - webbutvecklare
Leon Reklambyrå AB
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
Har nu stött på ytterligare ett problem.
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.
???
[Redigerat av PlayerOne den 12 jul 2000]
Byt ut:
Response.Write "<option>" & Kategori
Mot...
Response.Write "<option value='<%=RecSet("KatId")%>'>" & Kategori
Och så tar du bara bort det id:t i SQL satsen med:
SQLStmt = "DELETE FROM Kategorier WHERE KatId = '" & Request.Form("kategori") & "'"
------------------
Vides motto: Ju fler saker man tycker är roligt, desto roligare har man
www.webeye.nu
[Redigerat av Vide den 12 jul 2000]
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
Response.Write "<option value='<%=RecSet("KatId")%><%'>" & Kategori...
men det ser ju inte riktigt rätt ut?
Ah, såklart:
Response.Write "<option value='" & RecSet("KatId") & "'>" & Kategori...
------------------
Den som bär kläder har en anledning till detta...
www.webeye.nu
Kungen!