Problema select su recordset nidificati

  • Creatore Discussione Creatore Discussione surya
  • Data di inizio Data di inizio

surya

Nuovo Utente
9 Giu 2009
8
0
0
Ciao a tutti, ho un database con due tabelle relazionate tipo uno a molti. Sulla prima tabella ho 31 records con 31 nomi di sezioni (uno). Al relativo ID di questa tabella é relazionato il campo dedicato rel_id dell'altra tabella contenente i contenuti delle sezioni (molti).

Ho questo codice con due cicli recordset nidificati, ma non funziona e non capisco perché, ovviamente se cambio la seconda select e metto:

rsImg.Open "SELECT * FROM links WHERE rel_id = 1", cn, 1

funziona, ma ovviamente per tutte le sezioni viene visualizzato il medesimo contenuto, se invece metto come nel codice sotto, si pianta. Ho anche provato a fare una sql estrapolando i dati dalle due tabelle, ma non sono riuscito. Qualcuno puó dirmi dove sbaglio? :)
Grazie mille!


<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file = "setup.asp"-->
<%
Call CnOpen()
Set rsImg = Server.CreateObject("ADODB.Recordset")
Set rsLoop = Server.CreateObject("ADODB.Recordset")
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Paginazione a colonne sui record di un db in ASP</title>
</head>
<body>
<%
rsLoop.Open "SELECT * FROM sections", cn, 1
id = rsLoop("id")
While rsLoop.EOF = False
%>
<table border="1">
<tr>
<td colspan="3"><%=rsLoop("section")%><%=rsLoop("id")%></td>
</tr>
<tr>
<%
' IMPOSTO A 0 IL CONTATORE
contatore = 0
' APRO IL RECORDSET
rsImg.Open "SELECT * FROM links WHERE rel_id = ",&id, cn, 1
' ESEGUO IL CICLO
While rsImg.EOF = False
' IMPOSTO LA PAGINAZIONE A 3 COLONNE ED N RIGHE
' IN FUNZIONE DEL NUMERO DI RECORD PRESENTI NEL DB
If contatore = 3 Then
contatore = 0
Response.Write "</tr><tr>"
End If
%>
<td><%=rsImg("url_image")%></td>
<%
rsImg.MoveNext
' INCREMENTO IL VALORE DEL CONTATORE
contatore = contatore + 1
Wend
rsImg.Close
%>
</tr>
</table>
<%
rsLoop.MoveNext
Wend
rsLoop.Close
%>
</body>
</html>
<%
Call CnClose()
%>
 
Ciao Pole, grazie per la risposta. Ho appena risolto, in realtá quella sintassi andava bene, era la parola id che dava fastidio, stranissimo ho provato a cambiare nome della variabile e tutto va bene. Questo script carica da un database dati e li dispone a quadricola come da tutorial di Luca Ruggiero trovato su mrwebmaster.it

I dati vengono estrapolati da due tabelle relazionate, ottimo per rappresentare marche di aziende e relativi prodotti.

Adesso funziona. Posto qui sotto il codice corretto in modo che rimanga per chi un domani dovesse avere bisogno. Adesso sto cercando qualcosa che mi estrapoli i dati di forma random, se conosci qualche tutorial che mi aiuti a farlo segnalamelo, grazie.

Codice:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file = "setup.asp"-->
<%
Call CnOpen()
Set rsImg = Server.CreateObject("ADODB.Recordset")
Set rsLoop = Server.CreateObject("ADODB.Recordset")
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="style.css" rel="stylesheet" type="text/css" />
<title>categorie e prodotti</title>
</head>
<body>
<%
rsLoop.Open "SELECT * FROM sections", cn, 1
While rsLoop.EOF = False
sect = rsLoop("id")
%>
<table cellpadding="3" cellspacing="3" align="center">
<tr valign="top">
<td colspan="5" align="left"><h1><%=rsLoop("section")%></h1></td>
</tr>
<tr>
<%
' IMPOSTO A 0 IL CONTATORE
contatore = 0
' APRO IL RECORDSET
rsImg.Open "SELECT TOP 15 * FROM links WHERE rel_id = "&sect, cn, 1
' ESEGUO IL CICLO
While rsImg.EOF = False
' IMPOSTO LA PAGINAZIONE A 3 COLONNE ED N RIGHE
' IN FUNZIONE DEL NUMERO DI RECORD PRESENTI NEL DB
If contatore = 5 Then
contatore = 0
Response.Write "</tr><tr>"
End If
%>
<td><a href="<%=rsImg("url_site")%>" target="_blank" title="<%=rsImg("descriptions")%>"><img src="<%=rsImg("url_image")%>" border="4" alt="" /></a></td>
<%
rsImg.MoveNext
' INCREMENTO IL VALORE DEL CONTATORE
contatore = contatore + 1
Wend
rsImg.Close
%>
</tr>
<tr>
<td colspan="5" align="right"><h3><a target="_blank" href="details.asp?sec=<%=sect%>">More details of <%=rsLoop("section")%></a></h3></td>
</tr>
</table>
<%
rsLoop.MoveNext
Wend
rsLoop.Close
%>
</body>
</html>
<%
Call CnClose()
%>
 
Ciao Pole, grazie per la risposta. Ho appena risolto, in realtá quella sintassi andava bene..
...
Figurati :)

Comunque no, non andava bene quella sintassi, perchè originariamente la sintassi che hai postato era:
rsImg.Open "SELECT * FROM links WHERE rel_id = ",&id, cn, 1
mentre ora, correttamente, hai tolto quella virgola e quindi il tutto funziona ;)

:byebye;
 
Hai ragione é vero! Lo vedo adesso che mi stai facendo notare questa cosa, io dalla tua risposta avevo capito che ci voleva una seconda & e la virgola non l'avevo completamente considerata. Il fatto strano é che si piantava, non dava nessun errore di sintassi!

Certo che la mia concentrazione é davvero alta eh?... :dormo:

Grazie ancora!
:)
 
ciao, ritorno sullo stesso post per comoditá.

Vorrei implementare sul codice che ho postato sopra, l'estrazione dei primo quindici records di forma random.

Facendo ricerche, sto cercando di implementare per la precisione il codice contenuto in questo tutorial

https://www.mrw.it/asp/articoli/record-casuali-asp-access_850.html

La cosa non mi sta riuscendo propriamente bene, nel senso che i dati vengono si messi random ma non lo stesso numero per tutte le sezioni.

es. la prima macrocategoria ne mette 15 random, la seconda macrocategoria ne mette 7 random, la terza 3, ecc.

Se qualcuno avesse una dritta, grzie mille.

posto il codice del body per brevitá

<body>
<%
rsLoop.Open "SELECT * FROM sections", cn, 1
While rsLoop.EOF = False
sect = rsLoop("id")
%>
<table cellpadding="3" cellspacing="3" align="center">
<tr valign="top">
<td colspan="5" align="left"><h1><%=rsLoop("section")%></h1></td>
</tr>
<tr>
<%
' IMPOSTO A 0 IL CONTATORE
contatore = 0
' APRO IL RECORDSET
rsImg.Open "SELECT * FROM links WHERE rel_id = "&sect, cn, 1
'rsImg.MoveFirst
Randomize()
rsImg.Move Rnd * CInt(rsImg.RecordCount) - 1
' ESEGUO IL CICLO
While rsImg.EOF = False

' IMPOSTO LA PAGINAZIONE A 3 COLONNE ED N RIGHE
' IN FUNZIONE DEL NUMERO DI RECORD PRESENTI NEL DB
If contatore = 5 Then
contatore = 0
Response.Write "</tr><tr>"
End If
%>
<td><a href="<%=rsImg("url_site")%>" target="_blank" title="<%=rsImg("descriptions")%>"><img src="<%=rsImg("url_image")%>" border="4" alt="" /></a></td>
<%
rsImg.MoveNext
' INCREMENTO IL VALORE DEL CONTATORE
contatore = contatore + 1
Wend
rsImg.Close
%>
</tr>
<tr>
<td colspan="5" align="right"><h3><a target="_blank" href="gallery.asp?sec=<%=sect%>">More Galleries of <%=rsLoop("section")%></a></h3></td>
</tr>
</table>
<%
rsLoop.MoveNext
Wend
rsLoop.Close
%>
</body>
</html>
<%
Call CnClose()
%>
 

Discussioni simili