Avatar billede borsk Nybegynder
29. oktober 2005 - 23:55 Der er 25 kommentarer og
1 løsning

Udregn gennemsnit fra DB

Hejsa

Hvad går der lige galt her. (Jeg er ikke ASP expert, en anden har lavet det)

Meningen er at den skal se hvor mange ratings der er på Produktet og dividere det med den samlede sum så man får et gennemsnit.

Det ser bare ud til at den kun viser det sidste tal og dividere med 1

<%
strSQL = "select * from rating WHERE produkt='" & Pid & "'"
set rs = Conn.execute(strSQL)
if NOT rs.EOF then
do until rs.EOF
count=0
count=count+1
rating=0
rating = rs("rate")+rating
rs.MoveNext
Loop
genn = "" & formatnumber("" & rating/count & "", 0, 0) & ""
%>
Avatar billede softspot Forsker
29. oktober 2005 - 23:59 #1
Prøv med

strSQL = "SELECT AVG(rate) AS avgRate FROM rating WHERE produkt='" & pid & "'"
set rs = Conn.Execute(strSQL)
if not rs.eof then
  rating = rs("avgRate")
end if
rs.close
Avatar billede borsk Nybegynder
30. oktober 2005 - 00:08 #2
hvad skal jeg så skrive for at få det vist.
Før brugte jeg <%="" & genn & ""%>

er det så bare <%="" & rating & ""%>  ?
Avatar billede softspot Forsker
30. oktober 2005 - 00:11 #3
Ja, det er korrekt. Du skal muligvis lave en formatNumber på den, men det ser du nok når du udskriver tallet...
Avatar billede borsk Nybegynder
30. oktober 2005 - 00:12 #4
den laver fejl, kan det være fordi at feltet i databasen er et memo felt ? og ikke et tal felt.
Avatar billede borsk Nybegynder
30. oktober 2005 - 00:15 #5
ahh du siger det med formatnumber, det er vel så den laver det den modtager om til et tal. Men hvordan skal jeg så skrive denne linie --> rating = rs("avgRate")
Avatar billede cpufan Juniormester
30. oktober 2005 - 00:19 #6
ja softspots virker......

og din kode skal ændres til dette for at virker

<%
strSQL = "select * from rating WHERE produkt='" & Pid & "'"
set rs = Conn.execute(strSQL)
if NOT rs.EOF then
count=0 'er flyttet
rating=0 ' er flyttet
do until rs.EOF

count=count+1

rating = rs("rate")+rating
rs.MoveNext
Loop
genn = "" & formatnumber("" & rating/count & "", 0, 0) & ""
%>
Avatar billede softspot Forsker
30. oktober 2005 - 00:20 #7
Nej, rating er et tal når det kommer fra databasen, så formatNumber sørger blot for at tallet bliver omformet til noget præsentabelt (med komma osv.).

Du kan f.eks. skrive koden således:

strSQL = "SELECT AVG(rate) AS avgRate FROM rating WHERE produkt='" & pid & "'"
set rs = Conn.Execute(strSQL)
if not rs.eof then
  rating = formatNumber(rs("avgRate"),0,0)
else
  rating = "0,00"
end if
rs.close
Response.write rating
Avatar billede borsk Nybegynder
30. oktober 2005 - 00:28 #8
Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D)
Typer stemmer ikke overens: 'formatNumber'

Den siger så fejl i linie 130, men der er kun 118 linier i scriptet
Avatar billede borsk Nybegynder
30. oktober 2005 - 00:32 #9
og ved cpufan's script siger den.
Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A040E)
'Loop' uden 'Do'
Avatar billede softspot Forsker
30. oktober 2005 - 00:34 #10
Hmmm... prøv:

strSQL = "SELECT AVG(rate) AS avgRate FROM rating WHERE produkt='" & pid & "'"
set rs = Conn.Execute(strSQL)
if not rs.eof then
  rating = formatNumber(cdbl(rs("avgRate")),0,0)
else
  rating = "0,00"
end if
rs.close
Response.write rating
Avatar billede borsk Nybegynder
30. oktober 2005 - 00:37 #11
Null er brugt ugyldigt: 'cdbl'
Avatar billede cpufan Juniormester
30. oktober 2005 - 00:42 #12
<%
strSQL = "select * from rating WHERE produkt='" & Pid & "'"
set rs = Conn.execute(strSQL)
do while NOT rs.EOF then
count=0 'er flyttet
rating=0 ' er flyttet
do until rs.EOF

