USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Dicas

  ASP - Active Server Page    (Miscelâneas)

Título da Dica:  Criação de Gráficos em tempo real usando uma Applet
Postada em 23/10/2003 por ^HEAVY-METAL^            
A BASE DE DADOS :
Esta é do mais básico possível, servindo apenas de base para a informação que queremos usar de forma a gerarmos gràficos com um mínimo de aspecto estatístico possível.
O ficheiro da base de dados chama-se dados.mdb, e com otem vindo a ser habitual é feito em MSAccess devido à sua portabilidade e facilidade de manuseamento.
Existe uma única tabela com a seguinte estrutura :
Tabela : dados

id_dados AutoNumber
quote_dados Text
valor_dados Number
datahora_dados Date/Time

O auto-number uso sempre para que no futuro tenha garantido um código único para todos os meus registos, o quote vai funcionar como um código, referente neste exemplo, a uma linguagem de programação internet, como as ASP, PHP, PERL etc. O valor serà um numero que pode ser olhado como uma 'pontuação' que damos numa determinada hora à linguagem escolhida, e por isso termos o campo datahora_dados. Claro que o ideal era o campo quote_dados ser uma ligação a outra tabela onde estão todos os tipos de quote, mas neste momento a ideia é demonstrar o uso da Applet de gráficos.


Temos então 3 ficheiros, um é o Chart.jar que contém as classes necessàrias para a geração dos gráficos, o dados.mdb que jà referi, e o ficheiro onde se passa toda a programação ASP em graficos.asp.  

Queria frisar que o Applet gráfico não é gratuito, mas que se pode usar mesmo sem pagar, a diferença é que se não pagar uma licença vai ter um pequeno quadrado amarelo no fundo de cada gráfico que dispara um pequeno banner sobre a empresa do mesmo onde està o link deste produto www.objectplanet.com/EasyCharts/ . Neste artigo estou só a usar tipo 30% das potencialidades desta Applet, cuja não é muito cara se tiver a criar um site comercial, onde a diferença por este produto não farà o seu cliente recusar um trabalho seu.


Podemos ver desde jà o resultado deste artigo...



... e agora podemos então passar a explicar o código que foi criado para o efeito.

ficheiro : graficos.ASP


<%
'uso o explicit para que o código esteja mais bem organizado
'e para que não comece a criar variàveis que depois deixam de
'ser usadas, e comecem a interferir na performance do site
Option Explicit
'definimos a variável para a conecção à base de dados
Dim Conn
'inicializamos o recordset para puxarmos a informação da BD
Dim RS
' a vari`vel que vai guardar as declarações de SQL a usar
Dim SQLStmt
'esta variàvel vai servir de suporte para guardar os dados a usar
Dim os_dados
'definimos Conn como um objecto para uso com a BD
Set Conn=Server.CreateObject("ADODB.Connection")
'fazemos a conecção à BDConn.Open "PROVIDER=MSDASQL;" & _
"DRIVER={Microsoft Access Driver (*.mdb)}; " & _
"DBQ=" & server.mappath("dados.mdb")
'definimos outro objecto para o Recordset
Set RS = Server.CreateObject("ADODB.Recordset")

'esta primeira função serve para criar uma espécie de array'
'com todos os valores de um quote
Function sacar_dados(quote)
    'inicializamos a variável os_dados como vazia pois esta função serà
    'usada mais que uma vez
    os_dados = ""
    'criamos a declaração de SQL
    SQLStmt = "SELECT * FROM dados where quote_dados='" & quote & "'"
    SQLStmt = SQLStmt & SQLStmt & " ORDER BY datahora_dados"
    'executamos a declaração para obtermos a informação pretendida
    'da nossa base de dados
    Set Rs=Conn.Execute(SQLStmt)
    'fazemos o loop para agarrarmos em todas as linhas devolvidas
    While NOT RS.EOF
        construimos o 'array' de valores do quote
        os_dados = os_dados & RS("valor_dados") & ","
        RS.MoveNext
    Wend
    'aqui retiramos a última virgula de todo o array que fica por defeito
    os_dados = Left(os_dados,Len(os_dados)-1)
    'fechamos o Recordset
    RS.Close
    'devolvemos a informação obtida e tratada
    sacar_dados = os_dados
