Avatar billede kpl Nybegynder
12. marts 2003 - 01:17 Der er 43 kommentarer og
1 løsning

Problem med at tælle indhold

Jeg har dette script (to jeg prøver at sætte sammen) som skal tælle hvor mange artikler der ligger i bestemte områder (kategorier) - problemet er at der vises at der er (0) i alle kategorier - selvom der ligger flere.

Jeg tillader mig at indsætte filen her:

<!--#include file="config.asp"-->

<%
Function SQLVal(pvValue)
  Dim sTemp

  Select Case VarType(pvValue)
      Case 0, 1:
        SQLVal = "NULL"
      Case 2, 3, 4, 5, 6:
        SQLVal = "" & pvValue
      Case 8: 'String
        sTemp = Trim(pvValue)
        On Error Resume Next
        SQLVal = "" & CDbl(sTemp)
        If Err.Number <> 0 Then
            Err.Clear
            SQLVal = "NULL"
        End If
      Case 11:
        SQLVal = "" & Cint(pvValue)       
      Case Else
        SQLVal = "NULL"
  End Select
End Function


gsConnect = "Data Source=d:\home\minwebside\db\tekster.mdb;Provider=Microsoft.Jet.OLEDB.4.0;"

Set GobjConnect = server.createobject("ADODB.Connection")
GobjConnect.open gsConnect

cSQL = "Select ID, skribent, katid FROM artikler ORDER BY ID "
Set Crs = GobjConnect.Execute(cSQL) 


Function CountAds(katid)
    caSQL = ""
    caSQL = caSQL & "SELECT COUNT(*) as Total FROM artikler WHERE katid  = " & SQLVal(katid)
    Set rs = GobjConnect.Execute(caSQL)
        CountAds = rs.Fields("Total")
    rs.Close
    Set rs = Nothing
End Function




Function Showlinks

Set objRec = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM kategorier Order by navn asc"
objRec.Open SQL, objCon

                %>

<div align="center">
 
<center>
 
<table border="0" width="487" cellspacing="5" cellpadding="0">
<tr>

<% Do While NOT objRec.EOF %>


<%if not objRec.EOF then%>
<TD ALIGN=LEFT  WIDTH="165" bgcolor="#FFFFFF">
<b><a class=5 href="/artikler/artikler.asp?kat=<%=objRec("katid")%>">
<p align="left"><img border="0" src="functi8.gif">&nbsp;<%=objRec("navn")%></a> </b>

<%   
Response.Write(" <SMALL>(" & CountAds(Crs.Fields("ID")) & ")</SMALL>")
%>

</TD>
<%objRec.movenext
end if   
%>

<%if not objRec.EOF then%>
<TD ALIGN=LEFT  WIDTH="165" bgcolor="#FFFFFF">
<b><a class=5 href="/artikler/artikler.asp?kat=<%=objRec("katid")%>">

<p align="left"><img border="0" src="functi8.gif">&nbsp;<%=objRec("navn")%></a> </b>
<%   
Response.Write(" <SMALL>(" & CountAds(Crs.Fields("ID")) & ")</SMALL>")
%>

</TD>
<%objRec.movenext
end if   
%>

<%if not objRec.EOF then%>
<TD ALIGN=LEFT  WIDTH="152" bgcolor="#FFFFFF">
<b><a class=5 href="/artikler/artikler.asp?kat=<%=objRec("katid")%>">
<p align="left"><img border="0" src="functi8.gif">&nbsp;<%=objRec("navn")%></a></b>
<%   
Response.Write(" <SMALL>(" & CountAds(Crs.Fields("ID")) & ")</SMALL>")
%>

</TD>
<%objRec.movenext
end if   
%>


</tr>

<%

loop
%>
</table>
</center>
</div>
<% end function %>
Avatar billede rasmusmoller Nybegynder
12. marts 2003 - 03:26 #1
Har du prøvet at response.write caSQL efter følgende linje:
caSQL = caSQL & "SELECT COUNT(*) as Total FROM artikler WHERE katid  = " & SQLVal(katid)

Og efterfølgende prøve det mod din database?
(Det kunne jo være at SQLVal() returnerede noget uventet...)
Avatar billede kpl Nybegynder
12. marts 2003 - 08:47 #2
Når jeg gør dette får jeg dette svar:

SELECT COUNT(*) as Total FROM artikler WHERE katid = 47 (0)

Og det skrives der ved siden af alle kategorier. Så den kalder altså alle kategorier for katid=47 - dog er selve navnet på kategorierne fint nok.

