Avatar billede psyclown Nybegynder
28. april 2002 - 15:26 Der er 17 kommentarer og
1 løsning

et lille problem

Er der en der måske kan hjælpe mig med mit lille problem her.
Mit problem er hvis jeg laver et nyt topic, så er det meningen at den skal tælle hvor mange topic der er i hvert forum på forum.asp, men den begynder ikke at tælle før at der er oprette et reply i det forum og det er det samme med LastEntryDate og LastEntryUser.

her er koden:
<%
    Do While Not rsForum.EOF
        ForumID = CInt(rsForum("ID"))

        Conntemp = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../../db/clan_ld_db_new.mdb")
        Set rsThread = Server.CreateObject("ADODB.Recordset")
        strSQL = "SELECT TOP 1 F_Replies.R_Date, Users.Alias, Users.UsrID "
        strSQL = strSQL & "FROM (Forums INNER JOIN F_Threads ON Forums.ID = F_Threads.FID) INNER JOIN (Users INNER JOIN F_Replies ON Users.UsrID = F_Replies.UsrID) ON F_Threads.TID = F_Replies.TID "
        strSQL = strSQL & "WHERE F_Threads.FID = " & ForumID & " "
        strSQL = strSQL & "ORDER BY F_Replies.R_Date DESC;"
        rsThread.Open strSQL, Conntemp

        If Not rsThread.EOF Then
            LastEntryDate = CDate(rsThread("R_Date"))
            LastEntryUser = rsThread("Alias")
            LastEntryUserID = CLng(rsThread("UsrID"))

            SQLthreadS = "SELECT COUNT(TID) AS CountThreads FROM F_threads WHERE (FID = "& rsForum("ID") &")" 'TÆLLER ANTAL THREADS FOR HVERT FORUM
            Set rsThreads = forumtemp.execute(SQLthreadS)
   
            ThreadsCount = rsThreads("CountThreads")
            rsThreads.Close : Set rsThreads = Nothing
        Else
            LastEntryDate = ""
            LastEntryUser = ""
            ThreadsCount =    ""
        End If
    %>
    <table border="0" cellpadding="0" cellspacing="0" width="425">
        <tr>
            <td>
                <table style="border-left: 1 solid #000000; border-right: 1 solid #000000; border-bottom: 1 solid #000000" align="center" border="0" cellpadding="0" cellspacing="0" width="400">
                    <tr>
                        <td width="53%" style="border-right: 1 solid #000000" valign="top"><a href="threads.asp?id=<%=rsForum("ID")%>"><b><%=rsForum("F_Name")%></b></a><br><%=rsForum("F_Description")%></td>
                        <td width="35%" style="border-right: 1 solid #000000" align="center" valign="top"><%=LastEntryDate%><br><a href="showuser.asp?usrid=<%=LastEntryUserID%>"><%=LastEntryUser%></a></td>
                        <td width="22%" align="center" valign="top"><%=ThreadsCount%></td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>

Hvis der er nogen der ikke forstår hvad jeg mener, så prøv at kigge her:
http://212.242.188.97/limitless/new/forum.asp

På forhånd tak!
Avatar billede eagleeye Praktikant
28. april 2002 - 22:10 #1
Du laver en
INNER JOIN (Users INNER JOIN F_Replies ON Users.UsrID = F_Replies.UsrID) ON F_Threads.TID = F_Replies.TID "
Altså for at få nogle record skal der være svaret på en tråd... Jeg ville tror det det formål at få antallet ud behøves den del ikke.


Mit gæt er et sql'en skal se sådan ud:

strSQL = "SELECT TOP 1 F_Replies.R_Date, Users.Alias, Users.UsrID "
strSQL = strSQL & "FROM Forums INNER JOIN F_Threads ON Forums.ID = F_Threads.FID "
strSQL = strSQL & "WHERE F_Threads.FID = " & ForumID & " "
strSQL = strSQL & "ORDER BY F_Replies.R_Date DESC;"
Avatar billede psyclown Nybegynder
28. april 2002 - 22:38 #2
det jeg har nu virker fint nok, men det er svært at forklarer, jeg prøver lige med et eksempel.

Jeg laver et nyt topic i et tomt forum, altså det er det første topic i det forum også vis man kigger på forsiden(forum.asp) under threads der tæller den ikke nogle topics, selvom jeg lige at oprettet et. Når jeg så laver et reply i det topic jeg i lige har oprette, så begynder den at tælle.
Så jeg vil tro at det har noget med det her at gøre:

