Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Helinho Coelho

[Resolvido] Problemas com "Loop ou Repeat Region" em SELE

Recommended Posts

Olá,

 

Eu tenho duas tabelas para montar um Menu Dinâmico através de um banco de dados MySQL. As tabelas são: "SESSOES" e "SUBSESSOES", elas estão relacionadas respectivamente pelos campos "id" e "cod_id" no intuito de montar um menu dinâmico em uma página ASP (produtos.asp).

 

A tabela "SESSOES" tem:

 

[id]..[sessao]

.1.....Menu 01

.2.....Menu 02

.3.....Menu 03

.4.....Menu 04

 

 

A tabela "SUBSESSOES" tem:

 

[id]..[cod_id]..[subsessao]

.1........1......Submenu 01

.2........1......Submenu 02

.3........1......Submenu 03

.4........2......Submenu 04

.5........2......Submenu 05

.6........2......Submenu 06

.7........3......Submenu 07

.8........3......Submenu 08

.9........3......Submenu 09

.10.......4......Submenu 10

.11.......4......Submenu 11

 

 

• O SELECT da busca no BD é: "SELECT * FROM sessoes INNER JOIN subsessoes ON (sessoes.id = subsessoes.cod_id)"

• O Recordset é "RSmenu"

• Dentro da página "produtos.asp" eu tenho um Repeat Region montando o Menu Dinâmico como se segue abaixo:

 

 

<%
Dim Repeat__numRows
Dim Repeat__index

Repeat__numRows = -1
Repeat__index = 0
RSmenu_numRows = RSmenu_numRows + Repeat__numRows
%>


<% While ((Repeat__numRows <> 0) AND (NOT RSmenu.EOF)) %>

 <table>

   <tr> 
     <td>
     <b><%=(RSmenu.Fields.Item("sessao").Value)%></b>
     </td>
   </tr>

   <tr>
     <td>
     <%=(RSmenu.Fields.Item("subsessao").Value)%>
     </td>
   </tr>

   <tr>
     <td>
     <img src="images/linha.png"/>
     </td>
   </tr>

 </table>

<% Repeat__index = RRepeat__index+1
  Repeat__numRows = Repeat__numRows-1
  RSmenu.MoveNext()

  Wend
%>

 

 

Esse código acima está me retornando as informações colocando o nome da "sessao" correspondente a cada "subsessao" gerada, como se segue na imagem abaixo:

menuERRO.gif

 

 

Porém eu gostaria que o código me retornasse o nome da "sessao" e logo abaixo toda respectiva "subssessao". Ou seja, eu gostaria que o código me retornasse igualzinho a imagem que se segue abaixo:

menuCERTO.gif

 

 

O quê preciso mudar para o Menu ficar assim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é Vinícius, eu já havia tentado o GROUP BY mas não deu certo. Mesmo assim agradeço a tentativa! O meu caso está mesmo na questão do loop ou repeat region, tanto que se eu fizer apenas um loop o Menu e os Submenus vêm listados corretamentes com uma linha de Sessão e abaixo as subsessões correspondentes. Mas quando vou gerar o loop da 2ª sessão em diante aí dá um retorno de listagem que não quero.

 

Vou ficar aguardando uma outra ajuda ou sugestão, mas valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentou fazendo assim:

sql= "select * from sessao"
....
...
while not rs.eof
response.write rs("sessao")
sql2="select * from subsessao where codid ='"&rs("id")&"'"
...
response.write rs2("subsessao")
...
rs.movext
wend

 

A ideia seria mais ou menos essa, tenho algumas estruturas montadas assim, mas onde estou agora não tenho como postar um exemplo que esteja funcionando, mas caso precise, mais tarde posso postar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei montar conforme sua sugestão e não deu certo Vinícius. Mas eu pelo menos aproveitei a sua ideia de dois SQLs e então montei com dois RecordSets (RSmenu e RSsubmenu), sendo:

 

RSmenu com o select: "SELECT * FROM sessoes"

RSsubmenu com o select: "SELECT * FROM subsessoes WHERE cod_id ='"&RSmenu("id")&"'"

 

Sendo assim eu mudei a programação do Loop trabalhando com o Do While/Loop como se segue abaixo:

 

<%
   Do While Not RSmenu.EOF
   Response.Write "<tr><td>"
   Response.Write "<b>"&RSmenu("sessao")&"</b>"
   Response.Write "</td></tr>"

	 If Not RSsubmenu.EOF Then
		Response.Write "<tr><td>"

		Do While Not RSsubmenu.EOF
		Response.Write "[+] "&RSsubmenu("subsessao")
		Response.Write "<br>"
		RSsubmenu.MoveNext
		Loop

		Response.Write "</td></tr>"
		Response.Write "<tr><td><img src='linha.gif'/></td></tr>"
	 End If

   RSmenu.MoveNext
   Loop
%>                                    

 

Com esse código aí quase deu certo, agora só precisamos fazer com que as "sessoes" que se seguem no Loop busquem suas respectivas "subssessoes". Na imagem abaixo dá pra você ter uma idéia de como ficou agora:

menuLOOP.gif

 

Ou seja, a Sessão "Acessórios" está puxando suas respectivas Subsessões porém as Sessões "Musculação", "Cardiovascular" e "Esportes" não o estão fazendo. Porque será? O quê será que precisamos mudar no Loop para dar certo?

 

Acho que estamos quase lá!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uhuuuul!!! Consegui Vinícius... quebrei um bocado a cabeça aqui mas consegui montar o Loop perfeito. O quê fiz dessa vez foi montar de acordo com a sua instrução inicial. Eu não estava colocando o SQL dentro do Loop... esse era o problema. E o pior de tudo é que você já havia me passado a dica da sintaxe correta, mas eu deixei passar.

 

Bom, agora o meu código com o Menu Dinâmico funcionando ficou assim:

 

1) Eu tenho um SQL (com outro nome) mas que SETa o RSmenu com o select: "SELECT * FROM sessoes"

2) Eu tenho o SQL que fica dentro do Loop e SETa o RSsubmenu com o select: "SELECT * FROM subsessoes WHERE cod_id ='"&RSmenu("id")&"'"

 

<%
Do While Not RSmenu.EOF
Response.Write "<tr><td>"
Response.Write "<b>"&RSmenu("sessao")&"</b>"
Response.Write "</td></tr>"

		SQL = "SELECT * FROM subsessoes WHERE cod_id ='"&RSmenu("id")&"'"
		Set RSsubmenu = conexao.execute(SQL)

	If  Not RSsubmenu.EOF Then
		Response.Write "<tr><td>"
		Do While Not RSsubmenu.EOF
		Response.Write "[+] "&RSsubmenu("subsessao")
		Response.Write "<br>"
		RSsubmenu.MoveNext
		Loop
		Response.Write "</td></tr>"
		Response.Write "<tr><td><img src='linha.gif'/></td></tr>"
	End If

RSmenu.MoveNext
Loop
%>                                    

 

 

Agora o meu Menu Dinâmico está funcionando perfeitamente e ficou assim:

menuOK.gif

 

 

 

Valeu pela ajuda Vinícius e podem postar este tópico como RESOLVIDO!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.