Hvad kan jeg gøre nu? Findes der en anden måde at tælle posterne på?
Avatar billede horsmark Nybegynder
12. marts 2003 - 09:02 #3
SELECT COUNT(katid) as Total FROM artikler WHERE katid = 47 (0)

response.write objRS("Total")
Avatar billede kpl Nybegynder
12. marts 2003 - 09:09 #4
Hej Horsmark
Denne linie: SELECT COUNT(*) as Total FROM artikler WHERE katid = 47 (0)
var svaret når jeg lavede en response.write

Jeg forstår ikke dit forslag. Skal jeg indsætte det du skriver?
Avatar billede horsmark Nybegynder
12. marts 2003 - 09:11 #5
er du sikker på at katid er gemt som tal i db´en?
Avatar billede horsmark Nybegynder
12. marts 2003 - 09:11 #6
Hvilket resultat giver dette: SELECT COUNT(*) as Total FROM artikler
Avatar billede kpl Nybegynder
12. marts 2003 - 09:12 #7
Ja der er det. Og lige nu ligger der to artikler under katid=7
og alligevel vises der kun (0)
Avatar billede horsmark Nybegynder
12. marts 2003 - 09:13 #8
Hvilket resultat giver dette: SELECT COUNT(*) as Total FROM artikler
Avatar billede kpl Nybegynder
12. marts 2003 - 09:14 #9
Så får jeg dette:

Microsoft VBScript compilation error '800a0409'

Unterminated string constant

/artikler/functions.asp, line 39

caSQL = caSQL & "SELECT COUNT(*) as Total FROM artikler
-------------------------------------------------------^
Avatar billede horsmark Nybegynder
12. marts 2003 - 09:17 #10
du mangler et " i enden af linien

caSQL = caSQL & "SELECT COUNT(*) as Total FROM artikler"
Avatar billede kpl Nybegynder
12. marts 2003 - 09:20 #11
Så får jeg det svar at der ligger (3) artikler i alle kategorierne. (Der ligger kun 2 artikler i 1 kategori - alle andre kategorier er tomme) - Mærkligt ikke?
Avatar billede kpl Nybegynder
12. marts 2003 - 09:21 #12
...men der der ligger ialt 3 artikler i databasen. Måske er det det der hentes/tælles?
Avatar billede horsmark Nybegynder
12. marts 2003 - 09:28 #13
har du mulighed for at kigge ned i databasen rent fysisk og se hvad rækkerne indeholder
Avatar billede kpl Nybegynder
12. marts 2003 - 09:28 #14
Rækkerne indeholder:
ID
Skribent
Dato
KatID
Tekst
Avatar billede horsmark Nybegynder
12. marts 2003 - 09:29 #15
Hvis du har opsat db´ens katid til at den gerne må indeholde null values så kan det være der ligger rækker uden katid...
Avatar billede kpl Nybegynder
12. marts 2003 - 09:29 #16
Og jeg vil som sagt bare have den til at vise hvormange gange samme KatID gentages - så man kan se hvor mange artikler der ligger i en given kategori
Avatar billede horsmark Nybegynder
12. marts 2003 - 09:30 #17
SELECT COUNT(*) as Total FROM artikler WHERE katid = 1

skulle gerne give 2
Avatar billede kpl Nybegynder
12. marts 2003 - 09:30 #18
KatID er Datatype number
Avatar billede horsmark Nybegynder
12. marts 2003 - 09:33 #19
SELECT COUNT(*) as Total FROM artikler WHERE katid = 1

Giver dette 2?
Avatar billede kpl Nybegynder
12. marts 2003 - 09:36 #20
WHERE katid = 1  (så skrives der antallet af KatID 1 ud for alle kategorier)