If Not rsThread.EOF Then
  LastEntryDate = CDate(rsThread("R_Date"))
  LastEntryUser = rsThread("Alias")
  LastEntryUserID = CLng(rsThread("UsrID"))

SQLthreadS = "SELECT COUNT(TID) AS CountThreads FROM F_threads WHERE (FID = "& rsForum("ID") &")" 'TÆLLER ANTAL THREADS FOR HVERT FORUM
Set rsThreads = forumtemp.execute(SQLthreadS)
   
  ThreadsCount = rsThreads("CountThreads")
  rsThreads.Close : Set rsThreads = Nothing
Else
  LastEntryDate = ""
  LastEntryUser = ""
  ThreadsCount =    ""
End If

I det lille stykke der skriver "siger" den jo, "If Not rsThread.EOF Then" så sætter den:
LastEntryDate = CDate(rsThread("R_Date"))
LastEntryUser = rsThread("Alias")
LastEntryUserID = CLng(rsThread("UsrID"))
Også laver den SQL'en til at tælle topics og sætte:
ThreadsCount = rsThreads("CountThreads")

Ellers skal den sætte alle variablerne til ingenting.
Men jeg kan ikke finde ud af hvad jeg skal gøre..jeg håber du forstår det.
Avatar billede eagleeye Praktikant
28. april 2002 - 22:50 #3
det jeg mener er at du har en if hvor der står:

If Not rsThread.EOF Then

som er lavet af den SQl- jeg har kommenteret. Jeg gætter bare på at den vil være tom da der ikke er nogle svar i topic INNER JOIN replies on topics er i den så hvis der ingen repies er så får du tomt recordset tilbage..
Avatar billede eagleeye Praktikant
28. april 2002 - 22:51 #4
jeg prøver lige at lave en lille test i acces så jeg kan blvier 100%overbevist :)
Avatar billede psyclown Nybegynder
28. april 2002 - 22:51 #5
okay, jeg prøver lige det du har skrevet
Avatar billede psyclown Nybegynder
28. april 2002 - 22:52 #6
okay, så venter jeg med at teste :D
Avatar billede eagleeye Praktikant
28. april 2002 - 23:11 #7
Jeg har prøvet at test det og lavet det i Access og nu er jeg overbevist om at det jeg skrev var rigtigt. Den forsøget at finde replies til topics og hvis der ingen repies er så bliver dit recorset rsThread tomt.

Denne her skulle væer lige så god:
"SELECT TOP 1 *
FROM (Forums INNER JOIN F_Threads ON Forums.ID = F_Threads.FID)
WHERE F_Threads.FID = " & ForumID & " "

men så får du ikke navnet på den som sidst har lagt i forumet . :(


Så kikkede jeg lidt mere på koden og kom til at du bare kan flytte den kode ud som udregner Counet uden for den if sætning som bare sørger for at du får navnet på den sidste som har lavet en reply.


Altså flyt:
SQLthreadS = "SELECT COUNT(TID) AS CountThreads FROM F_threads WHERE (FID = "& rsForum("ID") &")" 'TÆLLER ANTAL THREADS FOR HVERT FORUM
Set rsThreads = forumtemp.execute(SQLthreadS)

Ud Mellem
strSQL = strSQL & "ORDER BY F_Replies.R_Date DESC;"
rsThread.Open strSQL, Conntemp

'<---------- FLYT HERTIL

If Not rsThread.EOF Then


Så skulle det gerne virke. 

ThreadsCount = rsThreads("CountThreads")
rsThreads.Close : Set rsThreads = Nothing
Avatar billede eagleeye Praktikant
28. april 2002 - 23:12 #8
og så ikke ændre i SQL-sætningerne.
Avatar billede psyclown Nybegynder
28. april 2002 - 23:20 #9
nu står min kode sådan her:

<%
Do While Not rsForum.EOF
    ForumID = CInt(rsForum("ID"))

    Conntemp = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../../db/clan_ld_db_new.mdb")
    Set rsThread = Server.CreateObject("ADODB.Recordset")
    strSQL = "SELECT TOP 1 F_Replies.R_Date, Users.Alias, Users.UsrID "
    strSQL = strSQL & "FROM (Forums INNER JOIN F_Threads ON Forums.ID = F_Threads.FID) INNER JOIN (Users INNER JOIN F_Replies ON Users.UsrID = F_Replies.UsrID) ON F_Threads.TID = F_Replies.TID "
    strSQL = strSQL & "WHERE F_Threads.FID = " & ForumID & " "
    strSQL = strSQL & "ORDER BY F_Replies.R_Date DESC;"
    rsThread.Open strSQL, Conntemp

    SQLthreadS = "SELECT COUNT(TID) AS CountThreads FROM F_threads WHERE (FID = "& rsForum("ID") &")" 'TÆLLER ANTAL THREADS FOR HVERT FORUM
    Set rsThreads = forumtemp.execute(SQLthreadS)

    If Not rsThread.EOF Then
        LastEntryDate = CDate(rsThread("R_Date"))
        LastEntryUser = rsThread("Alias")
        LastEntryUserID = CLng(rsThread("UsrID"))
        ThreadsCount = rsThreads("CountThreads")
    Else
        LastEntryDate = ""
        LastEntryUser = ""
        ThreadsCount =    ""
    End If
%>

men den gør stadig det samme:
http://212.242.188.97/limitless/new/forum.asp

Vil du prøve at se min database?
Avatar billede eagleeye Praktikant
28. april 2002 - 23:20 #10
ARh så lige noget helt helt andet :)

det er helt bevist den skriver tomt ud ved ingen replys

Behold koden som den var:

        If Not rsThread.EOF Then
            LastEntryDate = CDate(rsThread("R_Date"))
            LastEntryUser = rsThread("Alias")
            LastEntryUserID = CLng(rsThread("UsrID"))

            SQLthreadS = "SELECT COUNT(TID) AS CountThreads FROM F_threads WHERE (FID = "& rsForum("ID") &")" 'TÆLLER ANTAL THREADS FOR HVERT FORUM
            Set rsThreads = forumtemp.execute(SQLthreadS)
   
            ThreadsCount = rsThreads("CountThreads")
            rsThreads.Close : Set rsThreads = Nothing
        Else
            LastEntryDate = ""
            LastEntryUser = ""
            ThreadsCount =    "0"  '<--Ændre til "0" den kommer der igenne hvis der ingen replys er.
        End If
Avatar billede eagleeye Praktikant
28. april 2002 - 23:23 #11
:) det er bevist lavet sådan at hvis der ingen replys er skriver den tomt ud "" og ikke 0 lav det som i min sidte kommentr (28/04-2002 23:20:34) bare ændre "" -> "0"

Den kommer altid ned gemme den else hvor de forskellige sættes "" og så overskrives det "0" som man har fået fra Count.

Så ret tilabge til det oprindelige og ændre "" til "0"
Det er vel meget fair altid at antage at hvis der ingen repys er så er Count'et 0 :)
Avatar billede psyclown Nybegynder
28. april 2002 - 23:30 #12
Der er så lige et lille problem :)
Der hvor du tror den skal tælle replies..der skal den tælle threads/topics...det er det jeg ikke forstår..der er jo oprettet et thread/topic i General Discussion, men den tæller ikke...nu håber jeg du har forstået mig rigtigt :))
Avatar billede eagleeye Praktikant
28. april 2002 - 23:34 #13
Arh ok.. det gik lidt for stærtk så :)

Håber det går; Prøv at flytte den Count SQL ud igen som ført foran if...
Samt fjerne/slttet linien
TheadsCount = "" fra Else sætningen.
Avatar billede psyclown Nybegynder
28. april 2002 - 23:37 #14
Ja, hvor nemt kan det være...så skal jeg vel bare fjerne:

Else
  LastEntryDate = ""
  LastEntryUser = ""
  ThreadsCount =  ""

for også at få den til at skrive dato og hvem der har oprette den sidste post ?
Avatar billede eagleeye Praktikant
28. april 2002 - 23:43 #15
Nej for den hendter data til den sidspe Reply i repies og ikke topics, så vidt jeg kan se.

Så skal du lave en SQL-sætningen inde i Else som hendte navnet på den som har lavet en topict i F_Threads. Gemmens data om en topic i F_Threads altså tekst og navn?
Avatar billede eagleeye Praktikant
28. april 2002 - 23:44 #16
Jeg tog vist fejl det :) jeg har lige prøvet at kikke på din side. Det du skriver har du ret i.
Avatar billede psyclown Nybegynder
28. april 2002 - 23:45 #17
ja de bliver gemt i F_Threads
Avatar billede psyclown Nybegynder
28. april 2002 - 23:47 #18
okay, så er det jo fint nok...her er dine velfortjente point :D

Tak for hjælpen
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