R Rodan Medlem sedan juli 2002 1 523 inlägg Frågan 1 mars 2003 16:31 #1 Hej
jag har problem med en röstnings funktion till ett community med ca 2000 medlemmar
felmeddelandet är
Feltyp:
Körningsfel i Microsoft VBScript (0x800A005E)
Ogiltig användning av Null: 'Round'
/whois.asp, line 341
det meddelandet får jag hos medlemmar som inte har några röster.
men dom som har röster får jag inget fel meddelande...
här e där den visar hur många röster man har.
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ="& Server.MapPath("databas")&";pwd=lååångt lösenord"
SQL = "SELECT * FROM members WHERE id = " &Request.QueryString("checkid")
Set RecSet = Conn.Execute(SQL)
TotalaRoster = RecSet("TotalaRoster")
Poang = RecSet("Poang2")
Poang = 0 + Poang
TotalaRoster = 0 + TotalaRoster
Snitt = Round(Poang / TotalaRoster,2)
RecSet.Close
Conn.Close
Response.Write "<b>Genomsnittligt betyg:</b> "&Snitt&" (på "&TotalaRoster&" röster)"
hoppas nån som kan hjälpa mig..
H/rodan
S Sebbe Medlem sedan jan. 2003 2 285 inlägg Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ="& Server.MapPath("databas")&";pwd=lååångt lösenord"
SQL = "SELECT * FROM members WHERE id = " &Request.QueryString("checkid")
Set RecSet = Conn.Execute(SQL)
TotalaRoster = RecSet("TotalaRoster")
Poang = RecSet("Poang2")
Poang = 0 + Poang
TotalaRoster = 0 + TotalaRoster
If NOT IsNull(Poang) Then
Snitt = Round(Poang / TotalaRoster,2)
End If
RecSet.Close
Conn.Close
Response.Write "<b>Genomsnittligt betyg:</b> "&Snitt&" (på "&TotalaRoster&" röster)"
R Rodan Medlem sedan juli 2002 1 523 inlägg nej... det funkar inte
för att spill det fixar decimal teckent
typ man får 1 röst
vanligt vis= 1
me spill = 1,00
R Rodan Medlem sedan juli 2002 1 523 inlägg va säger jag :P
snitt mena jag :P
Snitt = Round(Poang / TotalaRoster,2)
S solbulle Medlem sedan mars 2001 5 287 inlägg Kanske:
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ="& Server.MapPath("databas")&";pwd=lååångt lösenord"
SQL = "SELECT * FROM members WHERE id = " &Request.QueryString("checkid")
Set RecSet = Conn.Execute(SQL)
TotalaRoster = RecSet("TotalaRoster")
Poang = RecSet("Poang2")
Poang = 0 + Poang
TotalaRoster = 0 + TotalaRoster
If TotalaRoster > 0 Then
Snitt = Round(Poang / TotalaRoster,2)
Response.Write "<b>Genomsnittligt betyg:</b> "&Snitt&" (på "&TotalaRoster&" röster)"
Else
Response.Write "<b>Genomsnittligt betyg:</b> Du får inget betyg eftersom ingen röstat på dig!"
End If
RecSet.Close
Conn.Close
R Rodan Medlem sedan juli 2002 1 523 inlägg nu funkar det nästan :(
jag får inget felmeddelande.. men problemet är att när jag röstar på nån som inte har några poäng... så händer det inget... alltså jag skickas vidare som den ska göra men personen får inga poäng...
S solbulle Medlem sedan mars 2001 5 287 inlägg Hur ser koden som lägger till rösten ut då?
R Rodan Medlem sedan juli 2002 1 523 inlägg
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ="& Server.MapPath("databasen")&";pwd=lååååånngg lösenord"
SQL = "UPDATE members SET Poang2 = Poang2+"&Request.Form("betyg")&", TotalaRoster = TotalaRoster+1 WHERE ID = "&Request.Querystring("checkid")&""
Conn.Execute(SQL)
Conn.Close
Response.Redirect "whois.asp?checkid=" &session("id")
S Sebbe Medlem sedan jan. 2003 2 285 inlägg strSQL = "SELECT * FROM members WHERE ID = " & Request.QueryString("checkid")
Set Koll = Conn.Execute(strSQL)
If Koll("Poang2") = 0 OR IsNull(Koll("Poang2")) Then
strSQL = "UPDATE members SET Poang2 = " & Request.Form("betyg") & ", TotalaRoster = 1 WHERE ID = " & Request.Querystring("checkid")
Else
strSQL = "UPDATE members SET Poang2 = Poang2 + " & Request.Form("betyg") & ", TotalaRoster = TotalaRoster + 1 WHERE ID = " & Request.Querystring("checkid")
End If
Set Koll = Nothing
Conn.Execute(strSQL)
S solbulle Medlem sedan mars 2001 5 287 inlägg Hur var det nu? Tar för givet att Poäng2 samt TotalaRoster är av typen tal i databasen?
Tror nog att du ska ha 0 som standardvärde.
S solbulle Medlem sedan mars 2001 5 287 inlägg kanske:
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ="& Server.MapPath("databasen")&";pwd=lååååånngg lösenord"
SQL = "UPDATE members SET Poang2 = Poang2+" & cint(Request.Form("betyg")) & ", TotalaRoster = TotalaRoster+1 WHERE ID = "&Request.Querystring("checkid")&""
Conn.Execute(SQL)
Conn.Close
Response.Redirect "whois.asp?checkid=" &session("id")
R Rodan Medlem sedan juli 2002 1 523 inlägg nope.. men jag märkte nyss att förut så hade jag satt 0 på poäng,totaltröster men eftersom communityn växte..så har andra (nya )halvan inte en nolla så det är tomt... där ligger problemet
@nders Medlem sedan juni 2000 32 967 inlägg Om jag vore du hade jag sett till att det inte fanns några nullvärden i poäng-fältet (och ev. andra fält du gör liknande beräkningar / uppdateringar på).
UPDATE members SET Poang2 = 0 WHERE Poang2 IS NULL
Sedan är det bara att köra update-satser som räknar upp.
Mvh,
S solbulle Medlem sedan mars 2001 5 287 inlägg Men @nders... om man sätter 0 som defaultvärde i access så måste det väl gå utan en sån modifikation? Eller?
@nders Medlem sedan juni 2000 32 967 inlägg Jo, om man sätter 0 som defaultvärde så gäller det för alla nya poster. Men om man har en drös poster som redan har nullvärde, så förändras inte de i och med att man sätter defaultvärdet, utan dessa måste uppdateras till 0 med en SQL-fråga.
Mvh,
S solbulle Medlem sedan mars 2001 5 287 inlägg Ah, det var så du menade. Jo det förstår jag iofs att det blir så.
Jag hakade iofs upp mig på att Rodan skrev att den nya halvan inte hade en nolla.