15. september 2007 - 16:34Der er
46 kommentarer og 1 løsning
count-sætning der driller!
Hej,
Jeg er ved at opdater et script, men jeg kan godt nok ikke få det til at kører som jeg vil ha det!!!
Har en table "kommen" hvor jeg ønsker at tælle hvor mange kommentar der er til hver anmeldelse - kolonne jeg skal tælle er "kategori",jeg bruger dette script:
Set rs = Server.CreateObject("ADODB.RecordSet") strSQL = "Select * From anm Where kategori = '" & replace(request.querystring("id"),"'","''") & "' ORDER BY id desc" strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("an.mdb") rs.Open strSQL, strDSN, 1 if rs.EOF then %>
<b><br> <br> <br> <span class="kategori_tekst"> Der er desværre endnu ikke tilføjet nogle anmeldelse i denne kategori</span> <br> <br> <br> <br> <br> <br> </b> <% else
rs.PageSize = 10 rs.AbsolutePage = intPage intRecCount = rs.PageSize intPageCount = rs.PageCount '** Paging part end
Counter = 1 '**paging ændre do util linien: 'do until rs.eof Do While Not rs.EOF And intRecCount > 0 IF Counter = 4 Then Counter = 1 End if %>
end if %> <br> Kommentar: <% Sql = "SELECT COUNT (*) AS Total From kommen WHERE kategori ='kategori'" Set Rs = Conn.Execute(Sql) Response.Write rs("Total")%> </td>
nielle - havde lige en familiemiddag der skulle overstås ;o)
Du kan ikke gøre noget for at få vist fejlen, men vist jeg indsætter dette
<% linie 158 Sql = "SELECT COUNT (*) AS Total From kommen WHERE kategori ='kategori'" linie 159 Set Rs = Conn.Execute(Sql) linie 160 Response.Write rs("Total")%>
pokkers - jeg har skrevet forkert, det er sådan her
<% linie 258 Sql = "SELECT COUNT (*) AS Total From kommen WHERE kategori ='" & replace(request.querystring("id"),"'","''") & "'" linie 259 Set Rs = Conn.Execute(Sql) linie 260 Response.Write rs("Total")%>
Jeg kan desværre ikke se, hva hulens der er galt! Jeg prøver lige , at smide hele script......
<!--#include file="config.asp" --><%
dim CurPageType, CurPageInfoChk, spThemeTitle, spThemeMM CurPageType = "core" sPage_iName = "policy" sPage_id = 0 CurPageInfoChk = "1" %> <!--#include file="inc_functions.asp" --> <!-- #include file="includes/inc_ADOVBS.asp" --> <% pgname = txtErr & "!" if Request("pg") <> "" or Request("pg") <> " " then if IsNumeric(Request("pg")) = True then sPage_id = cLng(Request("pg")) else closeAndGo("default.asp") end if end if
'get the default layout if sPage_id = 0 then cpSQL = "select * from PORTAL_PAGES where P_iNAME = '" & sPage_iName & "'" else cpSQL = "select * from PORTAL_PAGES where P_ID = " & sPage_id & "" end if set rsCPs = my_Conn.execute(cpSQL) if not rsCPs.eof then pgtitle = rsCPs("p_title") pgname = rsCPs("p_name") if rsCPs("p_acontent") <> "" then pgbody = replace(rsCPs("p_acontent"),"''","'") else if rsCPs("p_content") <> "" then pgbody = replace(rsCPs("p_content"),"''","'") end if end if 'left_Col = rsCPs("p_leftcol") maint_Col = rsCPs("p_maintop") mainb_Col = rsCPs("p_mainbottom") right_Col = rsCPs("p_rightcol")
<!--#include file="inc_top.asp" --> <% function shoBlocks(arrCol) for fp = 0 to ubound(arrCol) fTemp = split(arrCol(fp),":") if ubound(fTemp) = 2 then fFunct = fTemp(1) & "(""" & fTemp(2) & """)" else fFunct = fTemp(1) end if execute(fFunct) next end function
if right(left_Col,1) = "," then left_Col = left(left_Col,len(left_Col)-1) end if if right(maint_Col,1) = "," then maint_Col = left(maint_Col,len(maint_Col)-1) end if if right(mainb_Col,1) = "," then mainb_Col = left(mainb_Col,len(mainb_Col)-1) end if if right(right_Col,1) = "," then right_Col = left(right_Col,len(right_Col)-1) end if
if trim(left_Col) <> "" then bLeft = true cont = cont + 1 end if if trim(maint_Col) <> "" then bMaint = true cont = cont + 1 end if if trim(mainb_Col) <> "" then bMainb = true cont = cont + 1 end if if trim(right_Col) <> "" then bRight = true cont = cont + 1 end if
response.Write("<table class=""content"" border=""0"" width=""100%"" align=""center"" cellpadding=""0"" cellspacing=""0""><tr>") if bLeft then response.Write("<td class=""leftPgCol"" valign=""top"" nowrap=""nowrap"">") intSkin = getSkin(intSubSkin,1) shoBlocks(l_col) response.Write("</td>") end if
response.Write("<td class=""mainPgCol"" valign=""top"">") intSkin = getSkin(intSubSkin,2) if bMaint then shoBlocks(mt_col) end if
%> <table width="100%"><tr><td> <% intPage = Request("page") If isNumeric(intPage) = False Or intPage < 1 Then intPage = 1 End If
Set rs = Server.CreateObject("ADODB.RecordSet") strSQL = "Select * From anm Where kategori = '" & replace(request.querystring("id"),"'","''") & "' ORDER BY id desc" strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("an.mdb") rs.Open strSQL, strDSN, 1 %>
<% spThemeTitle= "Anmeldelse" & " " & "af" & " " & (Request.Querystring("id")) spThemeBlock1_open(intSkin) %> <% if rs.EOF then %> <b><br> <br> <br> <span class="kategori_tekst"> Der er desværre endnu ikke tilføjet nogle anmeldelse i denne kategori</span> <br> <br> <br> <br> <br> <br> </b> <% else
rs.PageSize = 10 rs.AbsolutePage = intPage intRecCount = rs.PageSize intPageCount = rs.PageCount '** Paging part end
Counter = 1 '**paging ændre do util linien: 'do until rs.eof Do While Not rs.EOF And intRecCount > 0 IF Counter = 4 Then Counter = 1 End if %>
end if %> <br> Kommentar: <% Sql = "SELECT COUNT (*) AS Total From kommen WHERE kategori ='" & replace(request.querystring("id"),"'","''") & "'" Set Rs = Conn.Execute(Sql) Response.Write rs("Total")%> </td>
if bMainb then shoBlocks(mb_col) end if response.Write("</td>")
if bRight then if cont = 3 then response.Write("<td class=""rightPgCol"" valign=""top"" width=""195"">") else response.Write("<td class=""rightPgCol"" valign=""top"">") end if intSkin = getSkin(intSubSkin,3) shoBlocks(r_col) response.Write("</td>") end if response.Write("</tr></table>")
Prøv at lave en almindelig søgning på siden - så vil du opdage at Coon kun oprædet 1 ste, nemlig der at du forsøger at bruge den. Det er det ASP brokker sig over: Conn skal være defineret og åbnet som en forbindelse til din database.
Har fået den til at tælle alle kommentarne, men den viser "kun" sidst anmeldelse!!!
Jeg har brugt dette: Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("jerg.mdb") Conn.Open DSN Sql = "SELECT DISTINCTROW Sum([kommen].[kategori]) AS [Sum Of kategori], Count(*) AS [Antal Of kommen] FROM kommen"
Set Rs = Conn.Execute(Sql) Response.Write rs("Antal Of kommen")
Nu spørge jeg nok dumt, men kan man lave forespørgelse i denne database åbening:
Set rs = Server.CreateObject("ADODB.RecordSet") strSQL = "Select * From anm Where kategori = '" & replace(request.querystring("id"),"'","''") & "' ORDER BY id desc" strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("an.mdb")???
i stedet for det, jeg prøver på nedestående som er nuværende kode!
<!--#include file="config.asp" --><%
dim CurPageType, CurPageInfoChk, spThemeTitle, spThemeMM CurPageType = "core" sPage_iName = "policy" sPage_id = 0 CurPageInfoChk = "1" %> <!--#include file="inc_functions.asp" --> <!-- #include file="includes/inc_ADOVBS.asp" --> <% pgname = txtErr & "!" if Request("pg") <> "" or Request("pg") <> " " then if IsNumeric(Request("pg")) = True then sPage_id = cLng(Request("pg")) else closeAndGo("default.asp") end if end if
'get the default layout if sPage_id = 0 then cpSQL = "select * from PORTAL_PAGES where P_iNAME = '" & sPage_iName & "'" else cpSQL = "select * from PORTAL_PAGES where P_ID = " & sPage_id & "" end if set rsCPs = my_Conn.execute(cpSQL) if not rsCPs.eof then pgtitle = rsCPs("p_title") pgname = rsCPs("p_name") if rsCPs("p_acontent") <> "" then pgbody = replace(rsCPs("p_acontent"),"''","'") else if rsCPs("p_content") <> "" then pgbody = replace(rsCPs("p_content"),"''","'") end if end if 'left_Col = rsCPs("p_leftcol") maint_Col = rsCPs("p_maintop") mainb_Col = rsCPs("p_mainbottom") right_Col = rsCPs("p_rightcol")
<!--#include file="inc_top.asp" --> <% function shoBlocks(arrCol) for fp = 0 to ubound(arrCol) fTemp = split(arrCol(fp),":") if ubound(fTemp) = 2 then fFunct = fTemp(1) & "(""" & fTemp(2) & """)" else fFunct = fTemp(1) end if execute(fFunct) next end function
if right(left_Col,1) = "," then left_Col = left(left_Col,len(left_Col)-1) end if if right(maint_Col,1) = "," then maint_Col = left(maint_Col,len(maint_Col)-1) end if if right(mainb_Col,1) = "," then mainb_Col = left(mainb_Col,len(mainb_Col)-1) end if if right(right_Col,1) = "," then right_Col = left(right_Col,len(right_Col)-1) end if
if trim(left_Col) <> "" then bLeft = true cont = cont + 1 end if if trim(maint_Col) <> "" then bMaint = true cont = cont + 1 end if if trim(mainb_Col) <> "" then bMainb = true cont = cont + 1 end if if trim(right_Col) <> "" then bRight = true cont = cont + 1 end if
response.Write("<table class=""content"" border=""0"" width=""100%"" align=""center"" cellpadding=""0"" cellspacing=""0""><tr>") if bLeft then response.Write("<td class=""leftPgCol"" valign=""top"" nowrap=""nowrap"">") intSkin = getSkin(intSubSkin,1) shoBlocks(l_col) response.Write("</td>") end if
response.Write("<td class=""mainPgCol"" valign=""top"">") intSkin = getSkin(intSubSkin,2) if bMaint then shoBlocks(mt_col) end if
%> <table width="100%"><tr><td> <% intPage = Request("page") If isNumeric(intPage) = False Or intPage < 1 Then intPage = 1 End If
Set rs = Server.CreateObject("ADODB.RecordSet") strSQL = "Select * From anm Where kategori = '" & replace(request.querystring("id"),"'","''") & "' ORDER BY id desc" strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("an.mdb")
rs.Open strSQL, strDSN, 1 %>
<% spThemeTitle= "Anmeldelse" & " " & "af" & " " & (Request.Querystring("id")) spThemeBlock1_open(intSkin) %> <% if rs.EOF then %> <b><br> <br> <br> <span class="kategori_tekst"> Der er desværre endnu ikke tilføjet nogle anmeldelse i denne kategori</span> <br> <br> <br> <br> <br> <br> </b> <% else
rs.PageSize = 10 rs.AbsolutePage = intPage intRecCount = rs.PageSize intPageCount = rs.PageCount '** Paging part end
Counter = 1 '**paging ændre do util linien: 'do until rs.eof Do While Not rs.EOF And intRecCount > 0 IF Counter = 4 Then Counter = 1 End if %>
if bMainb then shoBlocks(mb_col) end if response.Write("</td>")
if bRight then if cont = 3 then response.Write("<td class=""rightPgCol"" valign=""top"" width=""195"">") else response.Write("<td class=""rightPgCol"" valign=""top"">") end if intSkin = getSkin(intSubSkin,3) shoBlocks(r_col) response.Write("</td>") end if response.Write("</tr></table>")
> Nu spørge jeg nok dumt, men kan man lave forespørgelse i denne database åbening: > > Set rs = Server.CreateObject("ADODB.RecordSet") > strSQL = "Select * From anm Where kategori = '" & replace(request.querystring > ("id"),"'","''") & "' ORDER BY id desc" > strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("an.mdb")???
Ja, det kan du sagtens. Der er kun brug for en database-connectionn. I den viste stump kode mangler du dog at åbne den.
Kommentar: <% Sql2 = "SELECT COUNT (*) AS Total From kommen WHERE kategori ='" & replace(request.querystring("id"),"'","''") & "'" Set Rs2 = Conn.Execute(Sql2) Response.Write rs("Total")%>......og med samme dårlige resultat!!!
Både ja og nej. Den bliver godt nok åbnet, men kun til den ene rs som du har angivet der. Det kan du ikke bruge, hvis du har brug for at afvikle mere end een SQL-sætning.
Har nok misforstået det "igen" - jeg har gjort således
Set rs = Server.CreateObject("ADODB.RecordSet") Set rs2 = Server.CreateObject("ADODB.RecordSet") strSQL = "Select * From anm Where kategori = '" & replace(request.querystring("id"),"'","''") & "' ORDER BY id desc" strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("an.mdb") rs.Open strSQL, strDSN, 1 rs2.Open strSQL, Sql2, strDSN, 1
Og der får jeg den samme fejl:
Kommentar: Microsoft VBScript runtime error '800a01a8'
Object required: ''
/fisk/kategori.asp, line 264
Sql2 = "SELECT COUNT (*) AS Total From kommen WHERE kategori ='" & replace(request.querystring("id"),"'","''") & "'" /Linie 264/ Set Rs2 = Conn.Execute(Sql2) Response.Write rs2("Total")
Hej nielle - så har jeg rodet lidt med det igen......
Jeg bruger pt. denne kode
Kommentar: <% Sql2 = "SELECT COUNT (*) AS Total From kommen WHERE kategori ='" & replace(request.querystring("id"),"'","''") & "'" Linie 264 rs2.Open Sql2, strDSN, 1 Response.Write rs2("Total")%>
Men jeg får denne fejl:
Microsoft JET Database Engine error '80040e07'
Data type mismatch in criteria expression.
/fisk/kategori.asp, line 264
Jeg har prøvet denne forespørgelse "SELECT COUNT (Id) AS Total From anm WHERE kategori ='74'" og der køret den helt fint den første post som er ID 74..... kan jeg har ret i, at der er noget galt med den "rigtige" forespørgelse:
Sql2 = "SELECT COUNT (*) AS Total From kommen WHERE kategori ='" & replace(request.querystring("id"),"'","''") & "'"???
Dine SQL-sætninger skal stemme ov erens med hvordan felterne er defineret i din e tabeller:
Hvis det er tekst felter skal der '-tegn rundt om i SQL-sætningen. Hvis det er tal felter skal det ikke noget uden om i SQL-sætningen. Hvis det er dato felter skal der #-tegn uden om i SQL-sætningen.
Det er tal jeg skal hentet, men det er ikke " & replace(request.querystring("id"), "'", "''") da dette er selve kategorien (i tabel anm.)hvor jeg anmeldelser i den ønskede kategori. Jeg ville/skal så hentet hvor mange kommentar der er i hver af enkel af de ønskede anmelder - ved ikke om jeg har forklaret mig godt nok?
Så jeg er kommet i tænke om man ikke skal lave forespørgelse samme med denne her
strSQL = "Select * From anm Where kategori = '" & replace(request.querystring("id"),"'","''") & "' ORDER BY id desc" ???
bør *altid* være der selv om du forventer at der er tale om tal eller andet ikke-tekst. Den beskytter simpelthen imod den hacker-teknink som kaldes for SQL-injection.
Det jeg mener er, at kan man ikke få den til at tælle kommentar i kategorien (i tabel anm.) i samme sætning, for det er jo her den finder de ønskede anmeldelser?
Mit råd er at du prøver at lave en løsning, hvor at du til at starte med ignorere al HTML-koden. På den måde kan du koncentrere dig om hvordan SQL-kaldene skal strikkes sammen i forhold til hinanden. Lige nu er det meget svært at overskue den logiske struktur i programmet for alt det HTML du har.
Jeg har prøvet det ene og det andet med det samme resultat :o((
Jeg har prøvet i access, at lave en SQL forespørgelse og den virker godt nok der, men jeg kan ikke flette den ind i mit script! Forespørgelse ser sådan ud:
SELECT DISTINCTROW kommen.kategori, Count(*) AS [Antal Of kommen] FROM kommen GROUP BY kommen.kategori og mit script ser sådan ud - uden HTML kode "næsten"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>
<body>
<%
intPage = Request("page") If isNumeric(intPage) = False Or intPage < 1 Then intPage = 1 End If
Set rs = Server.CreateObject("ADODB.RecordSet") Set rs2 = Server.CreateObject("ADODB.RecordSet") strSQL = "Select * From anm Where kategori = '" & replace(request.querystring("id"),"'","''") & "' ORDER BY id desc" strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("an.mdb") rs.Open strSQL, strDSN, 1
if rs.EOF then %> <b><br> <br> <br> <span class="kategori_tekst"> Der er desværre endnu ikke tilføjet nogle anmeldelse i denne kategori</span>
<% else
rs.PageSize = 10 rs.AbsolutePage = intPage intRecCount = rs.PageSize intPageCount = rs.PageCount '** Paging part end
Counter = 1 '**paging ændre do util linien: 'do until rs.eof Do While Not rs.EOF And intRecCount > 0 IF Counter = 4 Then Counter = 1 End if %>
Du skal huske at lukke rs2 når du er færdig med at bruge den. EDen bliver jo åbnet i hvert løkke-gennemløb - så det går galt 2. gang den er på vej igennem den ydre løkke.
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.