Jump to content


Photo

Select Para Gerar Um Grafico


  • Faça o login para participar
6 replies to this topic

#1 vinicius.mendes

vinicius.mendes

    Normal

  • Usuários
  • 85 posts
  • Sexo:Não informado
  • Localidade:são josé do rio preto

Posted 13/02/2008, 13:18

boa tarde pessoal, ando meio sumido do fórum e hj estou precisando novamente de ajuda.

tenho a seguinte instrução SQL

[codebox]SELECT `status`, count(*) as total from candidatos group by `status`;[/codebox]

eu estou usando o mySQL e gerencio ele através do MySQL Query Browser, enfim, eu digitei essa instrução no gerenciador e me retorna certinho as informações q eu gostaria

status | total
null 100
vazio 20
aprovado 1000
reprovados 300

só q eu qro montar um gráfico e alimenta-lo com as informações vinda do bd, só q no meu código do gráfico eu nao consigo encaixar essa instrução

[codebox]<%
'Instância o Objeto ChartDirector
Set cd = CreateObject("ChartDirector.API")

'Informa os dados para o gráfico
data = Array("1323","657","139","462")

'Informa os rótulos do gráfico
labels = Array("Aprovado", "Reprovado", "2 Chance", "Em aberto")

'Ajusta as cores das fatias
colors = Array(&H333300, &HFF3300, &H3333FF, &HFFFF00)

'Cria uma imagem no tamanho de 360 x 280 pixels
Set c = cd.PieChart(360, 280)

'Ajusta localização do gráfico (180, 100) e o tamanho a ser exibido em 100 pixels
Call c.setPieSize(180, 100, 100)

'Adiciona um título ao gráfico com a fonte Arial Bold Italic
Call c.addTitle2(cd.Bottom, "Status dos candidatos!", "arialbi.ttf")

'Exibe o gráfico em 3D
Call c.set3D()

'Adiciona legenda ajustando os valores left e top para 10 e 180 respectivamente
Call c.addLegend(10, 180)

'Ajusta as cores das fatias para as cores indicadas no array colors
Call c.setColors2(cd.DataColor, colors)

'Ajusta os dados e rótulos do gráfico
Call c.setData(data, labels)

'Separa a fatia em destaque
Call c.setExplode(5)

'Exibe gráfico no browser
Response.ContentType = "image/png"
Response.BinaryWrite c.makeChart2(cd.PNG)

'Destrói o objeto c
Set c = nothing

'Destrói o Objeto ChartDirector
Set cd = nothing

%> [/codebox]

percebam onde esta o DATA = ARRAY..... eu alimento o gráfico "na unha" mudando os valores de hora de hora, gostaria de encaixar meu select e colocar o resultado direto nesse array...

agradeço a ajuda de todos.

obrigado.

#2 DiegoCoruja

DiegoCoruja

    12 Horas

  • Usuários
  • 178 posts
  • Sexo:Masculino
  • Localidade:São Vicente - SP
  • Interesses:PROGRAMAÇÃO, WEB DESIGN, ESPORTE,

Posted 16/02/2008, 13:19

e ae bele?
por acaso to fazendo graficos, mas to usando owc, fiz umas modificações no seu codigo,
tenta se não de certo e só falar
[codebox]<%
'não esqueça de colocar os parametros de conexao com o bd

Set rs = Server.CreateObject("ADODB.RecordSet")
rs.open "SELECT status, count(*) as total from candidatos group by status", bd

'Instância o Objeto ChartDirectorSet
cd = CreateObject("ChartDirector.API")
'------------------------------------------
'Informa os dados para o gráfico
'data = Array("1323","657","139","462")
'Informa os rótulos do gráfico
'labels = Array("Aprovado", "Reprovado", "2 Chance", "Em aberto")
if not rs.EOF then
do while not rs.EOF
data = data & rs("total") & chr(9)
labels = labels & rs("status") & chr(9)
rs.MoveNext
loop
end if
'-------------------------------------------
'Ajusta as cores das fatias
colors = Array(&H333300, &HFF3300, &H3333FF, &HFFFF00)
'Cria uma imagem no tamanho de 360 x 280 pixels
Set c = cd.PieChart(360, 280)
'Ajusta localização do gráfico (180, 100) e o tamanho a ser exibido em 100 pixels
Call c.setPieSize(180, 100, 100)
'Adiciona um título ao gráfico com a fonte Arial Bold Italic
Call c.addTitle2(cd.Bottom, "Status dos candidatos!", "arialbi.ttf")
'Exibe o gráfico em 3D
Call c.set3D()
'Adiciona legenda ajustando os valores left e top para 10 e 180 respectivamente
Call c.addLegend(10, 180)
'Ajusta as cores das fatias para as cores indicadas no array colors
Call c.setColors2(cd.DataColor, colors)
'Ajusta os dados e rótulos do gráfico
Call c.setData(data, labels)
'Separa a fatia em destaque
Call c.setExplode(5)
'Exibe gráfico no browser
Response.ContentType = "image/png"
Response.BinaryWrite c.makeChart2(cd.PNG)
'Destrói o objeto cSet c = nothing
'Destrói o Objeto ChartDirector
Set cd = nothing
Set rs = Nothing
%>[/codebox]
====================================================
Diego M.
Html, CSS, Javascript, Asp, Asp.net, Php, Sql Server, Mysql, Oracle, VB.NET, VBA
====================================================

