Avatar billede plato Juniormester
14. juni 2006 - 13:01 Der er 27 kommentarer og
1 løsning

Problem med 'or' ASP

Hejsa Ng.

Jeg bruger følgende kode til at vise indlæg i et forum, men den skal kun vise indlæg der er relavante ifølge koden. Den udskriver dog samme indlæg alle steder:

strSQL = "SELECT * FROM forumindlaeg WHERE replyid = '" & rs6("newxcommentid") & "' OR replyidbio = '" rs6("bioanmeldid") "' OR replyiddvd = '" rs6("dvdanmeldid") "' ORDER BY id"

Kan man ikke gøre sådan som jeg har gjort?
Avatar billede plato Juniormester
14. juni 2006 - 13:03 #1
strSQL = "SELECT * FROM forumindlaeg WHERE replyid = '" & rs6("newxcommentid") & "' OR replyidbio = '" & rs6("bioanmeldid") & "' OR replyiddvd = '" & rs6("dvdanmeldid") & "' ORDER BY id"
Avatar billede softspot Forsker
14. juni 2006 - 13:17 #2
Var det så en rettelse der fik det til at fungere, eller var det bare fordi du havde skrevet forkert i spørgsmålet...?

Under alle omstændigheder er der grundliggende ikke noget i vejen med den SQL-sætning, der kan dog være problemer med at du f.eks. benytter tekster til talkolonner... alternativt at værdierne du indsætter i SQL-sætningen ikke er tal eller er helt tomme.
Avatar billede plato Juniormester
14. juni 2006 - 13:22 #3
Det var bare en rettelse i spm. Det volde mig store problemer, fordi jeg prøver at samle kommentare fra nyheder, biografanmeldelser og DVDanmeldelser i et forum, samtidig de bliver vist under de forskellige kategorier. Desuden prøver jeg også at adskille indlæg der kun skal vises i forum.
Avatar billede plato Juniormester
14. juni 2006 - 13:23 #4
Der er mange felter i mit forum grundet alle de forskellige ting der samles til ét. En enkelt besværelse kan indeholde mange tomme felter, simpelhen fordi det ikke er relevant for en enkelt besvarelse.
Avatar billede plato Juniormester
14. juni 2006 - 13:35 #5
Oki, jeg har delvist løst problemet:
strSQL = "SELECT * FROM forumindlaeg WHERE replyid = '" & rs6("newxcommentid") & "' OR replyidbio = '" & rs6("bioanmeldid") & "' OR replyiddvd = '" & rs6("dvdanmeldid") & "' AND id LIKE '" & Request.Querystring("id") & "' ORDER BY id"

Nu er problemet at den ikke reagere på
OR replyiddvd = '" & rs6("dvdanmeldid") & "'
som om koden er fuldstændig ligeglad.

Her i mellem virker det fint:
replyid = '" & rs6("newxcommentid") & "' OR replyidbio = '" & rs6("bioanmeldid")
Avatar billede softspot Forsker
14. juni 2006 - 13:55 #6
Har du prøvet at udskrive den SQL der kommer ud af din kode? Du kan ofte se hvad der er galt bare ved at kigge på SQL-sætningen (fordi det er lettere at gennemskue en konkret SQL-sætning end en med en masse variable som du ikke kender værdien af).
Avatar billede plato Juniormester
14. juni 2006 - 14:10 #7
Mener du:
Response.Write("" & rs6("bioanmeldid") & " #1<br>")
Response.Write("" & rs6("newxcommentid") & " #2<br>")
Response.Write("" & rs6("dvdanmeldid") & " #3")

# 1, 2 og 3 er bare for at kunne overskue det.

Det virker for 1 og 2. Men 3 går galt. Dvs. dvdanmeldid vil ikke.
Avatar billede plato Juniormester
14. juni 2006 - 14:12 #8
Egentlig udskriver den godt nok 'dvdanmeldid' som den skal. Men når den skal hente data hvor replyiddvd = dvdanmeldid går det galt.
Avatar billede plato Juniormester
14. juni 2006 - 14:17 #9
Jeg poster lige hele koden. Har på fornemmelse det kan være
Avatar billede plato Juniormester
14. juni 2006 - 14:17 #10
Hovs.
Jeg poster lige hele koden. Har på fornemmelse det kan være et helt andet sted:

(Den er strippet for html)
<%
strSQL = "SELECT * FROM forumindlaeg WHERE id LIKE '" & Request.QueryString("id") & "'"
Set rs6 = objConn.Execute(strSQL)
Function fncTextChange(strText)
strTekst = Trim(strText)
fncTextChange = Replace(strTekst,"'","'")
fncTextChange = Replace(fncTextChange,"""","""")
fncTextChange = Replace(fncTextChange,"  "," &nbsp;")
fncTextChange = Replace(fncTextChange,vbCrLf,"<BR>")
fncTextChange = Replace(fncTextChange,"å","&aring;")
fncTextChange = Replace(fncTextChange,"æ","&aelig;")
fncTextChange = Replace(fncTextChange,"ø","&oslash;")
fncTextChange = Replace(fncTextChange,"Å","&Aring;")
fncTextChange = Replace(fncTextChange,"Æ","&AElig;")
fncTextChange = Replace(fncTextChange,"Ø","&Oslash;")
fncTextChange = Replace(fncTextChange,"","<b>")
fncTextChange = Replace(fncTextChange,"
","</b>")
fncTextChange = Replace(fncTextChange,"","<i>")
fncTextChange = Replace(fncTextChange,"
","</i>")
fncTextChange = Replace(fncTextChange,"","<u>")
fncTextChange = Replace(fncTextChange,"
","</u>")
            End Function

%>

<%
AntalKommentarerUser=0
  Set rsUsers=objConn.Execute("SELECT COUNT(*) FROM forumindlaeg where forfatter LIKE '" & rs6("forfatter") & "'")
  AntalKommentarerUsers=rsUsers(0).Value
  Response.Write "" & AntalKommentarerUsers & ""
%></p></td>
    <td class="grey_background" width="2"></td>
    <td class="forum_comment_indhold"><%=fncTextChange(rs6("indhold"))%><br>
<% if "citat" = "" Then
Response.Write("")
Else
Response.Write(""&rs6("citat")&"")
End if%></td>
  </tr>
</table>
<%
strSQL = "SELECT * FROM forumindlaeg WHERE replyid = '" & rs6("newxcommentid") & "' OR replyidbio = '" & rs6("bioanmeldid") & "' OR replyiddvd = '" & rs6("dvdanmeldid") & "' AND id LIKE '" & Request.Querystring("id") & "' ORDER BY id"
Set rs7 = objConn.Execute(strSQL)
if rs7.eof or rs7.bof then
Response.Write"<span class='font'><center>Der er ingen besvarelser til dette emne.</center></span>"
else
do while not rs7.EOF
i = i + 1 %>

<%
Response.Write("" & rs7("bioanmeldid") & " #1<br>")
Response.Write("" & rs7("newxcommentid") & " #2<br>")
Response.Write("" & rs7("dvdanmeldid") & " #3")
%>

<%
AntalKommentarerUser=0
  Set rsUser=objConn.Execute("SELECT COUNT(*) FROM forumindlaeg where forfatter LIKE '" & rs7("forfatter") & "'")
  AntalKommentarerUser=rsUser(0).Value
  Response.Write "" & AntalKommentarerUser & ""
%></p></td>
    <td class="grey_background" width="2"></td>
    <td class="forum_comment_indhold" valign="top" width="88%"><%=fncTextChange(rs7("indhold"))%><br>
<% if "citat" = "" Then
Response.Write("")
Else
Response.Write(""&rs7("citat")&"")
End if%></td>
  </tr>
<% 
rs7.MoveNext
loop
end if
%>
Avatar billede softspot Forsker
14. juni 2006 - 14:21 #11
Nej, jeg mente egentlig:

<%
strSQL = "SELECT * FROM forumindlaeg WHERE replyid = '" & rs6("newxcommentid") & "' OR replyidbio = '" & rs6("bioanmeldid") & "' OR replyiddvd = '" & rs6("dvdanmeldid") & "' AND id LIKE '" & Request.Querystring("id") & "' ORDER BY id"
response.write strSQL
response.end
Set rs7 = objConn.Execute(strSQL)


Så kan du se hvad der rent faktisk bliver indsat af værdier i SQL-sætningen og om det stemmer overens med de værdisæt som databasen definerer for de enkelte felter...
Avatar billede plato Juniormester
14. juni 2006 - 14:25 #12
Prøver
Avatar billede plato Juniormester
14. juni 2006 - 14:29 #13
Den udskriver det sådan her:
SELECT * FROM forumindlaeg WHERE replyid = '' OR replyidbio = '' OR replyiddvd = '760' AND id LIKE '1844' ORDER BY id

Det er sådan set fint nok. Bortset fra at den lister kommentarer der har replyid = '1507'. Og den skal jo kun liste kommentarer der har replyiddvd = '760'
Avatar billede plato Juniormester
14. juni 2006 - 14:36 #14
Du kan se det her:
http://www.filmnet.dk/test3/forum.asp?mode=read&id=1843

Her vises en anmeldelse der har dvdanmeldid = 759 med to tilhørende replyiddvd = 759.
Alligevel finder den replyid = 1507 i stedet.
Avatar billede softspot Forsker
14. juni 2006 - 14:43 #15
Er det ikke fordi de rækker den finder matcher et af de andre kriterier (altså at der ikke er noget indhold i replyid og/eller replybioid).
Avatar billede plato Juniormester
14. juni 2006 - 14:45 #16
Men den lister jo ikke de to kommentarer der har replyiddvd = 760 selvom de er der. Det gør den for de to andre. Jeg prøver lige at kigge db'en igennem for at se efter dobbelt id'er i forskellige felter.
Avatar billede softspot Forsker
14. juni 2006 - 14:45 #17
Jeg kan desværre ikke helt gennemskue din datastruktur, så jeg gætter mig lidt frem i øjeblikket. Jeg håber ikke du mister tålmodigheden med mig :)
Avatar billede plato Juniormester
14. juni 2006 - 14:50 #18
Der er ingen replydidbio eller replyid der har id = 759. Der er selvfølgelig et newxcommentid = 759. Men skulle det have nogen betydning når den ikke engang liste denne kommentar under dvdanmeldid = 759? (Har hovedpine af kode-problem-løsnings-kiggeri...) ;)
Avatar billede plato Juniormester
14. juni 2006 - 14:51 #19
Jeg kan tilføje kommentarer i koden?
Avatar billede plato Juniormester
14. juni 2006 - 14:57 #20
Hmm der er også et eller andet galt.

Hvis jeg nøjes med:
strSQL = "SELECT * FROM forumindlaeg WHERE replyiddvd = '" & rs6("dvdanmeldid") & "' AND id LIKE '" & Request.Querystring("id") & "' ORDER BY id"

Finder den intet selvom det eksistere i databasen.
Avatar billede plato Juniormester
14. juni 2006 - 15:04 #21
Hvis jeg udskriver dem enkelt vis virker de med denne SQL sætning:
strSQL = "SELECT * FROM forumindlaeg WHERE replyiddvd = '" & rs6("dvdanmeldid") & "'"

Så slåret ud i pap skal jeg faktisk, for at hele skidtet virker, have dette her:
strSQL = "SELECT * FROM forumindlaeg WHERE replyid = '" & rs6("newxcommentid") & "'"
strSQL = "SELECT * FROM forumindlaeg WHERE replyidbio = '" & rs6("bioanmeldid") & "'"
strSQL = "SELECT * FROM forumindlaeg WHERE replyiddvd = '" & rs6("dvdanmeldid") & "'"
Avatar billede softspot Forsker
14. juni 2006 - 15:08 #22
det der id hvad er det for noget, for hvis det en entydig identifikation af en række, så har du jo begrænset forspørgslen væsentlig ved at angive:

AND id LIKE '" & Request.Querystring("id") & "'
Avatar billede softspot Forsker
14. juni 2006 - 15:11 #23
Hvilken værdi har eksempelvis replyid og replyidbio, hvis det er replyiddvd du søger på (som vist i et af de foregående indlæg)? Er de rent faktisk tomme strenge, eller er de NULL? Hvis de er NULL, så er det jo en anden værdi end '' og du skal derfor også kontrollere for NULL for de pågældende kolonner...
Avatar billede plato Juniormester
14. juni 2006 - 15:16 #24
Tror bare de er tomme. AND id LIKE '" & Request.Querystring("id") & "' er unikt. Så ja, du har ret, det begrænser.

Men hvordan kontrollere jeg for null?

Jeg skal desværre smutte nu. Kigger tilbage igen i morgen. Tak for tiden indtil videre. :)
Avatar billede softspot Forsker
14. juni 2006 - 15:19 #25
Du kontrollere for NULL med IS NULL, f.eks.

WHERE replyid IS NULL
Avatar billede plato Juniormester
15. juni 2006 - 09:09 #26
Jeg kan slet ikke overskue problemet.

Hvis du klikker her: http://www.filmnet.dk/test3/forum.asp?mode=main får du en oversigt over forum. Der er ligenu 404 bioanmeldelse, 1458 nyheder og 225 dvdanmeldelser.

Hvis du så klikker på én af dem, og bagefter vælger et emne der har tilhørende kommentarer, vil du se at koden fungerer 100% som den skal.

Problemet(!) kommer først når jeg tilføjer en ny kommentar (alle de nuværende er flytter over fra en anden tabel via formfelter). Disse vil du kende som "Tester dette forpulet shit!" og "Tester igen igen igen".
Avatar billede softspot Forsker
15. juni 2006 - 10:02 #27
Er det denne fejl du tænker på?

ADODB.Field error '80020009'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/test3/news.asp, line 0


Hvis ja, så skal du lige vise koden til at tilføje en ny kommentar. Hvis det ikke er den fejl du tænker på, så kan jeg stadig ikke rigtig gennemskue din datastruktur godt nok til at se hvad der går galt. Indtil nu synes jeg kun det er brudstykker jeg har set (og det er desværre ikke nok - for mig :))...
Avatar billede plato Juniormester
16. juni 2006 - 08:37 #28
Takker for dine forsøg. Jeg dropper hele koden og begynder på en frisk.
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