count=count+1

rating = rs("rate")+rating
rs.MoveNext
Loop
genn = "" & formatnumber("" & rating/count & "", 0, 0) & ""
%>
Avatar billede softspot Forsker
30. oktober 2005 - 00:43 #13
cpufan >> der er stadig to do's men kun en loop...
Avatar billede borsk Nybegynder
30. oktober 2005 - 00:44 #14
yep fejl,

En sætning var ventet
line 129, column 20
do while NOT rs.EOF then
Avatar billede softspot Forsker
30. oktober 2005 - 00:50 #15
30/10-2005 00:37:31 >> har du brugt koden som jeg har skrevet den? Kan du evt. prøve at vise den kode du har indtil nu?
Avatar billede borsk Nybegynder
30. oktober 2005 - 00:50 #16
<%
strSQL = "select * from rating WHERE produkt='" & Pid & "'"
set rs = Conn.execute(strSQL)
do while NOT rs.EOF then
count=0 'er flyttet
rating=0 ' er flyttet
do until rs.EOF

count=count+1

rating = rs("rate")+rating
rs.MoveNext
Loop
genn = "" & formatnumber("" & rating/count & "", 0, 0) & ""
%>
Avatar billede softspot Forsker
30. oktober 2005 - 00:50 #17
Er der rent faktisk data i tabellen?
Avatar billede softspot Forsker
30. oktober 2005 - 00:51 #18
Er det den kode du bruger nu? Prøv at skifte den ud med den jeg har vist (det skal fungere, om ikke andet hvis der er data i tabellen).
Avatar billede borsk Nybegynder
30. oktober 2005 - 00:58 #19
Fejl : Der opstod en Microsoft VBScript-kørselsfejl (0x800A005E)
Null er brugt ugyldigt: 'cdbl'

Den her bruger jeg:
<%
strSQL = "SELECT AVG(rate) AS avgRate FROM rating WHERE produkt='" & pid & "'"
set rs = Conn.Execute(strSQL)
if not rs.eof then
  rating = formatNumber(cdbl(rs("avgRate")),0,0)
else
  rating = "0,00"
end if
rs.close
Response.write rating
%>

Den her henter indholdet

<%="" & rating & ""%>

Det her er lidt længere nede, kan det forstyrre ?


<%
end if
rs.Close
set rs=nothing

rsP.MoveNext
Loop
end if
rsP.Close
set rsP=nothing

Conn.Close
set Conn=nothing
%>
Avatar billede softspot Forsker
30. oktober 2005 - 01:04 #20
Hmmm... det sidste burde ikke forstyrre, men det kommer an på hvordan koden ser ud omkring udtrækket af gennemsnittet, for løkker skal jo lukkes korrekt af osv.

Det eneste jeg kan garantere er at den kode jeg har vist skal erstatte al den kode du startede med at vise. I øvrigt kan vi lige prøve at håndtere den der null-fejl du får. Det kan du måske klare på denne måde:

<%
strSQL = "SELECT AVG(rate) AS avgRate FROM rating WHERE produkt='" & pid & "'"
set rs = Conn.Execute(strSQL)
if not rs.eof then
  if not isnull(rs("avgRate")) then
    rating = formatNumber(cdbl(rs("avgRate")),0,0)
  else
    rating = "0"
  end if
else
  rating = "0"
end if
rs.close
Response.write rating
%>


Bemærk at linierne

Response.write rating

og

<%=rating%>

betyder det samme for scriptfortolkeren.
Avatar billede softspot Forsker
30. oktober 2005 - 01:05 #21
Men igen, prøv lige at fortæl mig om der overhovedet er data i tabellen...
Avatar billede borsk Nybegynder
30. oktober 2005 - 01:18 #22
Den sidste virker !!
Avatar billede borsk Nybegynder
30. oktober 2005 - 01:18 #23
og der er data i tabellen :)
Avatar billede borsk Nybegynder
30. oktober 2005 - 01:41 #24
send forresten lige et svar
Avatar billede softspot Forsker
30. oktober 2005 - 02:01 #25
Godt du kom igennem! Jeg kunne ikke rigtig se hvad der skulle være galt, for AVG burde returnere et tal, men NULL-værdien må have kommet fordi der ikke var nogen rækker der matchede din WHERE-clause...
Avatar billede softspot Forsker
02. november 2005 - 13:45 #26
Tak for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester