14. juni 2006 - 13:01Der 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"
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.
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.
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.
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")
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).
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," "," ") fncTextChange = Replace(fncTextChange,vbCrLf,"<BR>") fncTextChange = Replace(fncTextChange,"å","å") fncTextChange = Replace(fncTextChange,"æ","æ") fncTextChange = Replace(fncTextChange,"ø","ø") fncTextChange = Replace(fncTextChange,"Å","Å") fncTextChange = Replace(fncTextChange,"Æ","Æ") fncTextChange = Replace(fncTextChange,"Ø","Ø") 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 %>
<% 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...
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'
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.
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...) ;)
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.
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") & "'"
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...
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".
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 :))...
Takker for dine forsøg. Jeg dropper hele koden og begynder på en frisk.
Synes godt om
Ny brugerNybegynder
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.