111 messaggi dal 03 marzo 2003
Salve, ho un database con delle tipologie di prodotti, ho il menu che mi estrae dal database
la lista categorie:

Caschi
Guanti
Giacche

ecc... questo il codice

<%
sezione = Request.QueryString("sezione")
categoria = Request.QueryString("cat")
marche = Request.QueryString("marche")
attivo = Request.QueryString("attivo")
home = Request.QueryString("home")

ordine = "categoria"

set conn = server.createobject("adodb.connection")
DSNtemp="DRIVER={Microsoft Access Driver (*.mdb)}; "

' in locale
DSNtemp=dsntemp & "DBQ=" & server.mappath("gestione/database.mdb")

conn.Open DSNtemp
sqlstmt = "SELECT * FROM categoria order by " & ordine
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sqlstmt, conn, 3, 3
TotalRecs = rs.recordcount
x = 0
For x = 1 to 100
If rs.eof then
Exit For
Else

id = rs("id")
categoria = rs("categoria")
%>

<table border=0 class=testo bordercolor="#000000" style="border-collapse: collapse" cellpadding="0" cellspacing="0" height="20">
<tr>
<td>

<li><a href="prodotti.asp?sezione=<%=sezione%>&cat=<%=categoria%>"><%=categoria%></a>

</td>
</tr>
</table>

<%
rs.MoveNext
End If
Next
%>

il problema è che mi mostra la categoria anche se non c'è dentro niente, vorrei che mostrasse la categoria solo se c'è qualcosa nel database relativo a quella categoria.

Ho pensato ad un conteggio dei records, ho trovato lo script ma non saprei integrarlo:

<%

'rilevo il path del database
Dim dbPath
dbPath = Server.MapPath("gestione/Database.mdb")

'connessione al database
Dim cn, rs, sql
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source="&dbpath

'eseguo la SQL per contare i record
sql = "SELECT COUNT(marche) AS RECORD_COUNT FROM annunci"

Set rs = cn.Execute(sql)

'visualizzo il numero di record della tabella
Response.Write("La tabella contiene "&rs("RECORD_COUNT")&" prodotti")

'chiudo recordset e connessione e libero le risorse
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
%>

Spero che qualcuno mi risolva l'emigma...

Gab ;)
Modificato da klinik il 20 ottobre 2010 14.36 -
710 messaggi dal 13 novembre 2008
Contributi
se i prodotti di una determinata categoria sono in un altra tabella, quando hai l'id della categoria fai una query per verificare se ci sono prodotti utilizzando il secondo codice

...hai questo

categoria = rs("categoria")...


..query

sql = "SELECT COUNT(prodotto) AS RECORD_COUNT FROM categoria"

(riscrivila per la tua tabella categoria)

...ottieni questo

rs("RECORD_COUNT")

...se è >0 c'è qualcosa, ...allora ecc.ecc.
678 messaggi dal 12 maggio 2001
www.idioteca.it
Non puoi semplicemente fare un controllo prima di "stampare" la categoria? In questo modo eviti di scrivere html inutilmente.

For x = 1 to 100
If rs.eof then
Exit For
Else

id = rs("id")
categoria = rs("categoria")
if categoria <> "" then
%>

<table border=0 class=testo bordercolor="#000000" style="border-collapse: collapse" cellpadding="0" cellspacing="0" height="20">
<tr>
<td>

<li><a href="prodotti.asp?sezione=<%=sezione%>&cat=<%=categoria%>"><%=categoria%></a>

</td>
</tr>
</table>

<%
end if

rs.MoveNext
End If
Next

Lo vedo solo ora... ma perchè quel for x= 1 to 100?
Non sarebbe meglio un while not rs.eof? In questo modo non stampi niente se non c'è niente e stampi solo quello che serve, se c'è qualcosa, ma soprattutto, esci subito se non hai così tante categorie.

Se vogliamo fare le cose per bene, farei il ciclo solo sul tag <li> o eventualmente sul <tr>, ma qui non so comè strutturata la tua pagina.
ciao
710 messaggi dal 13 novembre 2008
Contributi
klinik ha scritto:
il problema è che mi mostra la categoria anche se non c'è dentro niente, vorrei che mostrasse la categoria solo se c'è qualcosa nel database relativo a quella categoria.
710 messaggi dal 13 novembre 2008
Contributi
volevo capire se questo era un dato incontrovertibile, cioè c'è una tabella categoria?

sennò le mie ipotesi di sviluppo non ci incastrano....
111 messaggi dal 03 marzo 2003
Ho risolto così:


<%
Response.Buffer = true
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
Response.AddHeader "cache-control", "private"
Session.LCID = 1040 '::::::::::::::::::::::::::::::::::::: Datata e ora Italiana


'::::::::::::::::::::::::: Connessione database.mdb


Conn_String = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("database.mdb")

Set conn = Server.CreateObject("ADODB.Connection")
conn.open Conn_String


sql = "select * from categoria order by Categoria asc"
set rst = Conn.Execute (sql)

Do While Not rst.EOF


Categoria= rst("categoria")
sqlcount = "SELECT count(categoria) FROM annunci where Categoria='" & rst("categoria") & "' "
Set RScounts = Conn.Execute(sqlcount)
rcounts = RScounts(0)

%>


<% If rcounts<>0 then %>

<li><%=rst("categoria")%></a>


<%
Response.Write ("(" & rcounts & ")")
Response.Write "<br>"
%>


<% end if %>


<%
rst.MoveNext
loop
%>

Grazie a tutti ;-)
678 messaggi dal 12 maggio 2001
www.idioteca.it
klinik ha scritto:
Ho risolto così:


<%
<li><%=rst("categoria")%></a>




attento che c'è qualcosa nell'html che non mi convince (o hai semplicemente scritto male qui?)
Inoltre io penserei ad una query unica che tira fuori rcounts e categoria...pensa ad un group by categoria degli annunci e in join recuperi la descrizione della categoria.
In questo modo hai una sola query ed un'unica interrogazine del db. Nel caso non ci siano annunci per una categoria, questa viene esclusa dalla join stessa e poi per il resto stampi il tutto come preferisci.

Es.

<%=rst("categoria") & "(" & rcounts & ")<br />" %>

ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.