Ir para conteúdo

POWERED BY:

Arquivado

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

Filipe Mendonça

Recuperando Dados do BD

Recommended Posts

Olá Amigos, sou iniciante em ASP, mas arranho um pouco..

Meu caso é o seguinte, tenho 4 tabelas relacionais no meu BD Access:

 

Produtos

Categoria (categoria de produtos: perfumes, calças e etc..)

Fornecedores (Fornecedores dos produtos)

e Pedidos (Vendas ao Consumidor)

 

Agora é o seguinte, estou tentando recuperar todos os registros da tabela de produtos, porém, com o nome de cada categoria e fornecedor, e não o seu ID.

Até então tudo bem, consegui fazer um esquema que me traz isso, porém, não traz correto, ao invés de trazer um a um e falar quais são cada categoria e fornecedor de cada produto, essa consulta olha apenas pro primeiro ID dos campo categoria e fornecedor da tabela de produtos..

 

Pra verem melhor como está funcionando da uma olhada, o codigo e a pagina em funcionamento

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
' technocurve arc 3 asp vb mv block1/3 start
Dim moColor1, moColor2, moColor
moColor1 = "#FFFFFF"
moColor2 = "#CCCCCC"
moColor3 = "#FFFF00"
moColor = moColor1
' technocurve arc 3 asp vb mv block1/3 start
%>
<!--#include file="../Connections/db_fn.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; charset=iso-8859-1" />
<title>:: Lista de Fornecedores ::</title>
</head>

<body>

<%

'Instanciamos e Criamos o objeto de Conexão com o Banco de Dados
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open MM_db_fn_STRING

'Montamos a Variável SQL com a Instrução de Consulta no BD
strSQLp = "SELECT * FROM tb_produtos"

'Abrimos o RecordSet
Set RSp = Conn.Execute (strSQLp)

'Montamos a Variável SQL com a Instrução de Consulta no BD
strSQLc = "SELECT * FROM tb_categorias"

'Abrimos o RecordSet
Set RSc = Conn.Execute (strSQLc)

'Montamos a Variável SQL com a Instrução de Consulta no BD
strSQLf = "SELECT * FROM tb_fornecedores"

'Abrimos o RecordSet
Set RSf = Conn.Execute (strSQLf)

%>

<!-- Exibimos os Registros da Tabela -->
<table align="center" border="1">
	<tr>
		<th align="center">
			<b>
				Cod.Produto.
			</b>
		</th>
		<th align="center">
			<b>
				Descrição
			</b>
		</th>
		<th align="center">
			<b>
				Categoria
			</b>
		</th>
		<th align="center">
			<b>
				Fornecedor
			</b>
		</th>
		<th align="center">
			<b>
				Preço
			</b>
		</th>		
	</tr>	

	<%
	
	'Fazemos o Recorset Ler Até o Final do Arquivo/Tabela
	Do While Not RSp.EOF
	
	%>
		
	<tr <%
' technocurve arc 3 asp vb mv block2/3 start
Response.Write(" style='background-color:" & moColor & "' onMouseOver='this.style.backgroundColor=" & chr(34) & moColor3 & chr(34) & "' onMouseOut='this.style.backgroundColor=" & chr(34) & moColor & chr(34) & "'")
' technocurve arc 3 asp vb mv block2/3 start
%>>
		<td align="center">
			<% = RSp("cod_prod") %>
		</td>
		<td align="center">
			<% = RSp("nome_prod") %>
		</td>
		<td align="center">
			<% = RSc("nome_categoria") %>
		</td>
		<td align="center">
			<% = RSf("nome_fornec") %>
		</td>
		<td align="center">
			<%= "R" & formatcurrency(RSp.Fields.Item("preco_unit").Value)%>
		</td>				
  </tr>
	<%
' technocurve arc 3 asp vb mv block3/3 start
if moColor = moColor1 then
	moColor = moColor2
else
	moColor = moColor1
end if
' technocurve arc 3 asp vb mv block3/3 start
%>
	<%
	
	'Movemos o Cursor Para o Próximo Campo
	RSp.MoveNext
	
	'Fazemos um Loop
	Loop
	
	'Fechamos o sistema de conexão
	Conn.Close
	
	%>
</table>

<a href="default.asp">
	:: Menu Principal ::
</a>

</body>
</html>

www.deltadesigners.net/teste/flp/list_prod.asp

 

 

Ai pessoal, se puderem me ajudar eu agradeço.. vlw hein... abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

a melhor coisa mesmo é usar o INNER JOIN, mas lembre-se da 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 , um projeto bem estruturado

referente ao <DIV> construido com Divs, é necessário ajustar em todos os browsers, mas fica com mais acessibilidade, menos código, mais organizado, acessível a todos os browsers, inclusives os mobile´s e por aí vai. No entanto depende muito de seu layout. você pode misturar div's com tables, o ideal é saber usar cada um deles corretamente e o momento de usar cada um tbm.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a melhor coisa mesmo é usar o INNER JOIN, mas lembre-se da 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 , um projeto bem estruturado