#3 vinicius.mendes

vinicius.mendes

    Normal

  • Usuários
  • 85 posts
  • Sexo:Não informado
  • Localidade:são josé do rio preto

Posted 19/02/2008, 09:53

valeu pela resposta Diego.

agora gerou um erro.

ChartDirector error '800a8000'

Error converting argument 1 to type class DoubleArray

line 86

linha 86 --> Call c.setData(data, labels)

é a linha onde pega os valores montados no array =//

#4 DiegoCoruja

DiegoCoruja

    12 Horas

  • Usuários
  • 178 posts
  • Sexo:Masculino
  • Localidade:São Vicente - SP
  • Interesses:PROGRAMAÇÃO, WEB DESIGN, ESPORTE,

Posted 19/02/2008, 21:38

tira o chr(9), talves funcione!
====================================================
Diego M.
Html, CSS, Javascript, Asp, Asp.net, Php, Sql Server, Mysql, Oracle, VB.NET, VBA
====================================================

#5 vinicius.mendes

vinicius.mendes

    Normal

  • Usuários
  • 85 posts
  • Sexo:Não informado
  • Localidade:são josé do rio preto

Posted 28/02/2008, 14:03

eu tirei o chr(9) e continuou dando erro, ainda não consegui descobrir o q esta travando =//

#6 vinicius.mendes

vinicius.mendes

    Normal

  • Usuários
  • 85 posts
  • Sexo:Não informado
  • Localidade:são josé do rio preto

Posted 05/03/2008, 15:56

resolvi o problema.

vou colocar o código para eventuais duvidas e ajudar a quem precisar.

[codebox]
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.open "SELECT status, count(*) as total from candidatos where status in (a,b,c) group by status order by total asc", conn

'Instância o Objeto ChartDirectorSet
set cd = CreateObject("ChartDirector.API")
'------------------------------------------
if not rs.EOF then
do while not rs.EOF
data = data&","&rs("total")
labels = labels &","& rs("status")
rs.MoveNext
loop
end if

'Split Devolve um array com um numero especificado de substrings.
'a função right(data,len(data)-1) server para pegar tudo da var Data a partir do lado direito ignorando o 1 caracter
'pq o 1 caracter é uma ',' e só atrapalha.
Arraydata = Split(right(data,len(data)-1), ",",-1,1)
Arraylabels = Split(right(labels,len(labels)-1), ",",-1,1)

'Informa os dados para o gráfico
data = Array(Arraydata(0),Arraydata(1),Arraydata(2))
'Informa os rótulos do gráfico
labels = Array(Arraylabels(0),Arraylabels(1),Arraylabels(2))
[/codebox]

agora sempre q eu pedir a exibição do gráfico ele utiliza os dados do MySQL e atualiza meu gráfico, sem eu precisar atualizar ele na unha toda vez q queria ver o gráfico atualizado.

espero q isso ajude mais alguém...

abraços.

#7 lulimanzone

lulimanzone

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 04/09/2008, 00:55

Olá...

Essa é a primeira vez que posto alguma dúvida aqui Forum.
É o seguinte...Estou criando um gráfico em linha com dados que pego de uma view no SQL Server.
O componente que estou usando é o mesmo usado pelo nosso amigo Vinicius. E o código que ele colocou aqui salvou minha vida.
Porém tenho uma pequena diferença que nao sei como resolver.

No momento de exibir esses valores no codigo do Vinicius ficou da seguinte forma

data = Array(Arraydata(0),Arraydata(1),Arraydata(2))

Quando ele sabia que sempre teria 3 valores nesse array. Mas no meu caso esse valor sempre será diferente. Ou seja, eu nao tenho como colocar explicitamente a exibiçao desses valores no Array pois pode mudar.
Eu sei que tenho que fazer um Loop ou algo do tipo.
Mas nao sei como...
Alguem pode me ajudar???

Desde já OBRIGADA!!!!




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq