forceMedlem sedan apr. 200425 inlägg Halo.
Jag har ett fält i min tabell som heter "betalda" och det är booleanskt, ja/nej.
Jag läser in alla rader med detta (kollar av fältet betalda och kryssar i en av två radio-knappar):
sql = "select * from hours where project_id=" & request.querystring("id") & " ORDER BY datum DESC"
rs.open sql,conn,3,1
do while not rs.eof
...
<input type="radio" name="<%response.write rs("ID_hours")%>" value="ja" <%If rs("betalda") = true then
response.write "checked"
End if%>>
<input type="radio" name="<%response.write rs("ID_hours")%>" value="nej" <%If rs("betalda") = false then
response.write "checked"
End if%>>
...
<%
rs.moveNext
loop
rs.close
%>
Alltså, beroende på vad project_id är sorterar den ut olika fält och skriver ut (tillsammans med lite annat som jag inte skrivit) radio-knapparna och bockar i dom rätt.
Detta funkar bra.
Nu till kruxet. :)
Jag vill alltså kunna göra ändringar, kryssa i och ur radio-knappar och sedan uppdatera min tabell och skriva in de nya värdena i de fälten som jag ändrat.
(De andra värdena, såsom datum osv ska vara samma som innan, endast fältet "betalda" ska ändras.)
Nån som har något bra förslag ?
cheers / force
forceMedlem sedan apr. 200425 inlägg Kanske borde tillägga att detta är inne i ett formulär som börjar:
<form name="betaldatimmar" action="betalda_timmar_utfor.asp" method="post">
Vet alltså inte riktigt hur jag ska skriva i betalda_timmar_utfor.asp för att skriva om ja/nej-fältet betalda beroende på hur respektive radio-knapp är markerad.
Vet att jag ska använda update, men inte hur...har bara gjort edit-funktion för en rad förut, inte för många som detta då blir.
Hjälphjälp :)
CmartMedlem sedan feb. 200269 inlägg name="<%response.write rs("ID_hours")%>"
Måste du ha det så? Dvs. du plockar ut namnet ur databasen. Om du ändrar det till name="id_hours" istället?
Jag tror du vill ha namnet på tabellen här?
Om det är så skulle du kunna köra nedanstående:
(ev. ska du skicka med "project_id" också?)
For i=1 to Request.Form("id_hours").Count
id_hours=CStr(Request.Form("id_hours")(i))
if id_hours = "ja" then
id_hours = true
else
id_hours = false
end if
strSQL="UPDATE hours SET" & 'din sqlfråga här
Database.Execute(strSQL)
next
Database.Close
Set Database=nothing
forceMedlem sedan apr. 200425 inlägg Jo, det måste jag nog göra, annars vet ju inte asp-sidan vilka radioknappar som ska vara ikryssade och inte.
Hmhm...ID_hours är primärnyckeln/räknaren...project_id är lika på alla som visas.
Alltså visas x antal rader som har samma project_id...och deras primärnyckel är ID_hours.
Och kolumnen betalda är ja/nej (beroende på detta kryssas en av radioknapparna i i förväg), alltså måste jag väl ge varje radioknapp ett individuellt namn, så man vet vilken som är vilken ?
Så den vet vilken ID_hours-rad som ska ändras när jag byter radioknapp på någon av dom...eller har jag fattat det fel ?
Jag blir yr. :)
CmartMedlem sedan feb. 200269 inlägg Då lägger du in en input hidden som skickar med ID_hours för varje loop:
<input type="hidden" name="ID_hours" value="<%=rs("ID_hours")%>">
Namnet på radioknapparna blir då ex. name="betalda"
Och koden i betalda_timmar_utfor.asp blir:
For i=1 to Request.Form("id_hours").Count
betalda = CStr(Request.Form("betalda")(i))
id_hours=CStr(Request.Form("id_hours")(i))
if betalda = "ja" then
betalda = true
else
betalda = false
end if
strSQL="UPDATE hours SET betalda='"&betalda&"' WHERE id_hours = "&id_hours&";"
Database.Execute(strSQL)
next
Database.Close
Set Database=nothing
Då går den igenom rad för rad där id_hours stämmer överens och uppdaterar. Hoppas det skall funka i alla fall.
forceMedlem sedan apr. 200425 inlägg Tack för svaret ! :)
Tyvärr så fick jag det inte att funka dock...fick detta meddelande:
- - -
Request object error 'ASP 0105 : 80004005'
Index out of range
betalda_timmar_utfor.asp, line 23
An array index is out of range.
- - -
Funderade på en grej du skrev förresten...det här:
- Namnet på radioknapparna blir då ex. name="betalda"
Radioknapparn får väl namnet ID_hours...alltså primärnyckeln, vilken rad det är i tabellen...
Det använder jag iaf för att få rätt radioknapp ikryssad på formulär-sidan, när den känner av databasen:
<input type="radio" name="<%response.write rs("ID_hours")%>" value="ja" <%If rs("betalda") = true then
response.write "checked"
End if%>>
Och en likadan för nej oxo, som jag skrev tidigare.
Hmhm, det var krångligt det här :)
CmartMedlem sedan feb. 200269 inlägg Vad jag har förstått så är det fältet "betalda" i databasen som skall uppdateras med true eller false. DU använder rs("betalda") för att få reda på om den ska vara "checked" eller inte. Om du använder name=rs("ID_hours") kommer du få:
name=1
name=2
name=20
osv...
Du måste nog skicka med ID_hours som en egen input hidden
CmartMedlem sedan feb. 200269 inlägg Du har rätt. Min kod funkar icke med radio-knappar men det går om du använder ex. select-tag med option-tags.
Om du vill ha radio-knappar så gör du precis som du gjort inputtaggarna men lägger även med:
<input type="hidden" name="ID_hours" value="<%=rs("ID_hours")%>">
Namnet på radioknappen blir då densamma som "value" för input hidden-tagen
Koden i betalda_timmar_utfor.asp blir:
For i=1 to Request.Form("id_hours").Count
id_hours=CStr(Request.Form("id_hours")(i))
betalda = CStr(Request.Form(id_hours))
if betalda = "ja" then
betalda = true
else
betalda = false
end if
strSQL="UPDATE hours SET betalda='"&betalda&"' WHERE id_hours = "&id_hours&";"
conn.Execute(strSQL)
next
conn.Close
Set conn=nothing
Vet inte om det är den smidigaste lösningen som går att uppbringa men den funkar i alla fall.
forceMedlem sedan apr. 200425 inlägg Perfekt, nu funkar det...dock en grej som strular.
Jag körde på din kod här ovan, och istället för att skicka till databasen med sql-satsen så skrev jag:
response.write id_hours & " = " & betalda
response.write "<br>"
Då fick jag helt rätt värden, alltså:
51 = False
49 = True
48 = True
osv.
Dock när jag ska köra in till databasen så får jag detta:
- - -
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
- - -
Vad kan det bero på ?
CmartMedlem sedan feb. 200269 inlägg Hittade ett fel, så har ska det se ut:
strSQL="UPDATE hours SET betalda="&betalda&" WHERE id_hours = "&id_hours&";"
Lite mindre "fnuttar" kring betalda där.
forceMedlem sedan apr. 200425 inlägg Grymt!
Nu funkar allt klockrent,
Tack så mycket för hjälpen :)