Ir para conteúdo

POWERED BY:

Arquivado

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

rluiz1708

Exibir no ASP, SELECT INNER JOIN

Recommended Posts

Vamos lá que é meio complicado de explicar... :rolleyes:

 

Tenho uma página de consulta de subcategorias. Sendo que uma subcategoria pode pertencer a uma categoria.

Abaixo a imagem de como são as duas tabelas (categorias e subcategorias):

 

Imagem Postada

 

Tendo essas informações, acontece o seguinte: os relacionamentos feitos são nos campos CATEGORIAS.IdCategoria = SUBCATEGORIAS.IdCategoria.

Até aí tudo bem... mas na tabela que exibe o código da subcategoria, a categoria (não o código, seria o nome), o título e a descrição da subcategoria, como eu faria justamente pra, ao invés de exibir o código (número) da categoria pertencente a subcategoria, exibisse o nome da categoria a qual a subcategoria pertence.

 

Sei que com o SQL abaixo já consegueria:

select * from SUBCATEGORIAS INNER JOIN CATEGORIAS ON CATEGORIAS.IdCategoria = SUBCATEGORIAS.IdCategoria

Mas o seguinte erro é exibido na página ASP:

Tipo de erro:

ADODB.Recordset (0x800A0CC1)

O item não pode ser encontrado na coleção correspondente ao nome ou ao ordinal solicitado.

/pizzariaverdun/admin/consulta_subcategoria.asp, line 83

Se alguem puder me ajudar, agradeço muito.

 

Segue abaixo o código de toda a página:

 

<!-- #include file = "funcoes.asp" -->
<!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;" />
<title>Consultar Categorias</title>
<link href="css/padrao_admin_secoes_produtos.css" rel="stylesheet" type="text/css"/>
</head>

<body>

<fieldset id="subcategorias_filtro">
	<legend id="subcategorias_legenda">
	<font color="#cf0800">Filtro </font>
	</legend>
	
	<form name="subcategorias_form" method="post"  >

		<span>Filtrar por:</span>
	  <select name="filtro">
   		  <option disabled="disabled" selected="selected">Selecione</option>
   		  <option value="codigo">Código</option>
		  <option value="categoria">Categoria</option>
   		  <option value="titulo">Título</option>
	  </select>
	<input name="filtro_valor" type="text" />
		
		<button name="pesquisar" TYPE="submit" VALUE="Pesquisar" >
		<img src="images/icone_pesquisar.png" style="vertical-align: middle;" width="16px" height="16px" />
		 Pesquisar
		</button> 
	
	</form>
</fieldset>



<% 
 
dim filtrosub, filtrosub_valor, SQLfiltradoSub, SQLsub, SQLcategorias

filtrosub= request.Form("filtro")  
filtrosub_valor= request.Form("filtro_valor")



'Chama a conexão com o banco de dados
call abre_conexao


%>

