Avatar billede Slettet bruger
04. maj 2003 - 20:30 Der er 21 kommentarer og
1 løsning

Lave reply til forumbesked og tælle antallet af replys

Hej...

På mit site kan brugere skrive en besked. Jeg ønsker nu at lave det sådan at andre brugere kan skrive et reply til denne besked. Både selve den originale besked og reply-beskeden gemmes på samme måde i databasen, bortset fra at reply'et får følgende to:

1) replybesked = true/false (for at kende forskel på org. beskeder og replys)

2) replybeskedid = den org. beskeds ID

Alle beskeder har et felt der hedder "Replycount" - der altså skal vise hvor mange replys til findes til hver besked.

I stedet for et SQL-loop - vil jeg gerne at hver gang en bruger skriver et reply - så henter den "replybeskedid" fra den org. besked og tilføjer 1.

Men hvordan gør man det?

Koden til at smide reply'et i databasen:

-------------------------------

replybeskedid = Request.QueryString("beskedid")

ConnString= "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("database.mdb")
Set RS = server.createobject ("ADODB.recordset")
RS.open "beskeder", ConnString, adOpenStatic, adLockOptimistic, adCmdTable

RS.addnew

    RS("besked")= request.form("besked")
    RS("dato") = Now
    RS("replybesked") = True
    RS("replybeskedid") = replybeskedid
   
    RS.update

RS.close
RS = null

-------------------------------

Ok - så er reply'et smidt i databasen. Nu ønsker jeg så at hentet tallet fra den originale tråds "replycount" og tilføje 1 til dette tal...
Avatar billede ellebaek Nybegynder
04. maj 2003 - 20:35 #1
set conn = server.createObject("ADODB.Connection")
set rs = Server.createObject("ADODB.Recordset
rs.Open strSQL, objConn, 3, 3
    rs.Filter = "id = " & request("ID")
    rs("replycount") = rs("replycount") + 1
    rs.Update

Så må du selv finde id i stedet for der hvor jeg har skrevet request("id")
Avatar billede ellebaek Nybegynder
04. maj 2003 - 20:36 #2
set conn = server.createObject("ADODB.Connection")
set rs = Server.createObject("ADODB.Recordset
rs.Open strSQL, objConn, 3, 3
    rs.Filter = "id = " & replybeskedid
    rs("replycount") = rs("replycount") + 1
    rs.Update
Avatar billede ellebaek Nybegynder
04. maj 2003 - 20:37 #3
ups... Glemte lige sqlen:

strSQL = "SELECT * FROM tabelnavn"

Så sætter du dit tabelnavn ind her... På den tabel hvor spgerne ligger...
Avatar billede Slettet bruger
04. maj 2003 - 20:37 #4
synes der mangler noget? eller vil du sætte det ind umiddelbart efter min kode øverst?
Avatar billede ellebaek Nybegynder
04. maj 2003 - 20:40 #5
ConnString= "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("database.mdb")
Set RS = server.createobject ("ADODB.recordset")
RS.open "beskeder", ConnString, adOpenStatic, adLockOptimistic, adCmdTable

RS.addnew

    RS("besked")= request.form("besked")
    RS("dato") = Now
    RS("replybesked") = True
    RS("replybeskedid") = replybeskedid
   
    RS.update

RS.close
RS = null

strSQL = "SELECT * FROM tabelnavn"

set conn = server.createObject("ADODB.Connection")
conn.Open ConnString

set rs = Server.createObject("ADODB.Recordset")
rs.Open strSQL, conn, 3, 3
    rs.Filter = "id = " & replybeskedid
    rs("replycount") = rs("replycount") + 1
    rs.Update
rs.close
set rs = nothing

Sådan her tror jeg det virker...
Avatar billede Slettet bruger
04. maj 2003 - 20:45 #6
næh - der sker ikke noget
Avatar billede eagleeye Praktikant
04. maj 2003 - 20:49 #7
Du kunne evt bruge en SQL sætning til at opdater feltet med en:

Hvis du gemmer replybesked som true/false i en variable så kan du holde styr på hvor om det er en ny besked. Samt ligge 1 ind i replycount for nye beskeder.


SQL = "UPDATE beskeder SET replycount = replycount+1 WHERE beskedID = " & replybeskedid
Avatar billede ellebaek Nybegynder
04. maj 2003 - 20:49 #8
har du rettet navnet i sqlen ?
Avatar billede Slettet bruger
04. maj 2003 - 20:50 #9
eagleeye - skal den sql udskiftes med min eller hvor vil du ha den?
Avatar billede eagleeye Praktikant
04. maj 2003 - 20:51 #10
replybeskedid = Request.QueryString("beskedid")

ConnString= "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("database.mdb")
Set RS = server.createobject ("ADODB.recordset")
RS.open "beskeder", ConnString, adOpenStatic, adLockOptimistic, adCmdTable

RS.addnew

    RS("besked")= request.form("besked")
    RS("dato") = Now
    RS("replybesked") = True
    RS("replybeskedid") = replybeskedid
    RS("replycount") = 1

    RS.update

RS.close

SQL = "UPDATE beskeder SET replycount = replycount+1 WHERE beskedID = " & replybeskedid
RS.Open SQL,ConnString, adOpenStatic, adLockOptimistic, adCmdTable

RS.Close  '<------- denne kan måske undværes

RS = null
Avatar billede Slettet bruger
04. maj 2003 - 20:55 #11
364: SQL = "UPDATE beskeder SET replycount = replycount+1 WHERE id = " & replybeskedid

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error in FROM clause.

/test/processing.asp, line 364
Avatar billede Slettet bruger
04. maj 2003 - 20:56 #12
hov - 364 er:
RS.Open SQL,ConnString, adOpenStatic, adLockOptimistic, adCmdTable
Avatar billede eagleeye Praktikant
04. maj 2003 - 21:02 #13
FROM clause... hmm.
Er tabel og kolonne navne skrevet/stavet rigtigt?
Avatar billede eagleeye Praktikant
04. maj 2003 - 21:03 #14
Eller så prøv lige at lave disse :

SQL = "UPDATE beskeder SET replycount = replycount+1 WHERE beskedID = " & replybeskedid
RS.Open SQL,ConnString, adOpenStatic, adLockOptimistic, adCmdTable

RS.Close  '<------- denne kan måske undværes


Om til:


Set Conn = server.createobject ("ADODB.connection")
Conn.Open ConnString
SQL = "UPDATE beskeder SET replycount = replycount+1 WHERE beskedID = " & replybeskedid
Conn.Execute (SQL)
Conn.Close
Set Conn = Nothing
Avatar billede Slettet bruger
04. maj 2003 - 21:04 #15
ja, det er rigtigt nok
Avatar billede Slettet bruger
04. maj 2003 - 21:08 #16
med dit sidste bud tilføjer den fint svaret - men hvert svar får bare et "1" i sin egen replycount. "1" skulle tværtimod lægges til replycount ved den originale besked og ikke ved svaret
Avatar billede eagleeye Praktikant
04. maj 2003 - 21:17 #17
Er replybeskedid ikke ID på den oprindelige besked?
Så skulle replycount også blive talt op. Hvad står der i replycount for en besked, står der 0 eller 1 eller er det tomt?
Avatar billede Slettet bruger
04. maj 2003 - 21:24 #18
replybeskedid er id på den oprindelige besked der smides med via en querystring, ja

feltet var tomt - har prøvet at skifte det med 0 - og nu ser det ud til at virke. Dog smider den et 1-tal ind på replycount ved hvert svar - det gør ikke det store, undrede mig bare over det...
Avatar billede eagleeye Praktikant
04. maj 2003 - 21:28 #19
Hvis feltet er tomt = Null så forbliver det Null hvis man ligger 1 til, så du er nød til at ændre så der ligger 0 eller 1 i ved første besked.

Det er fordi jeg har tilføjet en linje den ligger 1 i:

RS.addnew

    RS("besked")= request.form("besked")
    RS("dato") = Now
    RS("replybesked") = True
    RS("replybeskedid") = replybeskedid
    RS("replycount") = 1      '<------------ Denne har jeg tilføjet, den kan slettes igen
Avatar billede Slettet bruger
04. maj 2003 - 22:10 #20
eagleeye > svarer du lige
Avatar billede eagleeye Praktikant
04. maj 2003 - 22:11 #21
Ja det gør jeg da :)
Avatar billede Slettet bruger
04. maj 2003 - 23:14 #22
takker... virker fint
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