webForumDet fria alternativet

uppdatera boolean-fält

ASPur ASP

11 svar · 388 visningar · startad av force

Medlem sedan apr. 200425 inlägg
Frågan#1

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

Medlem sedan apr. 200425 inlägg
#2

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 :)

Medlem sedan apr. 200425 inlägg
#3

ingen ?

Medlem sedan feb. 200269 inlägg
#4
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
Medlem sedan apr. 200425 inlägg
#5

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. :)

Medlem sedan feb. 200269 inlägg
#6

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.

Medlem sedan apr. 200425 inlägg
#7

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 :)

Medlem sedan feb. 200269 inlägg
#8

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

Medlem sedan feb. 200269 inlägg
#9

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.

Medlem sedan apr. 200425 inlägg
#10

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å ?

Medlem sedan feb. 200269 inlägg
#11

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.

Medlem sedan apr. 200425 inlägg
#12

Grymt!
Nu funkar allt klockrent,
Tack så mycket för hjälpen :)

139 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)