End Function

'esta outra função serve para gráficos que usam um só valor
Function sacar_totais(quote)
    'a declaração de SQL
    SQLStmt = "SELECT SUM(valor_dados) AS total FROM dados where "  
    SQLStmt = SQLStmt & "quote_dados='" & quote & "'"
    Set Rs=Conn.Execute(SQLStmt)
   'se for devolvido algum valor vamos buscá-lo
    If NOT RS.EOF then
        sacar_totais = RS("total")
    End If
    RS.Close
End Function


'Aqui vamos criar o código HTML que carrega a Applet com os dados
'com os dados que carregamos da Base de Dados
'pelo resultado podemos verificar que se trata de um gráfico de linhas
response.write "<APPLET code=""com.objectplanet.chart.LineChartApplet"" archive=""chart.jar"" width=250 height=180 VIEWASTEXT>" & VbNewLine
response.write "<param name=""seriesCount"" value=5>" & VbNewLine
response.write "<PARAM name=seriesLabels value=""ASP, JSP, PHP, PERL, CF"">" & VbNewLine
'vamos usar a função sacar_dados() para obtermos os valores de
'cada quote/linguagem
response.write "<param name=""series0_values"" value=""" & sacar_dados("ASP") & """>" & VbNewLine
response.write "<param name=""series1_values"" value=""" & sacar_dados("JSP") & """>" & VbNewLine
response.write "<param name=""series2_values"" value=""" & sacar_dados("PHP") & """>" & VbNewLine
response.write "<param name=""series3_values"" value=""" & sacar_dados("PERL") & """>" & VbNewLine
response.write "<param name=""series4_values"" value=""" & sacar_dados("CF") & """>" & VbNewLine
'podemos na Applet definir o alcance màximo dos valores
response.write "<PARAM name=range value=60>" & VbNewLine
'a unidade de medida para o gráfico também é costumizável
response.write "<PARAM name=rangeDecimalCount value=1>" & VbNewLine
'podemos indicar o título da imagem
response.write "<PARAM name=title value=""Grafico de Linhas"">" & VbNewLine
response.write "<PARAM name=titleOn value=""true"">" & VbNewLine
response.write "<PARAM name=legendOn value=true>" & VbNewLine
response.write "<PARAM name=legendPosition value=right>" & VbNewLine
response.write "<PARAM name=valueLinesOn value=true>" & VbNewLine
response.write "<PARAM name=sampleLabelsOn value=true>" & VbNewLine
'definir a cor de fundo é uma das opções possíveis
response.write "<PARAM name=background value=lightgray>" & VbNewLine
response.write "<PARAM name=foreground value=black>" & VbNewLine
response.write "<PARAM name=chartBackground value=white>" & VbNewLine
response.write "<PARAM name=chartForeground value=black>" & VbNewLine
response.write "<PARAM name=valueLinesColor value=lightgray>" & VbNewLine
'definir as cores das linhas do gráfico são possíveis com o método
'sampleColors
response.write "<PARAM name=sampleColors value=""orange, red, magenta, blue, green"">" & VbNewLine
response.write "</applet>" & VbNewLine

'depois do gráfico de linhas vamos criar um gráfico de barras em 3D
'jà não construimos um arrai de valores e por isso só nos interessa
~valores totais para a construção do mesmo
response.write "<APPLET code=""com.objectplanet.chart.BarChartApplet"" archive=""chart.jar"" width=250 height=180 VIEWASTEXT>" & VbNewLine
response.write "<param name=sampleCount value=5>" & VbNewLine
'os valores a ir buscar aqui são jà totais devido ao tipo de gráfico, e
'por isso jà não usamos a mesma função.
response.write "<PARAM name=sampleValues value=""" & sacar_totais("ASP") & ", " & sacar_totais("JSP") & ", " & sacar_totais("PHP") & ", " & sacar_totais("PERL") & ", " & sacar_totais("CF") & """>" & VbNewLine
response.write "<PARAM name=sampleLabels value=""ASP, JSP, PHP, PERL, CF"">" & VbNewLine
response.write "<PARAM name=range value=500>" & VbNewLine
response.write "<PARAM name=title value=""Grafico de Barras 3D"">" & VbNewLine
response.write "<PARAM name=range value=500>" & VbNewLine
response.write "<PARAM name=lowerRange value=0>" & VbNewLine
response.write "<PARAM name=sampleDecimalCount value=1>" & VbNewLine
response.write "<PARAM name=rangeDecimalCount value=1>" & VbNewLine
response.write "<PARAM name=titleOn value=true>" & VbNewLine
response.write "<PARAM name=legendOn value=true>" & VbNewLine
response.write "<PARAM name=legendPosition value=right>" & VbNewLine
response.write "<PARAM name=valueLabelsOn value=true>" & VbNewLine
response.write "<PARAM name=valueLinesOn value=true>" & VbNewLine
response.write "<PARAM name=multiColorOn value=true>" & VbNewLine
response.write "<PARAM name=barLabelsOn value=true>" & VbNewLine
response.write "<PARAM name=barAlignment value=vertical>" & VbNewLine
response.write "<PARAM name=3DModeOn value=true>" & VbNewLine
response.write "<PARAM name=frameOn value=false>" & VbNewLine
response.write "<PARAM name=background value=""200,200,200"">" & VbNewLine
response.write "<PARAM name=foreground value=black>" & VbNewLine
response.write "<PARAM name=chartBackground value=""#ffffff"">" & VbNewLine
response.write "<PARAM name=chartForeground value=black>" & VbNewLine
response.write "<PARAM name=sampleColors value=""red, green, blue, orange, gray"">" & VbNewLine
response.write "</APPLET>" & VbNewLine

'este último gráfico tipo ´queijo' é muito idêntico ao de barras 3D
response.write "<APPLET code=""com.objectplanet.chart.PieChartApplet"" archive=""chart.jar"" width=250 height=180 VIEWASTEXT>" & VbNewLine
response.write "<param name=sampleCount value=5>" & VbNewLine
response.write "<PARAM name=sampleValues value=""" & sacar_totais("ASP") & ", " & sacar_totais("JSP") & ", " & sacar_totais("PHP") & ", " & sacar_totais("PERL") & ", " & sacar_totais("CF") & """>" & VbNewLine
response.write "<PARAM name=sampleLabels value=""ASP, JSP, PHP, PERL, CF"">" & VbNewLine
response.write "<PARAM name=range value=500>" & VbNewLine
response.write "<PARAM name=title value=""Grafico de Barras 3D"">" & VbNewLine
response.write "<PARAM name=range value=500>" & VbNewLine
response.write "<PARAM name=lowerRange value=0>" & VbNewLine
response.write "<PARAM name=sampleDecimalCount value=1>" & VbNewLine
response.write "<PARAM name=rangeDecimalCount value=1>" & VbNewLine
response.write "<PARAM name=titleOn value=true>" & VbNewLine
response.write "<PARAM name=legendOn value=true>" & VbNewLine
response.write "<PARAM name=legendPosition value=right>" & VbNewLine
response.write "<PARAM name=valueLabelsOn value=true>" & VbNewLine
response.write "<PARAM name=valueLinesOn value=true>" & VbNewLine
response.write "<PARAM name=multiColorOn value=true>" & VbNewLine
response.write "<PARAM name=barLabelsOn value=true>" & VbNewLine
response.write "<PARAM name=barAlignment value=vertical>" & VbNewLine
response.write "<PARAM name=3DModeOn value=true>" & VbNewLine
response.write "<PARAM name=frameOn value=false>" & VbNewLine
response.write "<PARAM name=background value=""200,200,200"">" & VbNewLine
response.write "<PARAM name=foreground value=black>" & VbNewLine
response.write "<PARAM name=chartBackground value=""#ffffff"">" & VbNewLine
response.write "<PARAM name=chartForeground value=black>" & VbNewLine
response.write "<PARAM name=sampleColors value=""red, green, blue, orange, gray"">" & VbNewLine
response.write "</APPLET>" & VbNewLine
%>



As hipóteses desta Applet são imensas, vale a pena ir ver ao site da mesma, outra coisa que pode fazer desde jà quando tiver este código a correr, é clicar com o rato sobre os títulos das linguagens que estão nas legendas, um a um e ver as alterações que acontecem.

T+,
 


CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página