WHERE katid = 7    (så skrives antallet af KatID 7 ud for alle kategorier

antallet af KatID 21  (så skrives antallet af KatID 21 ud for alle kategorier
Avatar billede horsmark Nybegynder
12. marts 2003 - 09:37 #21
Er problemet så ikke løst?
Avatar billede kpl Nybegynder
12. marts 2003 - 09:40 #22
...Nej - fordi jeg skal have talt og vis hvormange artikler der ligger i databasen..
Du kan evt. se min side her: www.mindbodysoul.dk/artikler

Og der ligger 2 artikler i kategorien: Clairvoyance KatID7
Og 1 artikel i kategorien: Akupunktur KatID 1

Alle andre kategorier er tomme?
Avatar billede horsmark Nybegynder
12. marts 2003 - 09:42 #23
hmm der ligger da 1 artikel i hver kategori på www.mindbodysoul.dk/artikler ?
Avatar billede kpl Nybegynder
12. marts 2003 - 09:43 #24
Nej det er det der vises i (0), men det er forkert
Avatar billede kpl Nybegynder
12. marts 2003 - 09:45 #25
- sorry Nej det er det der vises i (), men det er forkert.
Avatar billede horsmark Nybegynder
12. marts 2003 - 09:48 #26
mærkligt at der vises at der er (1) artikel selvom der ingen er... hmm fejlen er andetsteds...
Avatar billede kpl Nybegynder
12. marts 2003 - 09:50 #27
Jo, men skal denne ikke ændres? Denne sidder inde nu:
caSQL = caSQL &  "SELECT COUNT(*) as Total FROM artikler WHERE katid = 1"


Den skal vel ændres tilbage til:
caSQL = caSQL & "SELECT COUNT(*) as Total FROM artikler WHERE katid  = " & SQLVal(katid)
Avatar billede horsmark Nybegynder
12. marts 2003 - 09:52 #28
jepper prøv det og så kan jeg lige se output igen
Avatar billede kpl Nybegynder
12. marts 2003 - 09:52 #29
..Dette har jeg gjort nu og så vises der (0) ud for alle kategorier.

- Jeg er ved at få grå hår...
Avatar billede tomh Nybegynder
12. marts 2003 - 10:02 #30
I denne linie:

Response.Write(" <SMALL>(" & CountAds(Crs.Fields("ID")) & ")</SMALL>")

Er det så ikke katID, du skal spørge på?
Avatar billede kpl Nybegynder
12. marts 2003 - 10:04 #31
Tomh - det har du ret i, men skrives der bare (1) ud for alle kategorier - selvom de er tomme.
Avatar billede tomh Nybegynder
12. marts 2003 - 10:04 #32
Altså:
Response.Write(" <SMALL>(" & CountAds(Crs.Fields("katid")) & ")</SMALL>")
Avatar billede tomh Nybegynder
12. marts 2003 - 10:05 #33
Men løkken løber jo gennem et andet recordset?

<%if not objRec.EOF then%> ...
Avatar billede kpl Nybegynder
12. marts 2003 - 10:06 #34
Skal jeg så fjerne:  <%if not objRec.EOF then%>

helt væk?
Avatar billede tomh Nybegynder
12. marts 2003 - 10:06 #35
Der bliver aldrig lavet .movenext op Crs-recordsettet?

Undskyld at disse kommentarer ikke blev samlet til 1!
Avatar billede tomh Nybegynder
12. marts 2003 - 10:07 #36
Næ prøv at ændre:

Response.Write(" <SMALL>(" & CountAds(Crs.Fields("katid")) & ")</SMALL>")

til

Response.Write(" <SMALL>(" & CountAds(objRac.Fields("KatID")) & ")</SMALL>")
Avatar billede kpl Nybegynder
12. marts 2003 - 10:08 #37
Så hvad kan jeg gøre? (Jeg er absolut nybegynder)
Avatar billede tomh Nybegynder
12. marts 2003 - 10:09 #38
Sorry: objRac i ovenstående er selvfølgig objRec
Avatar billede horsmark Nybegynder
12. marts 2003 - 10:09 #39
kpl>> prøv dette

Function CountAds(katid)
    caSQL = "SELECT COUNT(*) as Total FROM artikler WHERE katid  = " & SQLVal(katid)
    Set rs = GobjConnect.Execute(caSQL)
    CountAds = rs("Total")
    rs.Close
    Set rs = Nothing
End Function
Avatar billede kpl Nybegynder
12. marts 2003 - 10:11 #40
Tomh - Det virkede! Så kører det - Tusinde tak

- Horsmark - Mange tak for dit enorme enagagement!
Avatar billede tomh Nybegynder
12. marts 2003 - 10:13 #41
Jeg er glad for at kunne hjælpe.
Avatar billede horsmark Nybegynder
12. marts 2003 - 10:13 #42
anytime... learning by learning... så om sige ;-)
Avatar billede kpl Nybegynder
12. marts 2003 - 10:17 #43
tomh hvad gør jeg med points - vil du lægge et svar?
Avatar billede tomh Nybegynder
12. marts 2003 - 13:38 #44
Oh - der er jo lige det med points, ja. Hermed er svaret på ovenstående :-)
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