<table id="subcategorias_tabela">
		<tr><th>Código</th>
		<th>Categoria</th>
		<th>Título</th>
		<th>Descrição</th></tr>
	<%
	
		
	if filtrosub="" or filtrosub_valor="" then 'Se os campos de filtro estiverem vazios
		'Atribui a variável SQLsub a condição que lista todos as subcategorias
		SQLsub= "select * from SUBCATEGORIAS"
		
		'Atribui a variavél SQLcategorias a condição que lista a qual categoria pertence a subcategoria
		SQLcategorias= "select * from SUBCATEGORIAS INNER JOIN CATEGORIAS ON CATEGORIAS.IdCategoria = SUBCATEGORIAS.IdCategoria"
			
		'Executa comando SQL que lista todas subcategorias cadastradas
		set rs= conexao.Execute(SQLsub)
		
		while not rs.eof 'Enquanto não for o fim da tabela do banco de dados
			response.write "<a href='altera_subcategoria.asp?codigo="
			response.write UCase(rs("IdSubCategoria"))
			response.write "'"  
			response.write "<tr>"
			response.write "<td>"
			response.write UCase(rs("IdSubCategoria"))
			response.write "</td>"
	
			'Executa o comando SQL que lista a qual categoria pertence a subcategoria
			set rx= conexao.Execute(SQLcategorias)
			response.write "<td>"
			response.write UCase(rs("Titulo"))
			response.write "</td>"
			
			response.write "<td>"
			response.write UCase(rs("SUBCATEGORIAS.Titulo"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("Descricao"))
			response.write "</td>"
	
			response.write "</tr>"
			response.write "</a>"
	
			rs.movenext
		wend
	else if filtrosub="codigo" then 'Se o campo de filtro está selecionado a opção Código
		'Atribui a variável SQL a condição que lista o código digitado (busca exata)
		SQLfiltradoSub= "select * from SUBCATEGORIAS where IdSubCategoria = "&filtrosub_valor&""
		
		'Executa comando SQL que lista o código da subcategoria digitado
		set rs= conexao.Execute(SQLfiltradoSub)
		
		while not rs.eof 'Enquanto não for o fim da tabela do banco de dados
			response.write "<a href='altera_subcategoria.asp?codigo="
			response.write UCase(rs("IdSubCategoria"))
			response.write "'"  
			response.write "<tr>"
			response.write "<td>"
			response.write UCase(rs("IdSubCategoria"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("IdCategoria"))
			response.write "</td>"
			
			response.write "<td>"
			response.write UCase(rs("Titulo"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("Descricao"))
			response.write "</td>"
	
			response.write "</tr>"
			response.write "</a>"
	
			rs.movenext
		wend
		rs.close
		filtrosub=""
		filtrosub_valor=""
		SQLfiltradoSub=""
	
	else if filtrosub="categoria" then 'Se o campo de filtro está selecionado a opção Categoria
		'Atribui a variável SQL a condição que lista a categoria da subcategoria digitada (busca aproximada)
		SQLfiltradoSub= "select * from SUBCATEGORIAS INNER JOIN CATEGORIAS ON CATEGORIAS.IdCategoria = SUBCATEGORIAS.IdCategoria WHERE CATEGORIAS.Titulo like '%"&filtrosub_valor&"%'"
		
				
		'Executa comando SQL que lista o título da categoria digitada
		set rs= conexao.Execute(SQLfiltradoSub)
		
		while not rs.eof 'Enquanto não for o fim da tabela do banco de dados
			response.write "<a href='altera_subcategoria.asp?codigo="
			response.write UCase(rs("IdSubCategoria"))
			response.write "'"  
			response.write "<tr>"
			response.write "<td>"
			response.write UCase(rs("IdSubCategoria"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("IdCategoria"))
			response.write "</td>"
			
			response.write "<td>"
			response.write UCase(rs("Titulo"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("Descricao"))
			response.write "</td>"
	
			response.write "</tr>"
			response.write "</a>"
	
			rs.movenext
		wend
		rs.close
		filtrosub=""
		filtrosub_valor=""
		SQLfiltradoSub=""
		
		
		
	else if filtrosub="titulo" then 'Se o campo de filtro está selecionado a opção Título
		'Atribui a variável SQL a condição que lista o título da subcategoria digitado (busca aproximada)
		SQLfiltradoSub= "select * from SUBCATEGORIAS where Titulo like '%"&filtrosub_valor&"%'"
		
		'Executa comando SQL que lista o código da subcategoria digitado
		set rs= conexao.Execute(SQLfiltradoSub)
		
		while not rs.eof 'Enquanto não for o fim da tabela do banco de dados
			response.write "<a href='altera_subcategoria.asp?codigo="
			response.write UCase(rs("IdSubCategoria"))
			response.write "'"  
			response.write "<tr>"
			response.write "<td>"
			response.write UCase(rs("IdSubCategoria"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("IdCategoria"))
			response.write "</td>"
			
			response.write "<td>"
			response.write UCase(rs("Titulo"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("Descricao"))
			response.write "</td>"
	
			response.write "</tr>"
			response.write "</a>"
	
			rs.movenext
		wend
		rs.close
		filtrosub=""
		filtrosub_valor=""
		SQLfiltradoSub=""
		
	
	end if
	end if
	end if
	end if
		

	%>
	</table>
	

<p>

<% 

call fecha_conexao
%>
	  
	  
	  
	  
</p>
<p> </p>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você utilizar INNER JOIN não é interessante colocar * (alias, isso não é interessante em momento nenhum).

 

Ao invés de *, você tem que informar somente campos que você precisa acessar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hargon,

 

Pesquisando mais aqui pelo fórum e com a dica que você me deu, achei melhor modificar o banco de dados.

O campo Titulo da tabela CATEGORIAS virou Titulocategoria; e o campo Titulo da tabela SUBCATEGORIAS virou TituloSubcategoria. Assim eu pude diferenciar nas consultas do SQL (o que não tinha muita diferença já que eu colocava TABELA.CAMPO) e o mais importante... como mostrar no ASP, já que quando eu colocava CATEGORIAS.Titulo ele não aceitava e quando eu colocava só Titulo ele não sabia de qual tabela era (por isso mudei o nome dos campos nas tabelas).

 

Segue abaixo como ficou o SQL:

select SUBCATEGORIAS.IdSubCategoria, CATEGORIAS.TituloCategoria, SUBCATEGORIAS.TituloSubCategoria, SUBCATEGORIAS.Descricao from SUBCATEGORIAS INNER JOIN CATEGORIAS ON CATEGORIAS.IdCategoria = SUBCATEGORIAS.IdCategoria

E segue tbm todo o código da página pra quem qusier ver ou entender melhor:

<!-- #include file = "funcoes.asp" -->
<!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;" />
<title>Consultar Categorias</title>
<link href="css/padrao_admin_secoes_produtos.css" rel="stylesheet" type="text/css"/>
</head>

<body>

<fieldset id="subcategorias_filtro">
	<legend id="subcategorias_legenda">
	<font color="#cf0800">Filtro </font>
	</legend>
	
	<form name="subcategorias_form" method="post"  >

		<span>Filtrar por:</span>
	  <select name="filtro">
   		  <option disabled="disabled" selected="selected">Selecione</option>
   		  <option value="codigo">Código</option>
		  <option value="categoria">Categoria</option>
   		  <option value="titulo">Título</option>
	  </select>
	<input name="filtro_valor" type="text" />
		
		<button name="pesquisar" TYPE="submit" VALUE="Pesquisar" >
		<img src="images/icone_pesquisar.png" style="vertical-align: middle;" width="16px" height="16px" />
		 Pesquisar
		</button> 
	
	</form>
</fieldset>



<% 
 
dim filtrosub, filtrosub_valor, SQLfiltradoSub, SQLsub, SQLcategorias

filtrosub= request.Form("filtro")  
filtrosub_valor= request.Form("filtro_valor")



'Chama a conexão com o banco de dados
call abre_conexao


%>

<table id="subcategorias_tabela">
		<tr><th>Código</th>
		<th>Categoria</th>
		<th>Título</th>
		<th>Descrição</th></tr>
	<%
	
		
	if filtrosub="" or filtrosub_valor="" then 'Se os campos de filtro estiverem vazios
				
		'Atribui a variavél SQLcategorias a condição que lista a qual categoria pertence a subcategoria
		SQLcategorias= "select SUBCATEGORIAS.IdSubCategoria, CATEGORIAS.TituloCategoria, SUBCATEGORIAS.TituloSubCategoria, SUBCATEGORIAS.Descricao from SUBCATEGORIAS INNER JOIN CATEGORIAS ON CATEGORIAS.IdCategoria = SUBCATEGORIAS.IdCategoria"
			
		'Executa comando SQL que lista todas subcategorias cadastradas e a qual categoria pertence a subcategoria
		set rs= conexao.Execute(SQLcategorias)
		
		while not rs.eof 'Enquanto não for o fim da tabela do banco de dados
			response.write "<a href='altera_subcategoria.asp?codigo="
			response.write UCase(rs("IdSubCategoria"))
			response.write "'"  
			response.write "<tr>"
			response.write "<td>"
			response.write UCase(rs("IdSubCategoria"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("TituloCategoria"))
			response.write "</td>"
			
			response.write "<td>"
			response.write UCase(rs("TituloSubCategoria"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("Descricao"))
			response.write "</td>"
	
			response.write "</tr>"
			response.write "</a>"
	
			rs.movenext
		wend
	else if filtrosub="codigo" then 'Se o campo de filtro está selecionado a opção Código
		'Atribui a variável SQL a condição que lista o código digitado (busca exata)
		SQLfiltradoSub= "select * from SUBCATEGORIAS where IdSubCategoria = "&filtrosub_valor&""
		
		'Executa comando SQL que lista o código da subcategoria digitado
		set rs= conexao.Execute(SQLfiltradoSub)
		
		while not rs.eof 'Enquanto não for o fim da tabela do banco de dados
			response.write "<a href='altera_subcategoria.asp?codigo="
			response.write UCase(rs("IdSubCategoria"))
			response.write "'"  
			response.write "<tr>"
			response.write "<td>"
			response.write UCase(rs("IdSubCategoria"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("TituloCategoria"))
			response.write "</td>"
			
			response.write "<td>"
			response.write UCase(rs("TituloSubCategoria"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("Descricao"))
			response.write "</td>"
	
			response.write "</tr>"
			response.write "</a>"
	
			rs.movenext
		wend
		rs.close
		filtrosub=""
		filtrosub_valor=""
		SQLfiltradoSub=""
	
	else if filtrosub="categoria" then 'Se o campo de filtro está selecionado a opção Categoria
		'Atribui a variável SQL a condição que lista a categoria da subcategoria digitada (busca aproximada)
		SQLfiltradoSub= "select * from SUBCATEGORIAS INNER JOIN CATEGORIAS ON CATEGORIAS.IdCategoria = SUBCATEGORIAS.IdCategoria WHERE CATEGORIAS.TituloCategoria like '%"&filtrosub_valor&"%'"
		
				
		'Executa comando SQL que lista o título da categoria digitada
		set rs= conexao.Execute(SQLfiltradoSub)
		
		while not rs.eof 'Enquanto não for o fim da tabela do banco de dados
			response.write "<a href='altera_subcategoria.asp?codigo="
			response.write UCase(rs("IdSubCategoria"))
			response.write "'"  
			response.write "<tr>"
			response.write "<td>"
			response.write UCase(rs("IdSubCategoria"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("TituloCategoria"))
			response.write "</td>"
			
			response.write "<td>"
			response.write UCase(rs("TituloSubCategoria"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("Descricao"))
			response.write "</td>"
	
			response.write "</tr>"
			response.write "</a>"
	
			rs.movenext
		wend
		rs.close
		filtrosub=""
		filtrosub_valor=""
		SQLfiltradoSub=""
		
		
		
	else if filtrosub="titulo" then 'Se o campo de filtro está selecionado a opção Título
		'Atribui a variável SQL a condição que lista o título da subcategoria digitado (busca aproximada)
		SQLfiltradoSub= "select SUBCATEGORIAS.IdSubCategoria, CATEGORIAS.TituloCategoria, SUBCATEGORIAS.TituloSubCategoria, SUBCATEGORIAS.Descricao from SUBCATEGORIAS INNER JOIN CATEGORIAS ON CATEGORIAS.IdCategoria = SUBCATEGORIAS.IdCategoria where TituloSubCategoria like '%"&filtrosub_valor&"%'"
		
		'Executa comando SQL que lista o código da subcategoria digitado
		set rs= conexao.Execute(SQLfiltradoSub)
		
		while not rs.eof 'Enquanto não for o fim da tabela do banco de dados
			response.write "<a href='altera_subcategoria.asp?codigo="
			response.write UCase(rs("IdSubCategoria"))
			response.write "'"  
			response.write "<tr>"
			response.write "<td>"
			response.write UCase(rs("IdSubCategoria"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("TituloCategoria"))
			response.write "</td>"
			
			response.write "<td>"
			response.write UCase(rs("TituloSubCategoria"))
			response.write "</td>"
	
			response.write "<td>"
			response.write UCase(rs("Descricao"))
			response.write "</td>"
	
			response.write "</tr>"
			response.write "</a>"
	
			rs.movenext
		wend
		rs.close
		filtrosub=""
		filtrosub_valor=""
		SQLfiltradoSub=""
		
	
	end if
	end if
	end if
	end if
		

	%>
	</table>
	

<p>

<% 

call fecha_conexao
%>
	  
	  
	  
	  
</p>
<p> </p>
</body>
</html>

Obrigado! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

um dica k é sempre legal tb, a impôrtancia de uma modelagem de dados bem definida até os mínimos detalhes, como os campos de relacionamentos, um velho ditado diz, que um relacionamento bem definido é a alma do aplicativo, pois daí saem todas as consultas e operações com o banco, influenciando diretamente na otimização e performance do aplicativo

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.