Avatar billede dp2001 Juniormester
12. november 2003 - 00:06 Der er 3 kommentarer og
1 løsning

Håndtering af NULL-værdier ved beregning

Ved afvikling af følgende kode får jeg:

Microsoft VBScript runtime error '800a000d'
Type mismatch

/adm_pp.asp, line 42

line 42 er:
disc = (brutto - netto)

det skyldes formentlig, at rs2("brutto") er en NULL-værdi. Jeg har forsøgt med FormatNumber men uden held.
'uddrag fra koden.....
'---------------------
strSQL = "SELECT * FROM product WHERE package = True ORDER BY prodarea_id, prod_sort"
Set rs = Conn.Execute(strSQL)

if Not rs.EOF then
Response.Write t
Do Until rs.EOF
  brutto = 0
  netto = FormatNumber(rs("price"),2)
  disc = 0
  strSQL2 = "SELECT SUM(price) AS brutto FROM product WHERE product_id IN (SELECT sub_product_id FROM package WHERE main_product_id = " & rs("product_id") & ")"
  Set rs2 = Conn.Execute(strSQL2)
  if Not rs2.EOF then
  brutto = FormatNumber(rs2("brutto"),2)
  end if
  disc = (brutto - netto)
  rs2.Close
  i = i + 1
  if i mod 2 = 0 then
  Response.Write "<tr id='bgcolor2'>"
  else
  Response.Write "<tr>"
  end if
  Response.Write "<td>" & rs("prodtext_short") & "</td>"
  Response.Write "<td align='right'>" & brutto & "</td>"
  Response.Write "<td align='right'>" & netto & "</td>"
  Response.Write "<td align='right'>" & discount & "</td>"
  Response.Write "<td align='center'><a href='adm_pp.asp?A=DETAIL&id=" & rs("product_id") & "'><img src='images/pil.gif'></a>"
  Response.Write "</tr>"
rs.MoveNext
Loop
Response.Write "</table>"
end if
Avatar billede eagleeye Praktikant
12. november 2003 - 00:09 #1
Problemet er den ikke giver et tomt recordset men en kolonne som er = Null

Så prøv at lave din if sætning omr fra:

  if Not rs2.EOF then
  brutto = FormatNumber(rs2("brutto"),2)
  end if

Til dette:

  if not isNull(rs2("brutto")) then
  brutto = FormatNumber(rs2("brutto"),2)
  end if
Avatar billede dp2001 Juniormester
12. november 2003 - 00:13 #2
Jeg får mismatch samme sted (har prøvet både med+uden FormatNumber), koden ser nu ud som følger:

strSQL = "SELECT * FROM product WHERE package = True ORDER BY prodarea_id, prod_sort"
Set rs = Conn.Execute(strSQL)

if Not rs.EOF then
Response.Write t
Do Until rs.EOF
  brutto = 0
  netto = rs("price")
  disc = 0
  strSQL2 = "SELECT SUM(price) AS brutto FROM product WHERE product_id IN (SELECT sub_product_id FROM package WHERE main_product_id = " & rs("product_id") & ")"
  Set rs2 = Conn.Execute(strSQL2)
  if not isNull(rs2("brutto")) then
  brutto = rs2("brutto")
  end if
  disc = (brutto - netto)
  rs2.Close
  i = i + 1
  if i mod 2 = 0 then
  Response.Write "<tr id='bgcolor2'>"
  else
  Response.Write "<tr>"
  end if
  Response.Write "<td>" & rs("prodtext_short") & "</td>"
  Response.Write "<td align='right'>" & brutto & "</td>"
  Response.Write "<td align='right'>" & netto & "</td>"
  Response.Write "<td align='right'>" & disc & "</td>"
  Response.Write "<td align='center'><a href='adm_pp.asp?A=DETAIL&id=" & rs("product_id") & "'><img src='images/pil.gif'></a>"
  Response.Write "</tr>"
rs.MoveNext
Loop
Response.Write "</table>"
end if
Avatar billede eagleeye Praktikant
12. november 2003 - 00:17 #3
i hvilken linje er det?
Avatar billede dp2001 Juniormester
12. november 2003 - 00:18 #4
det var: disc = (brutto - netto)

Har rettet til nedenstående nu og det virker; synes dog at du skal have point a
lligevel.

strSQL = "SELECT * FROM product WHERE package = True ORDER BY prodarea_id, prod_sort"
Set rs = Conn.Execute(strSQL)

if Not rs.EOF then
Response.Write t
Do Until rs.EOF
  brutto = 0
  netto = rs("price")
  disc = 0
  strSQL2 = "SELECT SUM(price) AS brutto FROM product WHERE product_id IN (SELECT sub_product_id FROM package WHERE main_product_id = " & rs("product_id") & ")"
  Set rs2 = Conn.Execute(strSQL2)
  if not isNull(rs2("brutto")) then
  brutto = rs2("brutto")
  end if
  disc = (FormatNumber(bruttom2) - FormatNumber(netto,2))
  rs2.Close
  i = i + 1
  if i mod 2 = 0 then
  Response.Write "<tr id='bgcolor2'>"
  else
  Response.Write "<tr>"
  end if
  Response.Write "<td>" & rs("prodtext_short") & "</td>"
  Response.Write "<td align='right'>" & FormatNumber(brutto,2) & "</td>"
  Response.Write "<td align='right'>" & FormatNumber(netto,2) & "</td>"
  Response.Write "<td align='right'>" & FormatNumber(disc,2) & "</td>"
  Response.Write "<td align='center'><a href='adm_pp.asp?A=DETAIL&id=" & rs("product_id") & "'><img src='images/pil.gif'></a>"
  Response.Write "</tr>"
rs.MoveNext
Loop
Response.Write "</table>"
end if
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