|
|
|

|

|
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+,
|
|
|
|

|