HOME      QUASI-BLOG        CONTATO         
 
 
 


ASP Listando por um número arbitrário de Colunas  retornar

 

Nosso Objetivo:  Listar os resultados de uma consulta em ou mais colunas

 

Continuando o exemplo de como desmembrar um recordset por n colunas mostrado no artigo anterior (Listando por Colunas), a nossa única alteração e alterar a rotina lista dados para calcularmos o número do elemento que será exibido em função do número da coluna,

 

Primeiro a rotina, depois acompanhe o raciocínio.

 

 

veja como encarei o problema nesse tabela de 4 linhas por 3 colunas.

 

 

A nossa abordagem é a de imprimir por LINHAS, ou seja o loop que está em listaDados percorre as linhas indo de 1 a 4 ( for i=1 to 4 ) e dentro de cada linha imprimimos as colunas, então tomando como exemplo a linha 1. Veja que enquanto na primeira coluna imprimimos o elemento número 1, na segunda coluna o número 5 e na terceira coluna o oitavo elemento.

 

Qual a relação que liga esses 3 elementos levando-se em conta quantas linhas temos e e qual coluna estamos imprimindo ?

 

Acomopanhe na figura

 

 

Ou seja já relacionamos o elemento com a linha (i) e com o número de linhas, mas como desejamos um esquema que possa servir para qualquer número de colunas precisamos representar a relação com o número da colunas, observe também que

i , i + nLinhas , i+ nLinhas*2

que é o mesmo que

i + nLinhas * 0 , i + nLinhas* 1 , i + nLinhas*2

mas como ligar 0, 1 e 2 que multiplicam nLinhas ??

Fácil demais, certo ?

Se j é o número da coluna sendo listada e j vai de 1 a o número de colunas que é nColunas então a expressão fica :

i + nLinhas *(j-1)

que agora independe do número de linhas e de colunas

Rodando o exemplo para 4 colunas temos o seguinte "output" :

 

Pronto resolvido o nosso problema.

 

O texto completo da segunda versão da rotina.

<%
'ListaEmpresaColunas2.asp
' exemplo de como listar resultados de um query
' em número qualquer de colunas
' joão carlos www.mvirtual.com.br/jcanistrum
' 21/06/2008

Dim objConn, rs

recuperaDados()

listaDados()

encerraConexao()
'
'* SUB-ROTINAS ***********************************************************
'
Sub recuperaDados()
'cria objeto ASP de conexão
Set objConn = server.createobject("ADODB.Connection")

'cria string de conexão específica para um determinado banco de dados
strConn = "DBQ=" & server.mappath("graficasonline.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"

'conecta ao banco de dados
objConn.open strConn,3,3

'cria o recordset para executar uma consulta e retornar com os dados obtidos
Set rs= Server.CreateObject("ADODB.Recordset")

'texto do comando sql a ser executado
sql = "SELECT DISTINCT Empresa FROM Empresa ORDER BY Empresa"

' executa a consulta
rs.Open sql, strConn, 3, 3
End Sub

 

Sub listaDados()
%>
<style type="text/css">
<!--
.style1 {
font-family: Arial, Helvetica, sans-serif;
font-size: xx-small;
}
-->
</style>
<table class="style1">
<%
'testa se foi ao final do arquivo sem encontrar nada e para
if ( rs.eof ) then
%>
<tr>
<td>
<span class="style1">Não existem registros, encerrando!</span> </td>
</tr>
<%
else
' existem registros logo vamos listá-los carrega um vetor com nome das empresas
Dim empresas(200), nEmpresas
nEmpresas=1
do while not rs.eof
empresas(nEmpresas) = Ucase(trim(rs("empresa")))
nEmpresas = nEmpresas + 1
rs.movenext
loop
nEmpresas = nEmpresas - 1
nColunas = 4
nLinhas = int(nEmpresas/nColunas) + 1

response.write "<tr><td colspan='" & nColunas*2 & "'>Número de Empresas: " & nEmpresas & "</td><tr>"

for i= 1 to nLinhas
response.write "<tr valign='top'>"
for j = 1 to nColunas
elemento = i + (j-1)* nlinhas

if ( elemento <= nEmpresas ) then
response.write "<td><b>" & elemento & "</b></td><td>" & empresas( elemento ) & "</td>"
else
response.write "<td> - </td>"
end if
next
response.write "<tr>"
next
end if
%>
</table>
<%
End Sub

Sub encerraConexao()
'importante .. fechar conexao e destruir objetos
set rs= nothing
objConn.close
set objConn = nothing
End Sub

%>

 

Pesquisa personalizada

Nosso Objetivo: Listar os resultados de uma consulta em ou mais colunas