Ir para conteúdo

POWERED BY:

Arquivado

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

lendadomato

[Resolvido] Estrutura do While

Recommended Posts

Bom pessoal,

 

tenho um gráfico do Chart Apis do Google gerado dinamicamente com dados q vêem do

banco de dados, como o link gerado para a imagem tem por separador uma vírgula,

tenho dificuldades de fazer o loop pois quando faço esse loop a vírgula no final

do último registro tbm se junta aos dados, vejam q tenho 3 registros e eles tem

que ter como separador a bendita vírgula, porém ela não pode ser adicionada no último registro.

 

http://chart.apis.google.com/chart?cht=p3&chd=t:2590708,3842716,2703787

 

 

While Not rs.EOF
" & rs("total") & ",
rs.MoveNext
Wend
rs.Close  
Set rs = Nothing

com esse loop os registros vem assim:

 

http://chart.apis.google.com/chart?cht=p3&chd=t:2590708,3842716,2703787,

 

o que eu preciso é assim:

 

http://chart.apis.google.com/chart?cht=p3&chd=t:2590708,3842716,2703787

 

 

Desde já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como depois você recupera os valores para montar a imagem? como fica a variável? neste caso acho que uma solução seria você separar com split fazendo a contagem e depois separando valor por valor... reestruturando e retirando esta última vírgula.

Compartilhar este post


Link para o post
Compartilhar em outros sites

usa um Split e depois pega os valores pelo array

Compartilhar este post


Link para o post
Compartilhar em outros sites

o fonte completo para pegar os valores:

 

<img src="http://chart.apis.google.com/chart?cht=p3&chd=t:

Set rs = conexao.Execute("SELECT distinct RIGHT(datacompra,4) as mesano FROM compras WHERE `status`<> 'Compras em Aberto' GROUP BY YEAR(STR_TO_DATE( datacompra, '%d/%m/%Y')) ORDER BY pedido")

While Not rs.EOF
" & rs("mesano") & ",
rs.MoveNext
Wend
rs.Close  
Set rs = Nothing

&chs=450x200&chco=&chdl="

Set rs = conexao.Execute("SELECT distinct RIGHT(datacompra,4) as mesano, sum(totalcompra) as total FROM compras WHERE `status`<> 'Compras em Aberto' GROUP BY YEAR(STR_TO_DATE( datacompra, '%d/%m/%Y')) ORDER BY pedido")

While Not rs.EOF
" & rs("mesano") & "  R$"&formatnumber(rs("total"))&"|
rs.MoveNext
Wend
rs.Close  
Set rs = Nothing


&chtt=Grafico de vendas por ano&chl=


Set rs = conexao.Execute("SELECT distinct RIGHT(datacompra,4) as mesano FROM compras WHERE `status`<> 'Compras em Aberto' GROUP BY YEAR(STR_TO_DATE( datacompra, '%d/%m/%Y')) ORDER BY pedido")

While Not rs.EOF
" & rs("mesano") & "|
rs.MoveNext
Wend
rs.Close  
Set rs = Nothing
"">

pra falar a verdade sou iniciante em programação e não sei como

fazer o Split e pegar os valores pelo Array, mas aprendo rápido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Velho fiz aqui rapidinho um code pra te ajudar, segue abaixo

 

<%
dadosdobd = "100,300,456,898,674,100,"

separa = split(dadosdobd,",")

separado = ""
contador = 1

for each organiza in separa
    limpador = trim(organiza)
    separado = separado & "" & limpador & ""
    if (contador < ubound(separa)) then 
        separado = separado & ","
    end if
    contador = (contador + 1)
next

response.write separado
%>

Você terá que pegar aqueles dados que são montados, colocando as vírgulas que esta atualmente no seu sistema e jogar na variável dadosdobd o resto a função vai fazer, depois basta criar uma váriavel e jogar o valor, no exemplo eu fiz no final um response.write da váriavel separado que vem com os dados arrumados pelo sistema, tirando a última vírgula... você terá que criar uma do tipo...

 

minhavariavel = separado

é nesta minhavariavel que vai esta os dados com as vírgulas corretas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Velho fiz aqui rapidinho um code pra te ajudar, segue abaixo

 

<%
dadosdobd = "100,300,456,898,674,100,"

separa = split(dadosdobd,",")

separado = ""
contador = 1

for each organiza in separa
    limpador = trim(organiza)
    separado = separado & "" & limpador & ""
    if (contador < ubound(separa)) then 
        separado = separado & ","
    end if
    contador = (contador + 1)
next

response.write separado
%>

Você terá que pegar aqueles dados que são montados, colocando as vírgulas que esta atualmente no seu sistema e jogar na variável dadosdobd o resto a função vai fazer, depois basta criar uma váriavel e jogar o valor, no exemplo eu fiz no final um response.write da váriavel separado que vem com os dados arrumados pelo sistema, tirando a última vírgula... você terá que criar uma do tipo...

 

minhavariavel = separado

é nesta minhavariavel que vai esta os dados com as vírgulas corretas.

 

Amigo Patrique,

 

o seu esquema deu certo mas, quando coloco no loop ele não aparece

nenhuma vírgula.

 

Set rs = conexao.Execute("SELECT distinct RIGHT(datacompra,4) as mesano FROM compras")
While Not rs.EOF

resultado = "" & rs("mesano") & ","

dadosdobd = resultado
separa = Split(dadosdobd,",")

separado = ""
contador = 1

For Each organiza in separa
    limpador = Trim(organiza)
    separado = separado & "" & limpador & ""
    If (contador < UBound(separa)) Then 
        separado = separado & ","
    End if
    contador = (contador + 1)
Next

Response.Write  separado 


rs.MoveNext
Wend
rs.Close  
Set rs = Nothing

sei q devia funcionar igual ao seu exemplo mas não sei onde está errado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele esta gerando algum erro ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele esta gerando algum erro ???

 

 

xanburzum,

não esta nenhum erro ele me retorna os anos sem a vírgula:

 

200820092010

 

no exemplo do Patrique:

 

dadosdobd = "2008,2009,2010,"

separa = split(dadosdobd,",")

separado = ""
contador = 1

for each organiza in separa
    limpador = trim(organiza)
    separado = separado & "" & limpador & ""
    if (contador < ubound(separa)) then 
        separado = separado & ","
    end if
    contador = (contador + 1)
next

response.write separado

retorna certo:

2008,2009,2010

 

não sei se fiz certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

realmente é assim mesmo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

realmente é assim mesmo...

 

 

tem a ver o banco de dados q esta sendo usado?

estou usando MySQL

 

no caso:

 

Set rs = conexao.Execute("SELECT distinct RIGHT(datacompra,4) as mesano FROM compras")
While Not rs.EOF

resultado = "" & rs("mesano") & ","

Response.Write  resultado 

rs.MoveNext
Wend
rs.Close  
Set rs = Nothing

o sistema me retorna:

2008,2009,2010,

 

não entendo muito mas pode ser a forma de fazer o Loop?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nesse ultimo exemplo que voce postou, o resultado sempre terá no final a virgula, pois ela faz parte da expressão que você montou.

No exemplo do patrique, funciona como você quer pois ele trata o resultado, e se for o ultimo não tem a virgula, o que você precisa fazer é colocar o exemplo dele dentro do seu loop fazendo com que funcione da forma como deseja.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Velho coloca os resultados em variável... e depois monte lá embaixo sem ser dentro do While, neste caso aconselho você a criar uma function com o code que te passei, ficaria bem melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nesse ultimo exemplo que voce postou, o resultado sempre terá no final a virgula, pois ela faz parte da expressão que você montou.

No exemplo do patrique, funciona como você quer pois ele trata o resultado, e se for o ultimo não tem a virgula, o que você precisa fazer é colocar o exemplo dele dentro do seu loop fazendo com que funcione da forma como deseja.

 

Amigo Vinícius,

 

pois é isso q me intriga, segue o loop com o exemplo do Patrique dentro:

 

Set rs = conexao.Execute("SELECT distinct RIGHT(datacompra,4) as mesano FROM compras")
While Not rs.EOF

resultado = "" & rs("mesano") & ","

dadosdobd = resultado
separa = Split(dadosdobd,",")

separado = ""
contador = 1

For Each organiza in separa
    limpador = Trim(organiza)
    separado = separado & "" & limpador & ""
    If (contador < UBound(separa)) Then 
        separado = separado & ","
    End if
    contador = (contador + 1)
Next

Response.Write  separado 


rs.MoveNext
Wend
rs.Close  
Set rs = Nothing

 

eu acho q esta tudo certo mas os valores são retornados sem as vírgulas,

a variavel da consulta "resultado" esta retornando os anos assim: 2008,2009,2010,

resultado = "" & rs("mesano") & ","

e se eu coloco manualmente e tiro do loop, ele retorna certo.

resultado = "2008,2009,2010,"

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz igual no post#3, e faça uma pesquissa no fórum que existem exemplos com array

Compartilhar este post


Link para o post
Compartilhar em outros sites

e se fizer ao inves de dadosdobd = resultado para

dadosdobd = rs("mesano") ?

 

o resultado é o mesmo,

vou dar uma pesquisa aqui

no forum sobre array, caso eu tenha sucesso voltarei

aqui para postar a solução.

 

Obrigado a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Velho faz como eu sugeri... crie uma variavel e fora dela faz naquele code que te passei...

 

Set rs = conexao.Execute("SELECT distinct RIGHT(datacompra,4) as mesano FROM compras WHERE `status`<> 'Compras em Aberto' GROUP BY YEAR(STR_TO_DATE( datacompra, '%d/%m/%Y')) ORDER BY pedido")

While Not rs.EOF
    testevariavel = rs("mesano") & ","
rs.MoveNext
Wend
rs.Close  
Set rs = Nothing

dadosdobd = testevariavel

separa = split(dadosdobd,",")

separado = ""
contador = 1

for each organiza in separa
    limpador = trim(organiza)
    separado = separado & "" & limpador & ""
    if (contador < ubound(separa)) then 
        separado = separado & ","
    end if
    contador = (contador + 1)
next

response.write separado

Compartilhar este post


Link para o post
Compartilhar em outros sites

depois de muita lida no forum e em outros foruns, consegui

resolver, segue a array para aqueles q querem retornar seus

valores usando o grafico Chart Apis do Google:

 

Set rs = conexao.Execute("SELECT distinct RIGHT(datacompra,4) as mesano FROM compras")

Do While not rs.EOF

resultado = resultado  & rs("mesano")  & ","       //aqui esta o separador

rs.MoveNext
Loop

resultado = Left(resultado,(Len(resultado) - 1))

total = resultado

Response.Write  total 

rs.Close  
Set rs = Nothing

para outros separadores:

 

Set rs = conexao.Execute("SELECT distinct RIGHT(datacompra,4) as mesano FROM compras")

Do While not rs.EOF

resultado = resultado  & rs("mesano")  & "|"       //aqui esta o separador

rs.MoveNext
Loop

resultado = Left(resultado,(Len(resultado) - 1))

total = resultado

Response.Write  total 

rs.Close  
Set rs = Nothing

Muito obrgados à todos pela força!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal, repare que esta como eu falei só que de uma forma mais simples rsrsr a variavel é criada para jogar o resultado por fora do while.

 

Mais que bom que conseguiu.

 

[]'s

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.