referente ao <DIV> construido com Divs, é necessário ajustar em todos os browsers, mas fica com mais acessibilidade, menos código, mais organizado, acessível a todos os browsers, inclusives os mobile´s e por aí vai. No entanto depende muito de seu layout. você pode misturar div's com tables, o ideal é saber usar cada um deles corretamente e o momento de usar cada um tbm.

Amigão, entendo tudo o que diz, trabalho com folhas de estilos, mas nesse q mostrei apenas estou testando meus conhecimentos no ASP.

Só me diz uma coisa..

Como eu poderia montar a instrução SQL com o INNER JOIN, vi exemplos mas não esclareci minhas duvidas..

Meu BD está assim.

tb_produtos

cod_prod - autonumeracao

nome_prod - texto

cod_categorias - numero

cod_fornec - numero

preco_unit - numero

tb_categorias

cod_categoria - autonumeracao

nome_categoria - texto

tb_fornecedores

cod_fornec - autonumeracao

nome_fornec - texto

end_fornec - texto

tel_fornec

 

 

Bom a principio, os relacionamentos estão corretos, cod_categoria.tb_produtos c/ cod_categoria.tb_categoria, cod_fornec.tb_produtos c/ cod_fornec.tb_fornecedores.

 

até ai tudo bem.. agora só preciso saber como montar a sql com o inner join

 

 

Vlw galera

Compartilhar este post


Link para o post
Compartilhar em outros sites

para você entender olha este exemplo, onde temos a tabela produto e a tabela categorias, dentro de produto temos o campo produto.cod_categoia

SELECT INNER JOIN - Utilizamos o inner join em casos que é preciso montar um recordset lendo dados de mais de uma tabela. É uma forma de unir tabelas, e para isso é preciso que haja uma relação entre as mesmas, ou seja, um campo de ligação. É válido dizer que estes campos não precisam conter o mesmo nome, porém devem ser do mesmo tipo.

 

O objetivo desta página é exibir dados de duas tabelas, sendo a de categorias e a de produtos. Imagine você criando um e-commerce onde é preciso mostrar aos internautas quais produtos existem por categorias para que eles possam ter uma visão melhor dos dados contidos no banco de dados. É exatamente nesse caso que utilizamos o inner join.

 

A sintaxe do inner join não é difícil de entender, basta ter os relacionamentos das tabelas para saber como ligá-las e quais ligações são possíveis. De um modo geral, toda vez que citar um campo, especifique qual tabela ele pertence. Veja a sintaxe abaixo:

 

strSQL = "SELECT Categoria.Categoria, Produtos.Produto, Produtos.VRL_Unitario "
'Seleciona o campo Categoria da tabela Categoria, os campos Produto e VRL_Unitario da tabela Produtos

strSQL = strSQL & "FROM Categoria "
'A origem é a tabela Categoria. Isso significa que a tabela Categoria é o lado UM de um relacionamento, e com isso, o recordset é montado mais 
'rapidamente; não que esteja errado colocar a tabela Produtos, mas procure adotar esta regra de boas maneiras de programação em banco de dados.

strSQL = strSQL & "INNER JOIN Produtos "
'A tabela Categoria citada acima será ligada a tabela Produtos.

strSQL = strSQL & "ON Categoria.COD_Categoria = Produtos.COD_Categoria "
'Aqui é declarado quais os campos de ligação, sendo o campo COD_Categoria da tabela Categoria e o campo COD_Categoria da tabela Produtos.

strSQL = strSQL & "ORDER BY Categoria.Categoria, Produtos.Produto"
'É determinado a ordem em que o recordset será exibido, sendo primeiro por categoria e em seguida pelo produto.

Dim Conexao, rsProdutos, strSQL
strSQL = "SELECT Categoria.Categoria, Produtos.Produto, Produtos.VRL_Unitario "
strSQL = strSQL & "FROM Categoria "
strSQL = strSQL & "INNER JOIN Produtos "
strSQL = strSQL & "ON Categoria.COD_Categoria = Produtos.COD_Categoria "
strSQL = strSQL & "ORDER BY Categoria.Categoria, Produtos.Produto"
Call abre_conexao
Set rsProdutos = Server.CreateObject("ADODB.Recordset")
Set rsProdutos = Conexao.Execute(strSQL)
Response.Write "Produtos por Categoria<br>" 
While Not rsProdutos.EOF
  Response.Write "categoria: " & rsProdutos("Categoria") & " - "
  Response.Write "produto: " & rsProdutos("Produto") & " - "
  Response.Write "preço: " & FormatNumber(rsProdutos("VRL_Unitario"),2) & "<br>"
  rsProdutos.MoveNext 
Wend
rsProdutos.Close 
Call fecha_conexao
Set rsProdutos = Nothing
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

para você entender olha este exemplo, onde temos a tabela produto e a tabela categorias, dentro de produto temos o campo produto.cod_categoia

SELECT INNER JOIN - Utilizamos o inner join em casos que é preciso montar um recordset lendo dados de mais de uma tabela. É uma forma de unir tabelas, e para isso é preciso que haja uma relação entre as mesmas, ou seja, um campo de ligação. É válido dizer que estes campos não precisam conter o mesmo nome, porém devem ser do mesmo tipo.

 

O objetivo desta página é exibir dados de duas tabelas, sendo a de categorias e a de produtos. Imagine você criando um e-commerce onde é preciso mostrar aos internautas quais produtos existem por categorias para que eles possam ter uma visão melhor dos dados contidos no banco de dados. É exatamente nesse caso que utilizamos o inner join.

 

A sintaxe do inner join não é difícil de entender, basta ter os relacionamentos das tabelas para saber como ligá-las e quais ligações são possíveis. De um modo geral, toda vez que citar um campo, especifique qual tabela ele pertence. Veja a sintaxe abaixo:

 

strSQL = "SELECT Categoria.Categoria, Produtos.Produto, Produtos.VRL_Unitario "
'Seleciona o campo Categoria da tabela Categoria, os campos Produto e VRL_Unitario da tabela Produtos

strSQL = strSQL & "FROM Categoria "
'A origem é a tabela Categoria. Isso significa que a tabela Categoria é o lado UM de um relacionamento, e com isso, o recordset é montado mais 
'rapidamente; não que esteja errado colocar a tabela Produtos, mas procure adotar esta regra de boas maneiras de programação em banco de dados.

strSQL = strSQL & "INNER JOIN Produtos "
'A tabela Categoria citada acima será ligada a tabela Produtos.

strSQL = strSQL & "ON Categoria.COD_Categoria = Produtos.COD_Categoria "
'Aqui é declarado quais os campos de ligação, sendo o campo COD_Categoria da tabela Categoria e o campo COD_Categoria da tabela Produtos.

strSQL = strSQL & "ORDER BY Categoria.Categoria, Produtos.Produto"
'É determinado a ordem em que o recordset será exibido, sendo primeiro por categoria e em seguida pelo produto.

Dim Conexao, rsProdutos, strSQL
strSQL = "SELECT Categoria.Categoria, Produtos.Produto, Produtos.VRL_Unitario "
strSQL = strSQL & "FROM Categoria "
strSQL = strSQL & "INNER JOIN Produtos "
strSQL = strSQL & "ON Categoria.COD_Categoria = Produtos.COD_Categoria "
strSQL = strSQL & "ORDER BY Categoria.Categoria, Produtos.Produto"
Call abre_conexao
Set rsProdutos = Server.CreateObject("ADODB.Recordset")
Set rsProdutos = Conexao.Execute(strSQL)
Response.Write "Produtos por Categoria<br>" 
While Not rsProdutos.EOF
  Response.Write "categoria: " & rsProdutos("Categoria") & " - "
  Response.Write "produto: " & rsProdutos("Produto") & " - "
  Response.Write "preço: " & FormatNumber(rsProdutos("VRL_Unitario"),2) & "<br>"
  rsProdutos.MoveNext 
Wend
rsProdutos.Close 
Call fecha_conexao
Set rsProdutos = Nothing
%>

 

Cara, entendi... só um min q eu vo tentar..

Compartilhar este post


Link para o post
Compartilhar em outros sites

como te falei , naun é dificil...

basta ter os relacionamentos das tabelas para saber como ligá-las ,este é o melhor exemplo de INNER JOIN (produto + categoria)

Compartilhar este post


Link para o post
Compartilhar em outros sites

como te falei , naun é dificil...

basta ter os relacionamentos das tabelas para saber como ligá-las ,este é o melhor exemplo de INNER JOIN (produto + categoria)

Legal, olha só.. eu montei a instrução direto no access para ver seu funcionamento e depois vou testá-la no asp..

 

até então, no access funcionou... olha como ficou a instrução

 

SELECT tb_categorias.nome_categoria, tb_produtos.cod_prod, tb_produtos.nome_prod, tb_produtos.preco_unit
FROM tb_produtos INNER JOIN tb_categorias ON tb_produtos.cod_categoria = tb_categorias.cod_categoria
ORDER BY tb_categorias.nome_categoria, tb_produtos.nome_prod;

 

Ela me trouxe assim:

nome_categoria | cod_prod | nome_prod | preco_unit

camisetas | 1 | relogio 1 | 15,50

relogios | 2 | relogio 2 | 15,80

vestuario | 3 | relogio 3 | 17,50

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso mesmo...

parabéns...

Compartilhar este post


Link para o post
Compartilhar em outros sites

exemplo:

 

SELECT * FROM tabela a, tabela b, tabela c WHERE tabela a.acao_tipo = tabela b.cod_acao_tipo and tabela a.acao_modulo = tabela c.cod_acao_modulo WHERE cod_acao='"&acao&"'")

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.