Sunteți pe pagina 1din 204

Instruo SQl para diminuir e somar tabelas SELECT (SUM(tabelaA.campoX) - SUM(tabelaB.

campoY)) as resultado FROM tabelaA, tabela Criar coluna que calcule dados de duas outras colunas Fruns do SQL Server > SQL Server - Desenvolvimento Geral Pergunta 0 Entrar para Votar Pessoal, bom dia! Necessito de uma ajuda em uma consulta SQL. Tenho o seguinte script:

SELECT FLMV.DT_MOVTO, FLMV.NUMERO, FLMV.PAGAR_REC, FLMV.NATUR_MOV, FLMV.VR_BRUTO_MV FROM FLMV INNER JOIN FLNT ON FLMV.EMPRESA = FLNT.EMPRESA AND FLMV.FILIAL = FLNT.FILIAL AND FLMV.NATUR_MOV = FLNT.NATUR_MOV AND FLMV.NATUR_CONTA = FLNT.NATUR_CONTA AND FLMV.NATUR_TRANSACAO = FLNT.NATUR_TRANSACAO where FLMV.DT_MOVTO between '2010-07-01' and '2010-07-07' and flmv.natur_mov = 'admb' ORDER BY FLMV.DT_MOVTO, FLMV.NUMERO, FLMV.NATUR_MOV, FLMV.NATUR_TRANSACAO<br/> <br/> <br/>

Que me retorna o seguinte: DT_MOVTO 2010-07-01 00:00:00 2010-07-01 00:00:00 2010-07-01 00:00:00 2010-07-01 00:00:00 2010-07-07 00:00:00 2010-07-07 00:00:00 2010-07-07 00:00:00 2010-07-07 00:00:00 2010-07-07 00:00:00 2010-07-07 00:00:00 NUMERO PAGAR_REC NATUR_MOV VR_BRUTO_MV 1 R ADMB 59000.0000 3 P ADMB 1000.0000 4 R ADMB 8500.0000 4 P ADMB 3000.0000 3 P ADMB 120.0000 4 P ADMB 265.0300 5 P ADMB 96.0000 6 P ADMB 48.0000 7 P ADMB 69.2500 8 P ADMB 1000.0000

Gostaria de criar trs colunas que me retornassem o seguinte: PAGAR_REC VR_BRUTO_MV DBITO R P R P P P 59.000,00 1.000,00 8.500,00 3.000,00 120,00 265,03 3.000,00 120,00 265,03 1.000,00 8.500,00 CRDITO ACUMULADO

59.000,00

59.000,00 58.000,00 66.500,00 63.500,00 63.380,00 63.114,97

96,00

96,00

63.018,97

As colunas que preciso criar so dbito, crdito e saldo acumulado. Na coluna saldo acumulado o valor inicial deve ser o da coluna VR_BRUTO_MV. Quando a coluna PAGAR_REC for igual a R (de recebimento) o valor deve iniciar positivo, caso contrrio negativo. Essa coluna deve ir calculando os valores das colunas dbito e crdito, somando ou subtraindo.

Estou usando SQL 2005. Obrigada. mili.

segunda-feira, 2 de agosto de 2010 13:34 Responder | Citao | Respostas 1 Entrar para Votar Ento... vamos por partes.... No tem como usar tabela temporaria em View... vc a usa so para fazer um processamento momentario... no caso a ideia seria melhor entao criar uma Function CREATE FUNCTION TESTE () RETURNS @RESULT TABLE (TIPO CHAR(1), VALOR DECIMAL, DEBITO DECIMAL, CREDITO DECIMAL, TOTAL DECIMAL) AS BEGIN -- Declarao de Variaveis DECLARE @TIPO AS CHAR DECLARE @VALOR AS DECIMAL DECLARE @DEBITO AS DECIMAL DECLARE @CREDITO AS DECIMAL

DECLARE @TOTAL AS DECIMAL -- Declarao do Cursos usado para ler linha a linha (algo como um DataReader do C#) DECLARE C_SOMA CURSOR FOR SELECT PAGAR_REC, VR_BRUTO_MV, CASE WHEN PAGAR_REC = 'P' THEN VR_BRUTO_MV * -1 ELSE 0 END AS DEBITO, CASE WHEN PAGAR_REC = 'R' THEN VR_BRUTO_MV ELSE 0 END AS CREDITO FROM FLMV OPEN C_SOMA SELECT @TOTAL = 0 -- Aqui como o comando Read() do DataReader, le uma linha da query declada no Cursor e carrega os valores nas variaveis que estao apos o "INTO" FETCH NEXT FROM C_SOMA INTO @TIPO, @VALOR, @DEBITO, @CREDITO; -- Aqui vai fazer um While enquanto tiver registros na Tabela do Cursor WHILE @@FETCH_STATUS = 0 BEGIN -- Atualiza a variavel @TOTAL com o Valor do Saldo Total Atual SELECT @TOTAL = @TOTAL + (@DEBITO + @CREDITO) -- Insere o registro de movimentao na tabela temporaria INSERT INTO @RESULT SELECT @TIPO, @VALOR, @DEBITO, @CREDITO, @TOTAL -- Carrega a proxima linha da tabela

FETCH NEXT FROM C_SOMA INTO @TIPO, @VALOR, @DEBITO, @CREDITO; END CLOSE C_SOMA DEALLOCATE C_SOMA RETURN END GO

SELECT * FROM TESTE()

What would Brian Boitano do ? ((2B || !2B) is Question) ? Se no da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....

quarta-feira, 4 de agosto de 2010 15:49 Responder | Citao |

Moderador Todas as Respostas 0 Entrar para Votar Ol mili, Voc pode criar um campo do tipo computed para o valor acumulado, tente este Script:

alter table nomeTabela add debito decimal(18, 2) null go

alter table nomeTabela add credito decimal(18, 2) null go

alter table nomeTabela add acumulado AS (case when (PAGAR_REC = 'R') then VR_BRUTO_MV + credito else VR_BRUTO_MV - debito end) go

Acredito que funcione,

Abs,

Rafael Zaccanini Se a resposta de ajudou marque como til

segunda-feira, 2 de agosto de 2010 16:39 Responder | Citao |

0 Entrar para Votar mili, vc no precisa alterar a tabela. S muda tua query. No entendi as colunas q tu precisa somar, mas tu pode fazer assim:

select <coluna1> + <coluna2> as [SOMA] from <tabela>...

No caso caso da coluna saldo acumulado, faa algo do tipo:

select case where PAGAR_REC = 'R' then PAGAR_REC else PAGAR_REC * -1 end as [saldo acumulado] from ...

Espero ter ajudado. Abrao

Gabriel Bauermann | Representante New Art Webdesing Criao e manuteno de Web Sites Fone (51) 8182 6819 | Email: gabriel.bauermann@gmail.com

segunda-feira, 2 de agosto de 2010 16:52 Responder | Citao | 0 Entrar para Votar Pessoal, tentei utilizar os dois exemplos acima e cheguei a esse script:

SELECT FLMV.DT_MOVTO, FLMV.NUMERO, FLMV.PAGAR_REC, FLMV.NATUR_MOV, FLMV.VR_BRUTO_MV, (case when flmv.pagar_rec = 'P' then -(flmv.vr_bruto_mv) end) as dbito, (case when flmv.pagar_rec = 'R' then flmv.vr_bruto_mv end) as crdito, (case when flmv.pagar_rec = 'R' then flmv.vr_bruto_mv else (flmv.vr_bruto_mv) * -1 end) as acumulado FROM FLMV INNER JOIN FLNT ON FLMV.EMPRESA = FLNT.EMPRESA AND FLMV.FILIAL = FLNT.FILIAL AND FLMV.NATUR_MOV = FLNT.NATUR_MOV AND FLMV.NATUR_CONTA = FLNT.NATUR_CONTA AND FLMV.NATUR_TRANSACAO = FLNT.NATUR_TRANSACAO

where FLMV.DT_MOVTO between '2010-07-01' and '2010-07-07' and flmv.natur_mov = 'admb' ORDER BY FLMV.DT_MOVTO, FLMV.NUMERO, FLMV.NATUR_MOV, FLMV.NATUR_TRANSACAO O problema que eu no posso criar nem alterar tabelas nesse banco, apenas consultar os dados das j existentes. Com esse script consegui resolver o problema de criar as colunas dbito, crdito e acumulado, porm os valores da coluna acumulado ainda no esto corretos. No esto totalizando os valores da dbito - crdito, apenas repetindo a informao. DT_MOVTO 2010-07-01 00:00:00 2010-07-01 00:00:00 2010-07-01 00:00:00 2010-07-01 00:00:00 2010-07-07 00:00:00 2010-07-07 00:00:00 2010-07-07 00:00:00 2010-07-07 00:00:00 2010-07-07 00:00:00 2010-07-07 00:00:00 NUMERO PAGAR_REC NATUR_MOV VR_BRUTO_MV DEBITO 1 3 4 4 3 4 5 6 7 8 R P R P P P P P P P ADMB ADMB ADMB ADMB ADMB ADMB ADMB ADMB ADMB ADMB 59000.0000 1000.0000 8500.0000 3000.0000 120.0000 265.0300 96.0000 48.0000 69.2500 1000.0000 NULL -1000.0000 NULL -3000.0000 -120.0000 -265.0300 -96.0000 -48.0000 -69.2500 -1000.0000 CREDITO ACUMULADO

59000.0000 59000.0000 NULL -1000.0000 8500.0000 8500.0000 NULL -3000.0000 NULL -120.0000 NULL -265.0300 NULL -96.0000 NULL -48.0000 NULL -69.2500 NULL -1000.0000

Existe alguma maneira de incluir tudo no mesmo case, ou utilizar uma funo? Obrigada. mili.

segunda-feira, 2 de agosto de 2010 17:40 Responder | Citao | 0 Entrar para Votar mili, no entendi tua dvida. No entendi quais campos tu qr somar (ou subtrair), uma vez q tu no tm valores para dbito e crdito. A no ser q tenha estes campos na tua tabela e tu no mencionou eles. Neste caso faa o seguinte. Onde tem: (case when flmv.pagar_rec = 'R'

then flmv.vr_bruto_mv else (flmv.vr_bruto_mv) * -1 end ) as acumulado troca por: (colunaCredito - colunaDebito) as

acumulado

Gabriel Bauermann | Representante New Art Webdesing Criao e manuteno de Web Sites Fone (51) 8182 6819 | Email: gabriel.bauermann@gmail.com

tera-feira, 3 de agosto de 2010 12:11 Responder | Citao | 0 Entrar para Votar Gabriel, bom dia! As colunas dbito e crdito no existem. Os valores que devero constar nelas so da coluna VR_BRUTO_MV, por isso utilizei o case para diferenciar pela informao da coluna PAGAR_REC para onde deve ir cada valor. O que eu no estou conseguindo fazer colocar na coluna Acumulado (que tambm no existe) a conta entre os valores das colunas dbito e crdito. Exemplo: Valores da VR_BRUTO_MV: 1000,00 / 500,00 / 300,00 / 3000,00 / 200,00 Dados da PAGAR_REC: 1000,00 R (um crdito)

500,00 P (um dbito) 300,00 P (um dbito) 3000,00 R (um crdito) 200,00 P (um dbito)

Atravs desses dados das duas colunas (reais) preciso gerar outras trs colunas com os seguintes valores:

Dbito

Crdito 1000

Acumulado 1000 500 200

500 300 3000 200

3200 3000

O que eu consegui atravs do case foi colocar os valores nas colunas dbito e crdito, porem na coluna acumulado eu no consigo fazer a soma entre essas duas colunas: Crdito - Dbito (ou vice-versa, o que entrar primeiro). Espero que tenha conseguido explicar melhor agora.

Obrigada.

mili.

tera-feira, 3 de agosto de 2010 15:02 Responder | Citao | 0 Entrar para Votar mili, bom dia, O que ocorre o seguinte: Voc criou colunas atravs de clculos certo? Estas colunas no existem pelo nome que voc imagina ser DBITO ou CRDITO!

No funcionar assim: SELECT DEBITO - CREDITO AS RESULTADO Voc precisa pegar o bloco inteiro de cdigo de DEBITO e subratir o bloco inteiro de cdigo do CREDITO Exemplo: SELECT (case when flmv.pagar_rec = 'P' then -(flmv.vr_bruto_mv) end) - (case when flmv.pagar_rec = 'R' then flmv.vr_bruto_mv end) AS 'TESTE' Copia e cola este cdigo e faa um teste! Veja se ajuda Em todo caso, entendi o que voc est fazendo e j utilizei muito. De uma olhada na funo ISNULL, ajudar muito no tipo de desenvolvimento que voc est idealizando! Abraos!

DBA Vini

tera-feira, 3 de agosto de 2010 15:25 Responder | Citao | 0

Entrar para Votar Vc pode criar Procedures ou usar Tabelas temporarias ? se puder... da uma olhada nisto aqui:

CREATE TABLE #RESULT (TIPO CHAR(1), VALOR DECIMAL, DEBITO DECIMAL, CREDITO DECIMAL, TOTAL DECIMAL) DECLARE @TIPO AS CHAR DECLARE @VALOR AS DECIMAL DECLARE @DEBITO AS DECIMAL DECLARE @CREDITO AS DECIMAL DECLARE @TOTAL AS DECIMAL DECLARE C_SOMA CURSOR FOR SELECT PAGAR_REC, VR_BRUTO_MV, CASE WHEN PAGAR_REC = 'P' THEN VR_BRUTO_MV * -1 ELSE 0 END AS DEBITO, CASE WHEN PAGAR_REC = 'R' THEN VR_BRUTO_MV ELSE 0 END AS CREDITO FROM FLMV OPEN C_SOMA SELECT @TOTAL = 0 FETCH NEXT FROM C_SOMA INTO @TIPO, @VALOR, @DEBITO, @CREDITO; WHILE @@FETCH_STATUS = 0 BEGIN SELECT @TOTAL = @TOTAL + (@DEBITO + @CREDITO) INSERT INTO #RESULT SELECT @TIPO, @VALOR, @DEBITO, @CREDITO, @TOTAL FETCH NEXT FROM C_SOMA INTO @TIPO, @VALOR, @DEBITO, @CREDITO;

END CLOSE C_SOMA DEALLOCATE C_SOMA SELECT * FROM #RESULT DROP TABLE #RESULT

/**************************************\ TIPO VALOR DEBITO CREDITO TOTAL ---- ------- ---------- --------- ----R 59000 0 59000 59000 P 1000 -1000 0 58000 R 8500 0 8500 66500 P 3000 -3000 0 63500 P 120 -120 0 63380 P 265 -265 0 63115 P 96 -96 0 63019 \**************************************/

tera-feira, 3 de agosto de 2010 17:15 Responder | Citao | Moderador

0 Entrar para Votar Vinicius, boa tarde! Sim, eu sei que no funcionar esse tipo de select (select debito - credito as resultado), por isso queria incluir tudo no mesmo case. Testei o cdigo que voc me passou mas a coluna TESTE retornou NULL para todos os valores...

SELECT FLMV.DT_MOVTO, FLMV.NUMERO, FLMV.PAGAR_REC, FLMV.NATUR_MOV, FLMV.VR_BRUTO_MV, ((case when flmv.pagar_rec = 'P' then -(flmv.vr_bruto_mv) end) - (case when flmv.pagar_rec = 'R' then flmv.vr_bruto_mv end)) AS 'TESTE' FROM FLMV INNER JOIN FLNT ON FLMV.EMPRESA = FLNT.EMPRESA AND FLMV.FILIAL = FLNT.FILIAL AND FLMV.NATUR_MOV = FLNT.NATUR_MOV AND FLMV.NATUR_CONTA = FLNT.NATUR_CONTA AND FLMV.NATUR_TRANSACAO = FLNT.NATUR_TRANSACAO where FLMV.DT_MOVTO between '2010-07-01' and '2010-07-31' and FLMV.NATUR_MOV = 'admb' ORDER BY FLMV.DT_MOVTO, FLMV.NUMERO, FLMV.NATUR_MOV, FLMV.NATUR_TRANSACAO mili.

tera-feira, 3 de agosto de 2010 17:23 Responder |

Citao | 0 Entrar para Votar Oi mili, ta retornando NULL por causa da soma/subtrao com valor nulo em um dos campos. Mas a dica do Vincius t valendo, porm sugiro uma pequena alterao: SELECT (case when flmv.pagar_rec = 'P' then -(flmv.vr_bruto_mv) else 0 end) - (case when flmv.pagar_rec = 'R' then flmv.vr_bruto_mv else 0 end) AS 'TESTE'

Gabriel Bauermann | Representante New Art Webdesing Criao e manuteno de Web Sites Fone (51) 8182 6819 | Email: gabriel.bauermann@gmail.com

tera-feira, 3 de agosto de 2010 17:34 Responder | Citao |

0 Entrar para Votar O que de fato voc precisa apresentar nos campos nulos??? Qual das colunas de qual tabela??? Ou qual resultado de que conta voc quer apresentar nessa TESTE que veio NULL?? DICA: Coloque o que voc quer no lugar dos nulos utilizando um ELSE, j tentou? A estrutura CASE uma condicional, "e assim como IF" leva uma clusula ELSE CASE WHEN flmv.pagar_rec = 'P' THEN (bloco de contas) ELSE flmv.(Campo que deseja trazer) ps: Boa Gabriel!

DBA Vini

tera-feira, 3 de agosto de 2010 17:48 Responder | Citao | 0 Entrar para Votar Rui, boa tarde!

A soluo que voc me passou exatamente o que estou precisando. S que ainda estou com algumas dvidas. Como ainda no sei trabalhar com tabelas temporrias, no sei como chamar esses campos criados para dentro do meu select (debito, credito e total). SELECT FLMV.DT_MOVTO, FLMV.NUMERO, FLMV.PAGAR_REC, FLMV.NATUR_MOV, FLMV.VR_BRUTO_MV, FROM FLMV INNER JOIN FLNT ON FLMV.EMPRESA = FLNT.EMPRESA AND FLMV.FILIAL = FLNT.FILIAL AND FLMV.NATUR_MOV = FLNT.NATUR_MOV AND FLMV.NATUR_CONTA = FLNT.NATUR_CONTA AND FLMV.NATUR_TRANSACAO = FLNT.NATUR_TRANSACAO where FLMV.DT_MOVTO between '2010-07-01' and '2010-07-31' and FLMV.NATUR_MOV = 'admb' ORDER BY FLMV.DT_MOVTO, FLMV.NUMERO, FLMV.NATUR_MOV, FLMV.NATUR_TRANSACAO Outra dvida: no cdigo que voc passou eu preciso que os valores do campo Valor sejam alimentados pelos valores da coluna VR_BRUTO_MV da tabela FLMV, como eu fao isso? E a ltima duvida....voc criou uma tabela temporria certo? Li que a tabela s fica em "execuo" durante a conexo com o banco de dados, ou seja, ao desconectar a mesma deletada do banco. Se eu chamar alguns campos dessa tabela em uma view, toda vez que a view for acessada essa tabela ser criada automaticamente? Obrigada pela ajuda. mili.

tera-feira, 3 de agosto de 2010 17:59 Responder | Citao |

0 Entrar para Votar Tabelas temporrias tambm podem participar de JOINS.

DBA Vini

quarta-feira, 4 de agosto de 2010 12:28 Responder | Citao | 1 Entrar para Votar Ento... vamos por partes.... No tem como usar tabela temporaria em View... vc a usa so para fazer um processamento momentario... no caso a ideia seria melhor entao criar uma Function CREATE FUNCTION TESTE () RETURNS @RESULT TABLE (TIPO CHAR(1), VALOR DECIMAL, DEBITO DECIMAL, CREDITO DECIMAL, TOTAL DECIMAL) AS

BEGIN -- Declarao de Variaveis DECLARE @TIPO AS CHAR DECLARE @VALOR AS DECIMAL DECLARE @DEBITO AS DECIMAL DECLARE @CREDITO AS DECIMAL DECLARE @TOTAL AS DECIMAL -- Declarao do Cursos usado para ler linha a linha (algo como um DataReader do C#) DECLARE C_SOMA CURSOR FOR SELECT PAGAR_REC, VR_BRUTO_MV, CASE WHEN PAGAR_REC = 'P' THEN VR_BRUTO_MV * -1 ELSE 0 END AS DEBITO, CASE WHEN PAGAR_REC = 'R' THEN VR_BRUTO_MV ELSE 0 END AS CREDITO FROM FLMV OPEN C_SOMA SELECT @TOTAL = 0 -- Aqui como o comando Read() do DataReader, le uma linha da query declada no Cursor e carrega os valores nas variaveis que estao apos o "INTO" FETCH NEXT FROM C_SOMA INTO @TIPO, @VALOR, @DEBITO, @CREDITO; -- Aqui vai fazer um While enquanto tiver registros na Tabela do Cursor WHILE @@FETCH_STATUS = 0 BEGIN

-- Atualiza a variavel @TOTAL com o Valor do Saldo Total Atual SELECT @TOTAL = @TOTAL + (@DEBITO + @CREDITO) -- Insere o registro de movimentao na tabela temporaria INSERT INTO @RESULT SELECT @TIPO, @VALOR, @DEBITO, @CREDITO, @TOTAL -- Carrega a proxima linha da tabela FETCH NEXT FROM C_SOMA INTO @TIPO, @VALOR, @DEBITO, @CREDITO; END CLOSE C_SOMA DEALLOCATE C_SOMA RETURN END GO

SELECT * FROM TESTE()

What would Brian Boitano do ? ((2B || !2B) is Question) ? Se no da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....

VB.NET - Populando o controle TreeView com tabelas e colunas do SQL Server

iMasters | Jan 27 2012 | 1,138 Visits

Em meu artigo "VB.NET - Populando o controle TreeView com tabelas e colunas do MS Access", eu mostrei como preencher o controle TreeView com tabelas e colunas de um banco de dados MS Access. Chegou a hora de fazer a mesma coisa com o SQL Server. Eu sugiro duas opes para realizar esta tarefa: uma usando uma consulta SQL, e a outra obtendo as informaes de um arquivo XML atravs da classe XMLDataDocument. Abra o Visual Basic 2010 Express Edition, clique em New Project e selecione o template Windows Forms Application, informando o nome Tvw_SQLServer, e clique em OK:

No formulrio "form1.vb" do projeto, inclua, a partir da ToolBox, um controle TreeView (name=tvwDados) e um controle ImageList (name= Imgl). A seguir, no controle ImageList, clique na propriedade Images e inclua trs imagens que sero usadas para diferenciar os nveis dos ns do controle TreeView, visto que teremos trs nveis de ns (nodes): root, tabelas e colunas. Para isso, utilize a janela do Images Collection Editor, e clicando no boto Add, inclua trs imagens a seu gosto, conforme a figura abaixo:

A seguir, no controle TreeView, atribua propriedade ImageList o nome Imgl do controle acima. Vamos incluir, tambm, quatro controles Buttons, um Label e um OpenFileDialog no formulrio fom1.vb:

btnPopular - Preenche o controle TreeView com os dados; btnRetrair - Retrai todos os ns da rvore; btnExpandir - Expande todos os ns da rvore; btnSair - Encerra a aplicao;

OpenFileDialog - name= ofd1 - Exibe a caixa de dilogo "Abrir arquivo" para selecionar o arquivo .mdf; Label = lblTabelas - Exibe a quantidade de tabelas no banco de dados.

Conforme o leiaute da figura abaixo:

Definindo o cdigo do projeto


1. O namespace usado no formulrio para acessar as classes do provedor para o SQL Server Imports System.Data.SqlClient. No incio do formulrio, vamos definir a varivel nomeArquivo, que ir receber o nome do arquivo SQL Server: Dim nomeArquivo As String. 2. Cdigo do evento Click do boto Exibir:
Private Sub btnPopular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPopular.Click Dim arquivoSQLServer As OpenFileDialog = New OpenFileDialog() arquivoSQLServer.InitialDirectory = "c:\dados\" Dim caminho As DialogResult Dim caminhoArquivo As String arquivoSQLServer.Title = "Escolher Arquivo" arquivoSQLServer.FileName = "Nome Arquivo" arquivoSQLServer.Filter = "Arquivos SQL Server (*.mdf)|*.mdf" caminho = arquivoSQLServer.ShowDialog caminhoArquivo = arquivoSQLServer.FileName If caminhoArquivo = Nothing Then MessageBox.Show("Arquivo Invalido", "Abrir Arquivo", MessageBoxButtons.OK) Else nomeArquivo = Path.GetFileName(caminhoArquivo) popularTreeView(nomeArquivo.Replace(".MDF", "")) btnRetrair.Enabled = True btnExpandir.Enabled = True End If End Sub

O cdigo define algumas propriedades do controle OpenFIleDialog e chama a rotina popularTreeview, passando o caminho do arquivo selecionado.

InitialDirectory - Representa o diretrio a ser exibido quando a janela de dilogo aparecer pela primeira vez; Title - Usada para definir ou atribuir um ttulo a janela de dilogo; Filter - Representa o filtro da janela de dilogo que ser usado para filtrar o tipo de arquivos que sero carregados durante a localizao; FileName - Representa o nome do arquivo selecionado na janela de dilogo.

Naturalmente, voc ter que pedir permisso para acessar o SQL Server. O cdigo da rotina popularTreeView() mostrado a seguir:
Private Sub popularTreeView(ByVal DBSQLServer As String) 'define os objetos ADO .NET para acessar o SQL Server Dim conexaoSQLServer As SqlConnection = Nothing Dim cmd As SqlCommand Dim da As New SqlDataAdapter Dim ds As New DataSet 'define a string de conexo Dim strCon As String = "Data Source= .\SQLEXPRESS;Initial Catalog=" & DBSQLServer & ";Integrated Security=True" 'define a consulta para obter as tabelas e suas colunas Dim sqlConsulta As String = "SELECT TABLE_NAME, COLUMN_NAME " + "FROM information_schema.columns " + "ORDER BY TABLE_NAME, COLUMN_NAME" 'define os nodes que iremos usar no treeview Dim NoRaiz As TreeNode = Nothing

Dim NoPrincipal As TreeNode = Nothing Dim NoFilho As TreeNode = Nothing 'define algumas constanes e variaveis usadas Dim nomePrincipal As String = String.Empty Dim nomeFilho As String = String.Empty Dim BancoDados As String = DBSQLServer Try 'define e abre a conexo com o SQL Server conexaoSQLServer = New SqlConnection(strCon) conexaoSQLServer.Open() 'atribui o comando usado na conexo cmd = New SqlCommand(sqlConsulta, conexaoSQLServer) da.SelectCommand = cmd 'preenche o dataset da.Fill(ds, "Dados_Sistema") tvwDados.Nodes.Clear() 'inclui o node raiz NoRaiz = tvwDados.Nodes.Add(key:="Root", text:=BancoDados, imageIndex:=0, selectedImageIndex:=0) Dim contaTabelas as Integer For Each row As DataRow In ds.Tables("Dados_Sistema").Rows If nomePrincipal <> row(0).ToString Then NoPrincipal = NoRaiz.Nodes.Add(key:="Table", text:=row(0).ToString, imageIndex:=1, selectedImageIndex:=1) nomePrincipal = row(0).ToString contaTabelas += 1

End If 'define os ns filhos NoFilho = NoPrincipal.Nodes.Add(key:="Column", text:=row(1).ToString, imageIndex:=2, selectedImageIndex:=2) Next lblTabelas.Text = contaTabelas.ToString & " Tabelas no arquivo" tvwDados.Nodes(0).EnsureVisible() Catch ex As Exception MessageBox.Show("Erro ao realizar a operao com o arquivo : " & ex.Message) Exit Sub Finally 'libera os recursos da conexo usada conexaoSQLServer.Close() conexaoSQLServer.Dispose() conexaoSQLServer = Nothing End Try End Sub

A consulta SQL usada para retornar as tabelas e suas colunas usa a view INFORMATION_SCHEMA.COLUMNS para obter o nome das tabelas e colunas do SQL Server. Essa view contm uma linha para cada coluna acessvel para o atual usurio no banco de dados atual. A view INFORMATION_SCHEMA.COLUMNS baseada nas tabelas do sistema nosysobjects, type_info spt_data, systypes, syscolumns, syscomments, sysconfigures e syscharsets. Abaixo vemos o resultado da consulta executada no SQL Server Management Studio:

Vamos usar essa view para obter as tabelas e as consultas do banco de dados. O cdigo do evento Click do boto Expandir:
Private Sub btnExpandir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExpandir.Click 'expande todos os ns tvwDados.ExpandAll() End Sub

O mtodo ExpandAll() expande todos os nodes.

O cdigo do evento Click do boto Retrair:


Private Sub btnRetrair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRetrair.Click 'retrai todos os ns tvwDados.CollapseAll() End Sub

O mtodo CollapseAll() retrai todos os nodes. O cdigo do evento Click do boto Sair:
Private Sub btnSair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSair.Click Dim resultado As DialogResult = MessageBox.Show("Deseja encerrar a aplicao ?", _ "Encerrar", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) If resultado = DialogResult.Yes Then Application.Exit() End If End Sub

Executando o projeto ao clicar no boto Exibir, teremos a caixa de dilogo "Abrir arquivo" aberta para selecionarmos o arquivo SQL Server:

Aps selecionar o arquivo, o controle preenchido com os nomes das tabelas e suas colunas:

Para obter o n selecionado no controle TreeView, ns usamos o evento AfterSelect, pois o evento Click do controle retorna apenas o n anterior selecionado. No cdigo usamos as propriedades e.Node e SelectedNode para obter o n selecionado:

Private Sub tvwDados_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvwDados.AfterSelect 'obtem o item selecionado Dim itemSelecionado As String = tvwDados.SelectedNode.ToString 'remove a string TreeNode itemSelecionado = itemSelecionado.Replace( "TreeNode: ", "") 'verifica se o item nulo If (e.Node.Parent IsNot Nothing) Then 'verifica o tipo do no If (e.Node.Parent.GetType() Is GetType(TreeNode)) Then If e.Node.Parent.Text = nomeArquivo Then 'mostra o nome da tabela e da coluna selecionada MessageBox.Show(e.Node.Parent.Text + "." + itemSelecionado) Else 'mostra so o nome da tabela MessageBox.Show(itemSelecionado) End If End If End If End Sub

Executando o projeto e selecionando um n com o mouse iremos obter :

Pegue projeto completo aqui: Tvw_SQLServer.zip

sql query between dates Archived Forums V forums > Visual Basic Express Edition Question

Sign in to vote i have a form that needs to run a query on the button click that queries between dates and seem to have a problem with it. i'm using sql.CommandText = "SELECT * FROM mytablename WHERE column1 between '" & datetimepicker1.value & "' AND '" & datetimepicker2.value & "';" this returns no data. if i do it for one date like sql.CommandText = "SELECT * FROM mytablename WHERE column1 like '" & datetimepicker1.value & "'

it works ok...so what am i missing in my between statement?

Tuesday, March 23, 2010 8:41 PM

xp_user33 0 Points Answers

Sign in to vote sql.CommandText = "SELECT * FROM tablename WHERE date >= #" & DateTimePicker1.Value.Date & "# AND date <= #" & DateTimePicker2.Value.Date & "#" Wednesday, March 24, 2010 11:51 AM

xp_user33 0 Points

All replies

Sign in to vote sql.CommandText = "SELECT * FROM mytablename WHERE myDate >= " & datetimepicker1.Value & datetimepicker2.Value By the way, are you using Access or SQL Server? The above code snippet is untested. "AND myDate <= " &

Only performance counts! Tuesday, March 23, 2010 9:01 PM Sylva Okolieaboh Office of the Accountant... 5,160 Points

Sign in to vote oh..sorry. the snippet is running in a visual basic form for an acess 2000 table. so it's that simple? i don't have to write between? just where column1 >= " & datetimepicker1.Value & Tuesday, March 23, 2010 10:37 PM "AND column1 <= " & datetimepicker2.Value & " ??

xp_user33 0 Points

Sign in to vote IIRC in Access you need to surround dates with # chars not single quotes. So something like this might work.

sql.CommandText = "SELECT * FROM mytablename WHERE column1 between #" & datetimepicker1.value & "# AND #" & datetimepicker2.value & "#;" Tuesday, March 23, 2010 11:37 PM

Riced (FWSR) 16,250 Points

Sign in to vote Use the parameter classes and avoid all that together. Read: Coding Horror: Give me parameterized SQL or give me death

John Grove - TFD Group, Senior Software Engineer, EI Division, http://www.tfdg.com Wednesday, March 24, 2010 1:22 AM

JohnGrove 35,080 Points

Sign in to vote thanks all. i will try your suggestions first thing in the morning. in my searches to find how to fix my issue, i seen several examples of parameter queries, but they didn't really explain how they worked and that has been my only problem in going forward with trying to learn them. for my needs, i use datetimepickers and textboxes to run most of the queries on a button click instead of setting say @startdate to be equal to a given date - it would be put in with the textbox so i'd have to say @startdate = datetimepicker1.value somewhere right? i'm very much a noob when it comes to sql queries, so jumping right into parameter queries might be the best thing instead of the "old fashioned" way, but i need a real tutorial, not just a quick example that doesn't explain very much. would you happen to have a link to a sql parameter queries for dummies guide? or at least a step by step guide? that i can really learn from?

*** and just a side note...i'm not actually programming inside of access - i'm using visual studios 2008 and programming in visual basic.

Wednesday, March 24, 2010 2:27 AM

xp_user33 0 Points

Sign in to vote //example Basically, do not hardcode the values directly into the string as you were doing. //Incorrect sql.CommandText = "SELECT * FROM mytablename WHERE column1 between #" & datetimepicker1.value & "# AND #" & datetimepicker2.value & "#;" //correct Dim sql As String = "SELECT * FROM mytablename WHERE column1 between @Date1 AND @Date2" Dim table As New DataTable() Using cmd As New SqlCommand(sql, conn) cmd.Parameters.AddWithValue("@Date1", datetimepicker1.value) cmd.Parameters.AddWithValue("@Date2", datetimepicker2.value)

Using da As New SqlDataAdapter(cmd) da.Fill(table) End Using End Using

John Grove - TFD Group, Senior Software Engineer, EI Division, http://www.tfdg.com Wednesday, March 24, 2010 2:38 AM JohnGrove 35,080 Points

Sign in to vote You may have to use instead of AddWithValue cmd.Parameters.Add(..............) Which is more concise for DataTime

John Grove - TFD Group, Senior Software Engineer, EI Division, http://www.tfdg.com Wednesday, March 24, 2010 2:39 AM JohnGrove

35,080 Points

Sign in to vote Do a google search on SqlParameter and DateTime An older post (In C#, but relevant)

John Grove - TFD Group, Senior Software Engineer, EI Division, http://www.tfdg.com Wednesday, March 24, 2010 2:43 AM

JohnGrove 35,080 Points

Sign in to vote Dim PathToDataBase As String = CurDir() & "\mydatabasename.mdb"

Dim ConnectionStringToDatabase As String ConnectionStringToDatabase = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" & _ PathToDataBase & _ ";Persist Security Info=True"

Dim cn As New OleDb.OleDbConnection(ConnectionStringToDatabase) Dim sql As New OleDb.OleDbCommand sql.CommandText = "SELECT * FROM mytablename WHERE column1 = '" & textbox1.text & "' AND date like '" & today & "';" sql.Connection = cn Dim Da As New OleDb.OleDbDataAdapter(sql) Dim Dt As New DataTable Da.Fill(Dt) datagridview1.datasource = dt counter.text = dt.rows.count this is a sample of my code. i used this to fill a datagridview based on the information in a textbox and today's date and it works fine. i have a 2nd query that needs to have the same textbox value along with the between dates query.. so i could say... (starting from where i have my sql command)

sql.CommandText = "select * from mytablename where column1 = @name and date between @date1 and @date2" ///skipping to datatable dim dt as new datatable using cmd as new sqlcommand(sql,cn) cmd.parameters.addwithvalue("@date1", datetimepicker1.value) cmd.parameters.addwithvalue("@date2", datetimepicker2.value) cmd.parameters.addwithvalue("@name", textbox1.text) using da as new sqldataadapter(cmd) or just keep the oledbdataadapter ? or both? please correct me if i misunderstand. Wednesday, March 24, 2010 3:03 AM

xp_user33 0 Points

Sign in to vote

Why don't you extract it into a method? (If you have an existing connection, use that since the default is usually set to pooling anyhow. Private Function FillDateBetween() As DataTable Dim sql As String = "SELECT * FROM mytablename WHERE column1 between @Date1 AND @Date2" Dim table As New DataTable() Using cmd As New SqlCommand(sql, conn) cmd.Parameters.AddWithValue("@Date1", datetimepicker1.value) cmd.Parameters.AddWithValue("@Date2", datetimepicker2.value) Using da As New SqlDataAdapter(cmd) da.Fill(table) End Using End Using Return table End Function

John Grove - TFD Group, Senior Software Engineer, EI Division, http://www.tfdg.com Wednesday, March 24, 2010 3:51 AM JohnGrove 35,080 Points

Sign in to vote since John is doing an excellent job of helping you straighten out your code, I'll post these 2 links for SQL query formats that I've found helpful: http://www.w3schools.com/SQL/default.asp http://www.1keydata.com/sql/sqlselect.html

note also, if you use DateTimePicker.Value, this includes the Time portion of the Date, so your query may not return any records, especially if your database table includes the time portion also if so, try using this to only return the Date portion: DateTimePicker1.Value.Date Wednesday, March 24, 2010 5:56 AM

jwavila (MVP) 39,650 Points

Sign in to vote thanks.

in my database, i have the date column set to short and my datetimepicker in my form is also set to short and in the properties i set it's format to m/dd/yyyy. when i used just one it worked fine, but when i did the between, it didn't work, but like you said thanks to john, i think that will be fixed as soon as i try the code. but i do think just to be safe and make sure it works properly, i should use your suggestion as well. Wednesday, March 24, 2010 9:42 AM

xp_user33 0 Points

Sign in to vote In agree with John...

Adding only one thing, the delimitter char in access for dates is the # instead of " ' "

Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta". Si la respuesta te ha sido util Votala. Mi Blog: Jtorrecilla Enlace a Faq de Winforms en Ingles Muy bueno Wednesday, March 24, 2010 9:48 AM

jtorrecilla (MVP) 27,085 Points

Sign in to vote thanks all. i tried using the parameter query and after importing system.data.sqlclient

i was able to almost get it to work.... i think where i already have an oledb connection, it doesn't like trying to connect with sql also...i got a sql connection error when trying to run it... so i used WHERE date >= #" & DateTimePicker1.Value.Date & "# AND date <= #" & DateTimePicker2.Value.Date & "#" and it works great...although i am going to look more into parameterized queries. thanks again for all your help Wednesday, March 24, 2010 11:40 AM

xp_user33 0 Points

Sign in to vote sql.CommandText = "SELECT * FROM tablename WHERE date >= #" & DateTimePicker1.Value.Date & "# AND date <= #" & DateTimePicker2.Value.Date & "#" Wednesday, March 24, 2010 11:51 AM

xp_user33 0 Points

Sign in to vote Try this:

sql.CommandText = "SELECT * FROM tablename WHERE date >= #?# and date<=#?#"

sql.Parameters.AddWithValue("par1",DateTimePicker1.Value.Date ) sql.Parameters.AddWithValue("par2",DateTimePicker2.Value.Date )

Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta". Si la respuesta te ha sido util Votala. Mi Blog: Jtorrecilla Enlace a Faq de Winforms en Ingles Muy bueno
Filtrar dados entre Datas ( BD Acess ) Iniciado por programadorvb6 , 10 Fev 2012 13:15

Por favor inicie sesso para responder 4 respostas a este tpico #1programadorvb6 CRLF

Membro 803 mensagens

Publicado 10 de Fevereiro de 2012 - 13:15 Ol boa tarde. Estou com dificuldade em resolver este erro, talvez me possam ajudar, j vi em vrios sites algumas sugestes para resolver filtragem de dados entre duas datas em BD Acess com instrues em SQL, mas at agora no tive xito. O que poder ser? Junto anexo alguns dados :

- O erro :

- No Mdulo : Cdigo (vb.net): Imports System.Data.OleDb Module Ligacao_BD Public Sub Procura_Especifica(ByVal Codigo_Sql As String, F As RegistoH) Dim Liga_BD As String = ConString.ToString Dim ObjCommandoP As New OleDbCommand ObjCommandoP.Connection = New OleDbConnection(Liga_BD) ObjCommandoP.CommandText = Codigo_Sql.ToString ObjCommandoP.Connection.Open() Dim ObjLerDados As OleDbDataReader = ObjCommandoP.ExecuteReader() If Codigo_Sql.ToString <> Nothing Then Try If ObjLerDados.HasRows Then Do While ObjLerDados.Read() F.Caixa_Nome.Text = Convert.ToString(ObjLerDados(1)) F.Caixa_Razao.Text = Convert.ToString(ObjLerDados(2)) F.Caixa_Piso.Text = Convert.ToString(ObjLerDados(3))

F.Caixa_Empresa.Text = Convert.ToString(ObjLerDados(6)) Loop Else MessageBox.Show("Valores no encontrados. ", "Ateno", MessageBoxButtons.OK, MessageBoxIcon. Error) End If ObjLerDados.Close() ObjLerDados.Dispose() Catch ex As Exception MessageBox.Show("Erro descrio : " & vbCrLf & ex.Message & vbCrLf, "Ateno", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End If End Sub End Module - Para Chamar a rotina : Cdigo (vb.net): Call Procura_Especifica("SELECT * FROM FolhaLab WHERE Data Between '" & Me.Data_De.Value.Date & "' And '" & Me.Data_Ate.Value.Date & "'" & "Order By Data", Folha_Laboral.RegistoH)

all Procura_Especifica("SELECT * FROM FolhaLab WHERE Data Between #" & Format(Me.Data_De.Value, "dd/mm/yyyy") & "# And #" & Format(Me.Data_Ate.Value, "dd/mm/yyyy") & "#", Folha_Laboral.RegistoH) Call Procura_Especifica("SELECT * FROM FolhaLab WHERE Data Between '" & Me.Data_De.Value.Date & "' And '" & Me.Data_Ate.Value.Date & "'" & "

Order By Data", Folha_Laboral.RegistoH) Call Procura_Especifica("SELECT * FROM FolhaLab WHERE Data Between '" & Format(Me.Data_De.Value.Date, "YYYY-MM-DD") & "' And '" & Format(Me.Data_Ate.Value.Date, "YYYY-MM-DD") & "'" & " Order By Data", Folha_Laboral.RegistoH) Call Procura_Especifica("SELECT * FROM FolhaLab WHERE Data Between CONVERT(DATE,'" & Format(Me.Data_De.Value.Date, "yyyy-MM-dd") & "',102) And CONVERT(DATE,'" & Format(Me.Data_Ate.Value, "yyyy-MM-dd") & "',102)" & " Order By Data", Folha_Laboral.RegistoH) filtrar por dats Public Function FiltraPorData() As DataTable Dim Table As New DataTable

Dim ds As New DataSet Dim adptr As New OleDb.OleDbDataAdapter("select * from Clientes where dt_nasc_cli BETWEEN #" & TextBox1.Text & "# AND #" & TextBox1.Text & "#", My.Settings.LojaAConnectionString) adptr.Fill(ds, "Clientes") Table = ds.Tables(0)

Return Table End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ClientesDataGridView.DataSource = FiltraPorData() End Sub

B - Gerando relatrios com DataReport em um intervalo de datas

Pensei que nunca mais irei voltar a falar do DataReport mas atendendo solicitaes eu vou mostrar neste artigo , de forma rpida e simples, como voc pode gerar relatrios com DataReport em intervalo de datas. Inicie um novo projeto no VB6 e insira um componente DataEnvironment no seu projeto. Vamos usar este componente apenas para criar o comando SHAPE que ir gerar a instruo SQL para extrair os dados das tabelas Orders e Customers do banco de dados Norhtwind.mdb. Antes de criarmos a conexo aproveite e inclua no formulrio padro, que eu vou chamar de frmDataEnv, os componentes: DTPicker - DTPicker1 DTPicker - DTPicker2 CommandButton - cmdVisualizar Dois controles Images apenas para colocar umas imagens no formulrio

O cdigo deste formulrio dado a seguir: No cdigo eu estou inicializando os controles DTPicker , fazendo uma validao de datas e exibindo o relatrio gerado. Option Explicit Private Sub cmdVisualiza_Click() 'Exibe o relatrio no modo visualizao DataReport1.Show vbModal End Sub Private Sub DTPicker1_Change() 'Verifica se o valor da primeira data menor que o da segunda e faz o ajuste If DTPicker1.Value > DTPicker2.Value Then DTPicker1.Value = DTPicker2.Value End If End Sub Private Sub DTPicker2_Change() 'Verifica se o valor da segunda data maior que o da primeira e faz o ajuste If DTPicker2.Value < DTPicker1.Value Then DTPicker2.Value = DTPicker1.Value End If End Sub Private Sub Form_load() DTPicker1.Value = CDate("01/01/1994") 'inicia os valores para o primeiro controle DTPicker2.Value = CDate("12/21/1996") 'inicia os valores para o segundo controle End Sub Voltando ao DataEnvironment faa o seguinte: Defina a conexo com o banco de dados Northwind.mdb ( no meu caso esta na pasta d:\teste) Crie um comando SQL Command1 Crie um comando SQL Command2 filho de Command1

Inclua um descritor DataReport - DataReport1 - no projeto e crie um relatrio conforme abaixo:

Agora no evento Initialize do DataReport inclua o cdigo SQL (comando SHAPE) gerado: Private Sub DataReport_Initialize() 'define as variveis usadas no projeto Dim strSQL As String Dim strAte As String Dim strInicio As String Dim oConn As New ADODB.Connection Dim oRS As New ADODB.Recordset oConn.CursorLocation = adUseClient

'estou usando a conexo que ja foi criada no dataenvironment oConn.ConnectionString = DataEnvironment1.Connection1 'abre a conexo com o banco de dados Norhtwind.mdb em d:\teste oConn.Open 'pega as datas de inicio e de fim With frmDataEnv strInicio = .DTPicker1.Value strAte = .DTPicker2.Value End With 'define o titulo do relatrio DataReport1.Title = "De: " & strInicio & " At: " & strAte 'define o comando SHAPE strSQL = "SHAPE { " strSQL = strSQL & "SELECT DISTINCT C.* " strSQL = strSQL & "FROM Customers C INNER JOIN Orders O ON C.CustomerID = O.CustomerID " strSQL = strSQL & "WHERE O.Orderdate " strSQL = strSQL & "BETWEEN #" & strInicio & "# " strSQL = strSQL & "AND #" & strAte & "# " strSQL = strSQL & "ORDER BY C.CompanyName " strSQL = strSQL & "} AS Command1 " strSQL = strSQL & "APPEND ({ " strSQL = strSQL & "SELECT Orders.* " strSQL = strSQL & "FROM Orders " strSQL = strSQL & "WHERE Orderdate " strSQL = strSQL & "BETWEEN #" & strInicio & "# " strSQL = strSQL & "AND #" & strAte & "# " strSQL = strSQL & "} AS Command2 " strSQL = strSQL & "RELATE 'CustomerID' TO 'CustomerID') " strSQL = strSQL & "AS Command2 " oRS.Open strSQL, oConn, adOpenForwardOnly 'atribui o recordset gerado ao datareport

Set DataReport1.DataSource = oRS End Sub

No cdigo acima estou definindo o comando SHAPE. Lembra dele ? No !!! Ento para saber mais leia os seguintes artigos do site : Criando um formulrio Mestre-Detalhes com SHAPE/APPEND Usando o Controle Hierarchical FlexGrid

O comando SHAPE / APPEND define a estrutura da hierarquia de um recordset e os comandos necessrios para preencher o recordset com os dados da hierarquia. O comando atribui um recordset filho para a propriedade Value dos objetos Fields de um Recordset Pai. A sintaxe : SHAPE {parent-command} [[AS] table-alias] APPEND {child-command} RELATE(parent-column TO child-column)" Onde : parent-command, child-command uma consulta que retorna um objeto Recordset . O comando esta relacionado ao respectivo Provedor. parent-column Uma coluna ( campo) no Recordset retornado por parent-command. child-column Uma coluna no Recordset retornada porchild-command. table-alias Um alias usado para referenciar o Recordset retornardo por parent-command

A sintaxe usada a da linguagem DATA SHAPING . Podemos dividir a instruo em trs partes:

1. 2.

A instruo SQL que gera o Recordset Pai ( Parent Recordset) A instruo SQL que gera o Recordset Filho ( Child Recordset)

3.

A instruo que faz o relacionamento entre os dois Recordsets

A sintaxe a seguinte:

"SHAPE {parent-command} [[AS] table-alias] APPEND {child-command} RELATE(parent-column TO child-column)"


Nota: O alis usado no comando SHAPE , ([AS] table-alias]) opcional

"SHAPE {< INSTRUO SQL 1 >} [[AS] table-alias] APPEND {<INSTRUO SQL 2>} RELATE(<INSTRUO SQL 3>)"

Agora s rodar e verificar o relatrio gerado:

Pegue o projeto aqui :

drpt_dat.zip

Eu sei apenas VB , mas eu gosto...

trabalhando com Dados em .NET

Em se tratando de acesso a dados em VB.Net e ASP.Net temos duas, DataSet e DataReader. Mas em relao ao desempenho? Saiba um pouco do que so essas duas formas de acesso a dados.
por David Pomarico
2000

Utilizando DataReader Como voc j deve saber , o objeto DataReader pode ser usado para ler os dados retornados pelos objetos Command. Ele permite acessar e percorrer os registros no modo de somente leitura e somente para frente - forward-only. O DataReader no oferece acesso desconectado e no permite alterar ou atualizar a fonte de dados original, sendo usado para obter rapidamente dados de apenas leitura. Apresenta poucos recursos mas seu desempenho muito melhor do que o oferecido pelo objeto DataSet. Situaes quando o uso de DataReader recomendado : 1. Os dados com os quais voc esta trabalhando precisam estar sempre atualizados, ou seja, voc precisa de dados on-line em tempo real. 2. Voc precisa apenas de um acesso onde os dados no sofrero atualizaes nem buscas (filtros) e sero somente exibidos. Pelos motivos acima no existe uma forma de voc saber quantas linhas de uma tabela sero retornados pelo objeto DataReader. Bom, agora que voc j sabe para que serve e em qual situao utiliz-lo, vou mostrar um exemplo de um DataReader: Private sub CarregaDados()

Dim conn As New SqlConnection() Dim DR As SqlDataReader conn.ConnectionString = "string de conexo" Dim cmd As SqlCommand = conexao.CreateCommand cmd.CommandText = "Select CdigoDoFuncionrio, Nome ,SobreNome,Cargo From Funcionrios" conexao.Open() DR = cmd.ExecuteReader() While DR.Read MsgBox DR.Item(0) End While dr.Close() conexao.Close() End Sub Utilizando DataSet Para acessar o banco de dados, executar o comando SQL via DataAdapter, trazer os dados e preencher o DataSet usamos o mtodo Fill, que retorna as linhas de uma fonte de dados usando a declarao SELECT definida por uma propriedade SelectCommand associada. A principal caracterstica do DataSet totalmente trabalhar desconectado e voc pode usar um DataSet para retornar dados de um banco de dados e tambm para mover os dados de um DataSet para um banco de dados. Porm o prprio DataSet no faz conexo alguma com o banco de dados, ele nem mesmo tem um objeto para realizar tal conexo. A ligao entre o banco de dados e o DataSet feita pelo objeto DataAdapter (Adaptador de dados). Abaixo uma ilustrao que procura mostrar a interao entre os objetos ADO.NET e o modelo desconectado com o DataSet. Private Sub CarregaDataSet() Dim strConn As String = "string de conexo" Dim conn As New OleDbConnection(strConn) Dim sql As String = "Select * from tblClientes Where cli_ID < 20"

Dim cmd As New OleDbCommand(sql, conn) Dim AD As New OleDbDataAdapter(cmd) Dim DS As New DataSet() DA.Fill(DS, "Clientes") End Sub A diferena entre DataReader e DataSet Em se tratando de acesso a dados em VB.Net e ASP.Net temos duas, DataSet e DataReader. Mas em relao ao desempenho? Quando falamos de desempenho, a utilizao de um DataReader leva vantagem, pois obtem o acesso aos dados assim que o objeto fica disponvel, do contrrio do DataSet que necessrio aguardar seu preenchimento, alm disso o DataReader do tipo ForwardOnly (dados somente leitura e com acesso do primeiro registro at o ltimo). J o DataSet voc pode navegar pelos dados tanto para frente como para trs. Vantagens entre DataReader e DataSet A seguir temos um cdigo que preenche um DataSet com o resultado de uma tabela e exibe o primeiro campo em cada linha: Dim conn As New SqlConnection(connectionString) Dim da As New SqlDataAdapter("select * from tabela;", conn) Dim ds As New DataSet() da.Fill(ds) Dim dr As DataRow For Each dr In ds.Tables(0).Rows Console.WriteLine(dr(0).ToString()) Next dr Observando o cdigo voc pode notar que a leitura dos dados feita no loop for each comea somente aps o DataSet ter sido preenchido. Voc no pode realizar outra tarefa enquanto o DataSet estiver sendo preenchido.

Vamos ver agora o cdigo que realiza a mesma tarefa usando um DataReader: Dim con As New SqlConnection(connectionString) Dim cmd As New SqlCommand("select * from tabela", con) cmd.Connection.Open() Dim dr As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection) While dr.Read() Console.WriteLine(dr.GetString(0)) End While dr.Close() con.Close() Neste caso a leitura dos dados feita assim que os dados estiverem disponveis, onde dr.Read() retorna false se no encontrar dados. O DataReader armazena um resultado por vez no cliente, e com isto reduz o uso de memria e recursos do sistema. Ento usar um DataReader mais rpido que usar um DataSet, Certo? A resposta sim... depende. Lembre-se de que ao escolher usar um DataReader somente olhando a questo do desempenho ir fazer com que voc no tenha acesso a algumas funcionalidades iguais ao do DataSet, por exemplo a filtragem de dados. A nica justificativa no uso do DataReader seria para popular dados "somente leitura" (forward only), por exemplo para popular um DataGrid ou um Relatrio. Voc pode aumentar o desempenho de um DataSet desativando algumas funcionalidades, se no utilizadas: 1. ds.EnforceConstraints = false - desabilita a verificao das restries de integridade referencial durante a operao e pode tornar a operao mais rpida. 2. Executamos o mtodo BeginLoadData antes de usar o mtodo Fill para desabilitar a notificao, indexao. E depois executamos o mtodo EndLoadData depois de usar o mtodo Fill para habilitar a indexao a notificao. ds.Tables.Add("tblClientes"); ds.Tables["tblClientes"].BeginLoadData(); da.Fill(ds.Tables["tblClientes"]); ds.Tables["tblClientes"].EndLoadData(); Com isto melhoramos o desempenho do DataSet e justificamos sua utilizao a fim de podermos usar seus recursos.

sando Crystal Reports - Parte I Relatrios so uma caracterstica do sistema que poucos desenvolvedores gostam, pelo menos, conheo alguns que preferem criar sistemas complexos, do que fazer um relatrio. Quando falamos em relatrios na Web ento, parece o caos, pois teremos de usar HTML, CSS etc. Com o Crystal Reports, podemos criar relatrios robustos e poderosos em aplicaes ASP.NET, como vrias funcionalidades, como: parmetros, frmulas, grupos, subrelatrios, grficos etc. Essas funcionalidades veremos como criar, usando apenas alguns cliques neste artigo. Nota: Usaremos nesse artigo, o Visual Studio 2008. Voc pode estar perguntando, por que no usar a nova verso, Visual Studio 2010? No Visual Studio 2010, o Crystal Reports deixou de fazer parte da ferramenta, ele ter de ser instalado em separado. A verso que suporta o Visual Studio 2010, ainda esta em fase beta, ento, achei melhor, mostrar os exemplos no Visual Studio 2008. Vale lembrar que os exemplos tem 100% de chance de serem compatveis com a verso do Crystal Reports para Visual Studio 2010. Para mais informaes da verso beta, voc pode acessar: www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/20322 . Criando a aplicao ASP.NET Abra o Visual Studio 2008 e crie uma nova aplicao ASP.NET (File>New>Web Site). Usaremos a linguagem C# e digite a pasta virtual para salvar o projeto (Figura 1).

Figura 1. Criando o projeto ASP.NET Existe um template chamado ASP.NET Crystal Reports Web Site que cria uma aplicao ASP.NET, onde adicionado um controle CrystalReportViewer (para exibir o relatrio) e um CrystalReportSource (objeto que disponibiliza o relatrio para o CrystalReportViewer). No existem muitas diferenas em relao ao projeto que criamos, mas fique a vontade de usar essa opo.

Criando o primeiro relatrio Com a aplicao ASP.NET criada, clique com o boto direito no nome do projeto e escolha a opo Add New Item. Na janela, escolha o item Crystal Report e d um nome ao relatrio (Figura 2).

Figura 2. Criando o primeiro relatrio Clique em Add para finalizar. Ser criado um arquivo CrystalReport.rpt no Solution Explorer e para configurar o relatrio ser mostrado um wizard (Figura 3).

Figura 3. Wizard para criao do banco de dados

Clique em OK e no prximo passo, vamos escolher a tecnologia para acesso ao banco de dados. Escolha Create New Conecction>OLE DB. Ser aberto um editor, selecione Microsoft OLE DB Provider for SQL Server e clique em Next. A seguir, adicione as configuraes do banco de dados SQL Server (usarei nos exemplos, o banco de dados Northwinddo SQL Server 2008 Express). Clique em Next e em Finish para terminar a configurao do banco. Voltamos agora para a tela que mostra a conexo com o banco criada, onde podemos escolher a(s) tabela(s) que trabalharemos (escolha Customers), bastando arrastar a(s) mesma(s) para a seo Selected Tables (Figura 4).

Figura 4. Conexo com o banco criada e escolhendo as tabelas Clique em Next. Agora podemos escolher os campos (Fields) que sero mostrados no relatrio. Escolha os campos necessrios e clique em Next. A prxima etapa indica se vamos criar um grupo para o relatrio, clique em Next. Nota: Podemos adicionar um grupo aps a criao do relatrio.

Clique em Next novamente e escolha um estilo para o relatrio na ltima tela do wizard. Clique em Finish para finalizar a criao do relatrio (Figura 5).

Figura 5. Relatrio fica dockado no IDE do Visual Studio Temos um treeview com vrias opes, entre elas: acesso aos campos da consulta, frmulas, grupos, parmetros, campos especiais (que mostra data de criao do relatrio, total de registros, nmero da pgina etc), entre outros. No relatrio temos cinco sees: Report Header (cabealho do relatrio), Page Header (cabealho da pgina), Details(seo onde sero mostrados os dados), Report Footer (rodap do relatrio) e Page Footer (rodap da pgina).

Para visualizar o relatrio, crie um novo Web Form (menu Website>Add New Item), dando o nome de preeview.aspx e adicionando um CrystalReportViewer. Na Smart Tag do controle, escolha New report source no item Choose Report Source. Ser aberto um editor para escolher o relatrio que desejamos exibir. Escolha CrystalReport.rpt na opo Specify a Crystal Report for the CrystalReportSource control e clique em OK (Figura 6).

Figura 6. Escolhendo o relatrio para ser exibido Note que o relatrio mostrado em tempo de execuo (sem os valores reais). Tambm podemos visualizar o relatrio atravs da opo Main Report Preview na tela das sees do relatrio. No formulrio Default.aspx, adicione um boto e adicione o seguinte cdigo: Response.Redirect("preeview.aspx");

Execute a aplicao e veja o relatrio em execuo (Figura 7).

Figura 7. Executando o relatrio na aplicao ASP.NET A barra de ferramentas do relatrio tem as opes para: exportao, impresso, navegao entre as pginas do relatrio, busca de textos e zoom etc. Na exportao, temos a opo de exportar para os formatos: Crystal Report (RPT), Acrobat (PDF), Word (DOC), Excel (XLS) e Rich Text Format (RTF).

Podemos configurar (remover/adicionar opes, inclusive a prpria barra de ferramentas como um todo), atravs das propriedades do CrystalReportViewer. Agrupamento Para criar um relatrio agrupado, bastante simples. Poderamos ter configurado essa funcionalidade no prprio wizardde criao do relatrio. Mas com o relatrio pronto, basta clicar com o boto direito e escolher a opo Insert>Group. Ser aberta uma janela, onde devemos informar o campo que vamos agrupar. Escolha City e clique em OK. Rode a aplicao novamente e veja como o relatrio ficou agrupado pelo campo City. Ser mostrada uma lista dos grupos ao lado do relatrio, onde ao escolher um item, o mesmo ser marcado e seus dados mostrados em destaque. Para os prximos relatrios criados no artigo, para visualiz-los em tela, basta alterar o relatrio noCrystalReportSource adicionado na tela de preeview.

Figura 8. Relatrio agrupado e um treeview para navegao dos grupos Agrupamento por perodo ou valores O cliente solicitou um relatrio sobre a venda dos funcionrios para serem agrupadas por um perodo de valores, por exemplo. Um grupo com os funcionrios que venderam at R$ 100.000,00, outro com os funcionrios entre R$ 100.000,00 e R$ 200.000,00 e outro com os funcionrios que tiveram vendas acima de R$ 200.000,00.

Com o Crystal esse tipo de relatrio fcil de ser desenvolvido. Crie um novo relatrio e vamos customizar a consulta, usando um comando SQL ao invs de uma tabela do banco. Na tela de escolha das tabelas do banco, de um duplo clique no item Add Command. No editor que ser mostrado, adicione a consulta SQL da Listagem 1. Listagem 1. Customizando a consulta que retornar os dados select Employees.EmployeeID, Employees.FirstName, Employees.LastName, SUM([Order Details].UnitPrice * [Order Details].Quantity) as TotalVenda from Employees inner join Orders on Employees.EmployeeID = Orders.EmployeeID inner join [Order Details] on [Order Details].OrderID = Orders.OrderID group by Employees.EmployeeID, Employees.FirstName, Employees.LastName Essa consulta retorna o total de vendas de cada funcionrio. Crie o relatrio normalmente, com todos os campos da consulta. Aps criar o relatrio, vamos inserir um grupo para o campo TotalVenda, semelhante ao exemplo anterior, com a nica diferena que no editor de grupos, vamos escolher a opo in specified order (Figura 9).

Figura 9. Criando grupos personalizados Ser mostrada a aba Specified order onde vamos adicionar os perodos que queremos. Clique em New e vamos criar os critrios para os grupos. Digite At 100.000,00, escolha is less than e escreva 100.000,00. Clique em OK. Crie mais dois critrios, com as opes is between (valores entre 100.000,01 e 200.000,00) e is greater than para o valor 200.000,01. O responsvel pela correta criao dos grupos a opo do tipo do critrio: is less then (menos que), is between(entre dois valores) e is greater than (maior que). Clique em Finish. Salve o relatrio, altere a propriedade ReportSource do CrystalReportViewer para o relatrio recm criado. Rode a aplicao e veja o relatrio com agrupamento por valores, semelhante ao mostrado na Figura 10.

Figura 10. Relatrio com agrupamento por valores Frmulas Em algumas situaes, ao construir um relatrio, torna-se necessrio inserir informaes (clculos etc) que no constam na tabela ou comando SQL que preenche o relatrio. Nesses casos, podemos usar frmulas com vrios recursos, como a possibilidade de ser usado em agrupamentos do relatrio. Crie um novo relatrio, acessando os dados da tabela Products. No relatrio, clique com o boto direito em Formula Fields e escolha New. D o nome de Soma e clique em Use Editor. Veja na Figura 11 o editor de frmulas do Crystal Report.

Figura 11. Editor de frmulas do Crystal Report Veja que temos acesso aos campos da consulta, vrias funes e operadores prontos para serem usados. Podemos trabalhar com a linguagem Basic Syntax (semelhante ao Visual Basic) e Crystal Syntax (semelhante ao Pascal), onde podemos em um relatrio ter frmulas de diferentes linguagens (mas no na mesma frmula). Digite o seguinte cdigo, que far a soma do preo do produto com a quantidade em estoque: {Products.UnitPrice}*{Products.UnitsInStock}

Voc pode verificar a sintaxe da frmula, atravs do boto Check . Clique em Save and close para salvar as alteraes da frmula e fechar o editor. Arraste a frmula para a seo Details do relatrio, pois usaremos a frmula como um campo qualquer no relatrio. Rode a aplicao e veja o resultado na Figura 12.

Figura 12. Relatrio com frmulas, sendo executado Continua...

B.NET: Microsoft Reporting Services


08 Junho 2009 Tags: Microsoft Reports, VB.NET, Visual Studio 2005, Visual Studio 2008

Os Microsoft Reports so baseados na definio do relatrio, que na realidade um ficheiro XML, que descreve a informao e o layout do relatrio, com uma extenso diferente. Pode-se criar um relatrio no cliente Client-Side Report DefinitionLanguage (*.rldc) usando o Visual Studio, e construir excelentes relatrios para a aplicao.

O objectivo deste artigo mostrar os passos bsicos para a criao de um relatrio, definir a Data Source em modo runtime, trabalhar com Parameters, incluir imagens, usar o Expression Editor, e como alimentar um SubReport e um grfico. Finalmente ir tambm mostrar algumas personalizaes simples ao controlo ReportViewer.

Introduo
Para comear, foi criada uma tabela em SQL com alguma informao para este exemplo. uma lista de equipamento electrnico como PDA, computadores, etc. Da tabela criada necessrio criar um DataSet, com duas DataTables. Chamar a este DataSet dsReport.xsd.

A primeira DataTable, products, contm a lista de todos os produtos na tabela SQL. A segunda DataTable, groupTotal, uma vista agrupada (Group By) com os grupos e os somatrios das quantidades. que sero usados para o SubReport e para o grfico. Depois disto necessrio adicionar o relatrio aplicao. Seleccionar o relatrio e indicar um nome apropriado. Para o exemplo podem utilizar rptProducts.

Com o novo relatrio criado e aberto, existe uma nova opo na barra de ferramentasReport. Seleccionar o Page Header e Page footer para mostrar estas duas seces no relatrio. Depois disto vamos arrastar da Toolbox para a seco Body (corpo) do relatrio.

DataSource
Agora altura para definir a Data Source. No menu Report, seleccionar Data Source. Ir aparecer uma nova janela onde se pode escolher as Data Sources (DataSets) disponveis na nossa aplicao. Seleccionar a DataSet criada.

NOTA: O nome do Report Data Sources pode ser renomeado, e ser usado no cdigo mais tarde. Depois de definir a Data Source para o relatrio, as DataTables estaro disponveis noData Source Explorer (normalmente disponvel na janela da Soluction Explorer). Da tabela Produtos arrastar as colunas para o objecto Table que foi inserido na seco Body

O objecto Table funciona como uma folha de Excel. Pode-se unir clulas, alterar a cor de fundo, fontes, etc. Este exemplo utiliza um campo do tipo Moeda. Para mostrar como simples formatar as clulas, clicar com o boto direito do rato sobre o campo e seleccionar Propriedades. Na janela das propriedade ir Tab Format e definir a clula com o formato Currency.

Alterar o formato dos restantes campos, como negrito, ttulos, etc., para obter um aspecto profissional.

Imagens

Para incluir imagens na nossa aplicao, pode-se embeber e depois usar como um logtipo (por exemplo). Pode-se tambm ir buscar directamente as imagens base de dados, se estiverem armazenados como binrio (Binary). Para embeber as imagens no relatrio apenas necessrio ir ao menu Report e seleccionar Embedded Images. Na nova janela seleccionar o boto New Image e escolher a imagem pretendida.

Fechar a janela e depois, na Toolbox, adicionar um controlo Image ao relatrio. Nas propriedades do controlo, seleccionar a imagem adicionada da Combobox disponvel na propriedade Value.

Expression Editor
Uma das novidades do Visual Studio 2008 para o Microsoft Reporting Services Expression Editor o intellissense disponvel quando se precisa de criar alguma frmula ou expresso. Na seco Footer, pode-se adicionar duas TextBoxes. Numa delas, iremos colocar o nmero da pagina e o total de pginas. Para isso, j existem frmulas criadas na categoria Global.

Como se pode ver na imagem seguinte, pode-se usar frmulas de VB (a maioria delas) no Expression Editor. O intellissence ajuda bastante para prevenir erros e para lembrar o sintaxe das frmulas . Na segunda Textbox vamos colocar simplesmente a data de impresso.

Parmetros (Parameters)
Pode-se utilizar Parameters para diversas coisas. Neste exemplo ser apenas usado para passar informao da aplicao para o relatrio. No menu Report, seleccionar Report Parameters. Definir dois parmetros: ApplicationUser e ApplicationLevel do tipo String.

Depois, no relatrio, pode-se usar o Expression Editor para definir os parmetros (eles sero definidos no cdigo) para as TextBoxes. Eles estaro disponveis na categoriaParameters.

Grficos (Chart)
Pode-se usar vrios grficos no relatrio e eles so muito fceis de usar e alimentar com informao. Adicionar um controlo Chart da Toolbox para a seco Body do relatrio. Efectuar um duplo-clique no grfico e ir mostrar as reas Data Field e Category Field. Arrastar os campos Group e Totals da janela DataSource Explorer.

Pode-se tambm fazer isto nas propriedades do grfico. Nesta janela pode-se tambm personalizar as cores das sries, legendas, efeitos 3D, filtros, eixos, etc.

Usando o cdigo
Nos passos anteriores, foram usadas diversas Data Sources no relatrio. Agora, iram ser adicionadas novas Data Sources, filtradas ou no, e essa ser a informao que ser visvel no relatrio. Imports System.Data.SqlClient Imports Microsoft.Reporting.WinForms Public Class Form1 ' Connection string Private connString As String = _ "DataSource=.\SQLEXPRESS;AttachDbFilename='|DataDirectory|\myDatabase.mdf'_ ";Integrated Security=True;User Instance=True" ''' <summary> ''' Evento Form load ''' </summary> Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load Try

' Chama a personalizao Call customizeReportViewer(Me.ReportViewer1) ' Adiciona um novo boto Call AddReportViewerButton() With Me.ReportViewer1.LocalReport ' Caminho para o relatrio .ReportPath = Application.StartupPath & "\..\..\rptProducts.rdlc" .DataSources.Clear() ' Define os parameters Dim parameters(1) AsReportParameter parameters(0) = _ New ReportParameter("ApplicationUser", "jpaulino") parameters(1) = _ New ReportParameter("ApplicationLevel", "Administrator") .SetParameters(parameters) End With ' ---------------------------------------------------' Datasource para o relatrio principal (where price > 200) ' ---------------------------------------------------Dim SQL As String = "SELECT * FROM products WHERE price > @price" Using da As New SqlDataAdapter(SQL, connString) da.SelectCommand.Parameters.Add("@price", SqlDbType.Int).Value = 200 Using ds As New DataSet da.Fill(ds, "products") ' preciso usar o mesmo nome como foi de definido ' no Data Source Definition Dim rptDataSource As New ReportDataSource _ ("dsReport_products", ds.Tables("products"))

Me.ReportViewer1.LocalReport.DataSources.Add(rptDataSource) End Using End Using ' ---------------------------------------------------' Datasource para o grfico ' ---------------------------------------------------Dim SQL_Chart As String = "SELECT [group], SUM(quantity) AS " _ Total FROM products GROUP BY [group]" Using da As New SqlDataAdapter(SQL_Chart, connString) Using ds As New DataSet da.Fill(ds, "groupTotal") Dim rptDataSource As NewReportDataSource("dsReport_groupTotal", _ ds.Tables("groupTotal")) Me.ReportViewer1.LocalReport.DataSources.Add(rptDataSource) End Using End Using ' Refresh do relatrio ReportViewer1.RefreshReport() Catch ex As Exception MessageBox.Show(ex.Message, My.Application.Info.Title, _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub End Class

SubReports

Pode-se usar um ou vrios subreports no relatrio. Para fazer isso, necessrio preencher a Data Source para cada um deles. Uma vez que no se pode aceder directamente Data Source do relatrio, preciso definir um evento (handler) aoSubreportProcessing, e depois quando o relatrio est a ser carregado, recolhe-se a informao da base de dados e preenche-se a Data Source. Pode parecer difcil de fazer, mas na verdade bastante simples! Definir a Data Source para o subreport e usar um objecto Table, como no relatrio principal. Adicionar os campos ao objecto Table. No relatrio principal, adicionar um objecto SubReport da Toolbox e escolher o subreport criado. Depois, no evento Form Load onde est o relatrio principal, adicionar o evento para o SubreportProcessing. AddHandler ReportViewer1.LocalReport.SubreportProcessing, _ AddressOf SubreportProcessingEvent Finalmente, no evento SubreportProcessing, define-se a nova Data Source, da mesma maneira dos anteriores. ''' <summary> ''' Quando o subreport est a ser carregado/processado, preenche a DataSource ''' </summary> Sub SubreportProcessingEvent(ByVal sender As Object, _ ByVal e As SubreportProcessingEventArgs) Try Dim SQL As String = "SELECT [group], SUM(quantity) AS " _ Total FROM products GROUP BY [group]" Using da As New SqlDataAdapter(SQL, connString) Using ds As New DataSet da.Fill(ds, "groupTotal") Dim rptDataSource As New ReportDataSource _ ("dsReport_groupTotal", ds.Tables("groupTotal")) e.DataSources.Add(rptDataSource) End Using End Using Catch ex As Exception

MessageBox.Show(ex.Message, My.Application.Info.Title, _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub

Personalizao do ReportViewer
O ReportViewer o controlo que mostra os Microsoft Reports num Form ou numa Webpage. Pode-se personalizar a maioria dos controlos deste, para melhorar ou personalizar como pretendido. Neste artigo, ser mostrado duas personalizaes simples. Primeiro, pode-se alterar os ttulos dos controlos. Pode-se tambm fazer outras coisas, como desabilitar itens, renomear tooltips, etc. Isto especialmente interessante para alterar a linguagem do controlo, uma vez que est disponvel apenas em Ingls. Para isto, ser criado um mtodo recursivo que ir fazer um ciclo em todos os controlo do ReportViewer e fazer algumas alteraes. ''' <summary> ''' Ciclo em todos os controlos do ReportViewer ''' </summary> ''' <remarks></remarks> Sub customizeReportViewer(ByVal ctrl AsControl) For Each c As Control In ctrl.Controls ' ---------------------------------------------------' Verifica o texto das labels disponveis ' ---------------------------------------------------If TypeOf c Is Label Then Dim lbl As Label = DirectCast(c, Label) Select Case lbl.Name Case "LblGeneratingReport" lbl.Text = "My report is loading now ... " Case Else ' Podem ser adicionadas mais personalizaes End Select End If

' ---------------------------------------------------' Altera os textos da ToolStrip para Portugus ' ---------------------------------------------------If TypeOf c Is ToolStrip Then Dim ts AsToolStrip = DirectCast(c, ToolStrip) For Each item AsToolStripItem In ts.Items Select Case item.Text Case "Find" item.Text = "Pesquisar" Case "Next" item.Text = "Prximo" Case "of" item.Text = "de" Case Else ' Podem ser adicionadas mais personalizaes End Select Next End If ' Se o controlo tiver child controls If c.HasChildren Then customizeReportViewer(c) End If Next End Sub Finalmente apenas necessrio chamar o mtodo criado no evento Form Load, onde se encontra o ReportViewer. ' Chama o mtodo criado Call customizeReportViewer(Me.ReportViewer1) A segunda personalizao mostra como incluir um novo boto na Toolstrip. Ir encontrar a ToolStrip principal do relatrio e adicionar um boto alinhado direita. ''' <summary> ''' Encontra a ToolStrip principal e adiciona um novo boto alinhado direita

''' </summary> Sub AddReportViewerButton() Dim ts() As Control = Me.ReportViewer1.Controls.Find("toolStrip1", True) If ts IsNot Nothing Then Dim tsItem As ToolStrip = DirectCast(ts(0), ToolStrip) Dim item As New ToolStripButton item.Name = "newButton" item.Text = "New Button" item.BackColor = Color.Green item.ForeColor = Color.White item.Alignment = ToolStripItemAlignment.Right tsItem.Items.Add(item) AddHandler item.Click, AddressOf newButtonClick End If End Sub Quando o boto for pressionado: ''' <summary> ''' Mostra uma mensagem quando o boto no ReportViewer for pressionado ''' </summary> Sub newButtonClick() MessageBox.Show("This is my new button!") End Sub Este artigo mostra os primeiros passo, e os mais importantes, para usar os Microsoft Reports, e como utilizar o cdigo. Espero que isto ajude a utiliza-los e mostrar como simples trabalhar com eles.

Criando grficos com Microsoft Chart Control em ASP.NET


Crie um grfico na sua pgina ASP.Net com o Microsoft Chart Control simples e prtico. Neste artigo criei um grfico de pizza com o componente gratuito lanado em Outubro/08.
4

Gostei (1)
(0)

Introduo
Diante de vrias novidades a Microsoft lanou em outubro o Microsoft Chart Controls for .NET Framework, no qual um conjunto de controles que ajudam os desenvolvedores a representar dados atravs de grficos 2d e 3d.

Podendo utilizar estes controles (Chart controls) em pginas ASP.NET ou aplicaes Windows (Windows Forms) de maneira muito simples para representar dados complexos. Estes controles so gratuitos e foram desenvolvidos para serem usados com o Microsoft Visual Studio 2008 e para uma melhor integrao com o toolbox e IntelliSence foi disponibilizado o Microsoft Chart Controls Add-on for Microsoft Visual Studio 2008.

Exemplo
Para comearmos o nosso exemplo de grfico, baixe e instale o Microsoft Chart Controls for .NET Framework e em seguida o Microsoft Chart Controls Add-on for Microsoft Visual Studio 2008.

Passo 1
Aps a instalao do componente vamos abrir o visual studio e criar o nosso projeto web chamado TesteGrafico. Para isso abra o Visual Studio 2008 no menu File, New, Web Site. Escolha o template ASP.Net Web Site e digite o caminho no campo location. Como mostra na Figura 1 o caminho ficou C:\PROJETOS\TESTEGRAFICO.

Figura 1 Criando o projeto WEB

Passo 2
Para trabalharmos os dados no grfico vamos criar um banco bem simples seguindo o DER da figura 2.

Figura 2 DER do bando de dados testeChart O banco possui duas tabelas, uma de categorias e outra de produtos, a tabela de produtos possui um relacionamento para categorias. Cada produto possui uma categoria. Para facilitar deixei o banco disponvel para download no endereohttp://afc70g.bay.livefilestore.com/y1pX5DPyp0dnG3wJtsbzjq4eBrLrs_FG5CLj_sejuFR9xXqQZTsdNEB_R1I wqKF7hejXL5tKfgNjjF9_dlNL4f-dA/testeChart.zip?download. Descompacte este arquivo na pasta App_Data que fica dento do seu projeto, e aps esse processo volte ao Visual Studio 2008 e clique na pasta App_Data no seu solucion explorer e clique em Atualizar como mostra a figura 3.

Figura 3 Solution explorer com o banco criado O banco j possui cadastradas algumas categorias e produtos. Tambm possui uma Stored Procedure chamada TotalCategorias, mostrada no quadro 1, que retona a lista de categorias com nome e seu percentual dos produtos cadastrados, para saber quais categorias mais possuem produtos.

CREATE PROCEDURE dbo.TotalCategorias AS declare @total as int set @total=(SELECT COUNT(id_categoria) AS total FROM produtos)

SELECT p.id_categoria,c.nm_categoria, COUNT(p.id_categoria)*100/@total as percentual FROM produtos p(nolock) inner join categorias c(nolock) on p.id_categoria=c.id_categoria GROUP BY p.id_categoria,c.nm_categoria

Quadro 1 Stored Procedure TotalCategorias

Passo 3
Aps o bando de dados pronto vamos utilizar o LINQ para comunicao com a aplicao. Clique com o boto direito no projeto, no menu Add New Item, escolha o template Linq to Class e o nome do arquivo como loja.dbml como mostra na figura 4.

Figura 4 Adicionando o arquivo do Linq para comunicao com o banco de dados

Abra o Server Explorer do Visual Studio e aparecer o nosso banco. Para configurar o nosso arquivo basta arrastar as tabelas de Categorias e Produtos para a parte esquerda do arquivo loja.dbml e a Stored Procedure TotalCategorias para a parte direita. O resultado final deve ficar como a figura 5.

Figura 5 Arquivo loja.DBML configurado

Passo 4
Vamos ao que interessa, incluir o grfico na nossa pgina Default.aspx. O componente de grfico aparece na aba Data como mostra a figura 6.

Figura 6 Toolbox com o componente Microsoft Chart Control D dois clique no componente que ele ser adicionado a sua pgina. Mude o nome do componente de Chart1 para Grafico1 e a propriedade WIDTH de 300px para 400px. Vamos adicionar o cdigo do quadro 2 no Page_Load do arquivo Default.aspx.cs para popular os dados da Stored Procedure TotalCategorias no grfico.

if (!IsPostBack)

lojaDataContext ldc = new lojaDataContext(); Grafico1.DataSource = ldc.TotalCategorias(); Grafico1.DataBind();

Quadro 2 Cdigo para popular os dados da Stored Procedure TotalCategorias no grfico

Passo 5
Com o grfico j populando os dados hora de configurar a apresentao dos dados. Vamos mostrar um grfico de pizza pois a Stored Procedure retorna o percentual de produtos cadastrados nas categorias. Nas propriedades do Grafico1 clique em Series. No quadro que aparecer preencha o XValueMember com o campo NM_CATEGORIA e o YValueMember com o campo PERCENTUAL como mostra a figura 7. No mesmo quadro mude o ChartType para PIE (grfico de pizza). Por ultimo a propriedade IsValueShownAsLabel para TRUE, isso faz com que o valor percentual aparea em cada fatia da pizza. Clique em OK para fechar a janela Series.

Figura 7 Associao dos campos no quadro Series Voltando nas propriedades do Grafico1 clique em Legends. Clique em Add para adicionar a legenda de grfico e clique em OK para fechar a janela Legends. Por ultimo vamos criar um ttulo, nas propriedades do Grafico1 clique em Titles. Clique em Add e preencha a propriedade (Text) com o texto Diviso das categorias dos produtos.

Resultado
Pronto! Simples, prtico e rpido ao estilo .Net de ser e como diz Ramon Dures No tem que ser difcil. O resultado pode ser conferido na figura 8.

Figura 8 Grfico de pizza das categorias Esse componente serve para colocarmos grficos no meio da pgina web ou mesmo dos forms em aplicativos windows. Este post foi s uma amostra do que a ferramenta pode fazer.

Leia mais em: Criando grficos com Microsoft Chart Control em ASP.NET http://www.devmedia.com.br/criando-graficos-com-microsoft-chart-control-em-asp-net/11325#ixzz2cQlklzRB

SP .NET - Apresentando o controle Chart

J faz algum tempo que a Microsoft Liberou o .NET Chart Control , oriundo do Dundas Charts, como um addon gratuito para a plataforma .NET verso 3.5, oferecendo dessa forma um recurso com possibilidades muitos interessantes para a gerao de grficos tanto com ASP .NET como com aplicaes Windows Forms, uma rea muito carente na plataforma .NET. A primeira coisa que voc tem que fazer para ter disponvel este recurso efetuar os seguintes downloads:

Microsoft Chart Controls for Microsoft .NET Framework 3.5 Microsoft Chart Controls Add-on for Microsoft Visual Studio 2008

Neste link voc encontra exemplos e documentao sobre o componente: http://code.msdn.microsoft.com/mschart

Aps voc instalar os componentes voc poder abrir o Visual Studio 2008 ou o Visual Web Developer 2008 Express e verificar na guia Data o cone do controle Chart conforme figura ao lado:

O controle Chart define todos os parmetros e mtodos necessrios para criar e exibir grficos em aplicaes ASP .NET e Windows Forms. Cada grfico pode ter um ou mais ttulos que aparecem no topo do grfico, alm de legendas referentes a vrios grupos de informao.

Cada grfico criado com o controle Chart possui uma rea de grfico (Chart area) que define a regio onde o grfico ser criado. Esta rea possui diversos parmetros de configurao relacionados aos eixos X e Y, grficos 3D, etc. O objeto ChartArea o componente chave que compe o controle Chart. O controle Chart permite criar diversos tipos de grficos sendo muito fcil de ser utilizado a partir da ToolBox. Voc pode obter informaes detalhadas deste componente consultando a sua documentao em: Download details: Microsoft Chart Controls for .NET Framework. Para iniciar eu vou mostrar como criar um grfico simples em um web site ASP .NET usando este componente e a ferramenta Visual Web Developer 2008 Express Edition. Abra o VIsual Web Developer 2008 e crie um novo web site usado o template ASP.NET Web Site, usando a linguagem VB .NET com o nome GraficoWeb; Na janela Solution Explorer selecione a pgina Default.aspx criada por padro e altere o modo de exibio para Design; A seguir , a partir da ToolBox, na guia Data, selecione, arraste e solte o componente Chart na pgina Default.aspx conforme abaixo:

Note que o tipo de grfico padro e um grfico de colunas, ou seja , a propriedade CharType definida como Column. Para definir outro tipo de grfico em tempo de projeto selecione o controle e na janela de propriedades procure por Series e clique no boto a esquerda; Na janela Series Collection Editor selecione a propriedade ChartType e verifica as 25 opes de tipos de grficos disponveis:

Apenas por curiosidade vamos dar uma espiada no cdigo gerado selecione a guia Source da pgina:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <%@ Register assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" namespace="System.Web.UI.DataVisualization.Charting" tagprefix="asp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">

<title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div style="width: 347px"> <asp:Chart ID="Chart1" runat="server"> <series> <asp:Series Name="Series1"> </asp:Series> </series> <chartareas> <asp:ChartArea Name="ChartArea1"> </asp:ChartArea> </chartareas> </asp:Chart> </div> </form> </body> </html>

Neste primeiro exemplo eu vou usar alguns dados de uma fonte de dados, fazer a vinculao com o controle Chart e exibir o resultado em uma pgina ASP .NET. Selecione o controle na pgina e na smart tag Chart Tasks selecione <New data source...>;

Na janela Data Source Configuration Wizard selecione a opo DataBase e clique no boto Ok;

Selecione uma conexo com o banco de dados Northwind.mdf. Se voc no possuir esta conexo clique no boto New Connection e crie a conexo; No meu exemplo a conexo j foi criada no SQL Server Management Studio e pode ser selecionada conforme abaixo:

Clique em Next>; Na janela a seguir aceite o nome padro para a conexo e clique em Next>;

Na janela Configure Data Source,marque a opo : Specify a custom SQL statement or stored procedures e clique em Next>;

Na prxima janela digite a instruo SQL abaixo que ir gerar a nossa fonte de dados. Ele listar a quantidade de produtos por categoria;

Clique em Next> e a seguir em Finish; Selecione o controle Chart e na janela de propriedades clique na propriedade ChartAreas; Ser aberta a janela ChartArea Collection Editor;

Na propriedade Axes clique no boto para abrir a janela Axis Collection Editor e em OK para fechar a janela ChartArea Collection;

Define a propriedade 'Title' do eixo X como Categorias e o ttulo do eixo Y como Produtos e clique em OK; Com o controle Chart selecionado procure a propriedade Series e abra a janela Series Collection Editor; Na seo Data Source atribua o valor CategoryName a propriedade XValueMember e ProductCount a propriedade YValueMembers; Defina tambm a propriedade IsValueShownAsLabel como True para exibir a quantidade de produtos nas colunas do grfico e clique em OK;

Antes de executar o projeto voc pode incrementar o visual do grficos selecionando na janela de propriedades BackColor, BackGradientStyle e BorderSkin conforme abaixo:

Acrescente tambm um ttulo ao grfico usando a propriedade Titles do grfico e definindo o titulo na propriedade Text da janela Title Collection Editor;

Executando o projeto iremos obter o grfico abaixo exibindo a quantidade de produtos por categoria:

Obs: Se ao executar o projeto voc obter o erro conforme a figura abaixo:

Abra o arquivo Web.config e altere a linha conforme indicado baixo incluindo a palavra POST.
.... <add path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false" /> .......

Sentiu como fcil definir um grfico usando o assistente de configurao para o controle Chart. claro que o controle possui mais recursos e que em outros artigos eu irei mostrar outras possibilidades. Pegue o projeto completo aqui: demoGrafico.zip

Criando o seu jogo Entenda o XNA Game Studio


August 7, 2010 by admin
Ol Pequeno Gafanhoto ! Bem, hoje eu vou deixar a nostalgia de lado e falar de praticidade. Que tal aprendermos como criar um jogo? Nesse post abordarei sobre o XNA Studio. Um programa de criao de jogos, feito pela Microsoft e distruibudo livremente para download. Sozinho o XNA no faz praticamente nada, por isso voc precisa instalar tambm o Visual C# Express Edition. Tsc tsc explica direito isso ai, DWing ! Visual C# Express Edition a verso gratuita do Visual Studio para que se programe na linguagem C#, um dos smbolos da nova gerao de programao. O XNA funciona em conjunto com essa linguagem, facilitando assim, o desenvolvimento de jogos, j que voc no precisa se preocupar com como os grficos ou outros quesitos ir agir no computador do seu usurio basicamente seria isso. Ento, ai vai os links para que voc faa os downloads necessrios e no fique perdido procurando no site da Microsoft: XNA Studio 3.0 C# Express Edition 2008 (.NET verso 3.5) Esse o instalador Online. Se no conseguir fazer o download do C# 2008, tente o 2010 (creio que no haver problema). C# Express Edition 2010 - H uma verso do instalador offline no site da Microsoft, porm alm do Visual C#, voc ir baixar junto o Visual C++, Visual Basic e Web Developer (no formato ISO). Ento, voc fez o download dos programas necessrios, agora colocar mo na massa. INTRODUO

Instale o Visual C# 2008 ou 2010 primeiramente, depois instale o XNA Game Studio. No h dificuldade, s ir clicando em NEXT (prximo). Dependendo do Instlador, ir demorar um pouquinho. Eu vou usar o Visual C# 2008 Express Edition, ainda no tenho o 2010 instalado no meu PC, mas acho que no vai ser to diferente assim. Abra o Visual C#, d um Ctrl+Shift+N (ou v em FILE > NEW PROJECT). Clique em XNA GAME STUDIO 3.0, em Templates clique em WINDOWS GAME (h outras opes como criar um jogo para XBOX, ZUNE, entre outros). Em NAME, digite MeuPrimeiroJogo, clique em OK.

Se tiver dificuldade de visualizar a imagem, d um clique encima dela para ver no tamanho normal. A primeira coisa que acontece que voc toma um susto. Quem est acostamado a usar engines grficas (como o MUGEN, Fighter Maker 2D, Multimedia Fusion, entre outras) perceber que o XNA s linhas de comandos, e quem nunca tentou criar um jogo vai se desesperar. Mas no se preocupe, nesse tutorial irei tentar explicar os cdigos principais, para que voc no fique perdido logo de cara. A primeira coisa que voc ler so vrias instrues using: using System; using System.Collections.Generic; [...]

Pule essa parte, vamos ver o resto. namespace MeuPrimeiroJogo { /// <summary> /// This is the main type for your game /// </summary> public class Game1 : Microsoft.Xna.Framework.Game

Joguinhos 2D no consigo ficar longer da nostalgia. Todos os cdigos esto dentro do namespace MeuPrimeiroJogo e dentro da Classe Game1. Voc no precisa saber agora a definio de namespace, porm a Classe, de um modo bem bsico, seria um conjunto de vrias informaes reunidas em um s lugar. Ficou meio confuso, sem problemas, vamos prosseguir que voc entender. Dentro dessa classe h vrios metdos: protected override void Initialize() protected override void LoadContent() protected override void UnloadContent()

protected override void Update(GameTime gameTime) protected override void Draw(GameTime gameTime) Mtodos contm vrias informaes para que sejam chamadas durante o jogo. Um exemplo bem prtico e didtico: protected void PostarNoProgramadoresdeJogos() } Contm Postadores; Clicar em Login; Colocar usurio e senha; Se tudo tiver certo, vai para a administrao; Se no, tenta novamente; } Est vendo, dentro de um metdo pode conter vrias informaes, assim no precisamos repetir algo toda hora, em vez disso utilizamos o mtodo que j contenha essa informao. Cada mtodo no XNA tem sua funo (bvio n) vou falar cada um.

J pensou voc criando jogos 3D assim?! Initialize() fica toda as operaes de inicializao do jogo e que no precisa de grficos rodando. Por exemplo, ler um registro no PC. LoadContent() nessa parte fica os grficos que sero carregados (2D ou 3D) durante o jogo. UnloadContent() esse metdo serve para descarregar os objetos, nem muito utilizado j que o XNA faz isso automaticamente. Update(GameTime gameTime) ela fica em execuo durante o jogo, assim voc pode controlar a lgica, verificar o estado dos objetos, do teclado, de como o jogo est se comportando, etc e tal. Draw(GameTime gameTime) e por fim o mtodo Draw. Ele tambm fica em execuo durante o jogo, semelhante ao mtodo Upadate, porm ele serve para controlar os grficos no jogo.

Dentro de cada mtodo desse voc ver que h outras informaes (como descrito acima) e que eu no coloquei aqui na verdade se colocasse, o post ia ficar enorme XD mas no se preocupe, se voc gostou agente pode tentar criar algo no XNA para ver como realmente ele se comporta.

Ainda sou iniciante do XNA, tentei colocar de forma bem didtica, ento se eu falei alguma bestagem aqui, relevem kkk mas isso a, sempre progredindo. Um abrao.

Chart Control in Visual Studio 2010 (Web and Windows Explained)


Posted by Karthikeyan Anbarasan in Tutorials | Visual Studio 2010 on July 24, 2011 Tags: C#, chart control, Chart Control in Visual Studio 2010, chart control web, chart control windows,vb.net, Visual Studio 2008, Visual Studio 2010

This article explains the use of the chart control from the basics of how to install the required software for making the development environment, to a very good example of both web and Windows applications.

inShare

27471 6

Reader Level:

Introduction In this article we are going to see how to use the new charting control with Visual Studio 2010. Chart controls are introduced with Visual Studio 2008 as a patch in Service Pack 1. Chart controls provide a rich user interface for showing the numbers in a very graphical format that most end users are eager to see. Prior to chart controls, developers needed to use third party tools, some open source libraries or use HTML and GDI+ to draw some graphical image as a chart for the end users which requires more user code and time consuming. Microsoft as introduced this control with a strong awareness of the present scenario of showing the data in an image rather than a grid view or some data viewer controls. The Chart control was introduced in late September 2009 as a separate service pack 1 with Visual Studio 2008. In Visual Studio 2010, Microsoft provided the control in-built which makes it much easier for developers to use the control. This control can be used in both Windows and web applications to show the rich user data in a good graphical format. The Chart control offers a wide variety of choices to choose the best format required by the end users to view the data. Some of the types of charts available with the control are as follows: PIE Chart, LINE Chart, BAR Chart, BUBBLE Chart, PYRAMID Chart etc. Microsoft has provided around 35 distinct chart types in the latest version of Visual Studio. Also the control provides most of the features required to make the chart more attractive, like providing lines, labels, trend lines etc. The control's API provides an option to make the sorting filter, grouping, searching, merging, splitting and exporting to the required format making

the control more robust for the developers to use it for most requirements. In this article we will see about using the Chart control in both Visual Studio 2008 and Visual Studio 2010 versions starting from the beginner to the experts. Also we will see some good examples of using this control in a Web application and a Windows application to see how flexible the control is used. Microsoft has not provided any Wizard to customize the data chart by giving the data source, customizing the size, look and color of the data, all these things need to be handled by the developer to bind and use the required data format as such. Since Microsoft provides this chart as a free control along with the Visual Studio, developers have no need to think much about the third parties or the open source tools for charting with the application which gives an advantage to go over this control and use it wherever required. Here we will see how to download, install and use this control in both Visual Studio 2008 and Visual Studio 2010 versions. Since Visual Studio 2008 requires a separate download, we will see the steps of where to download and install the application so that the control will be available in the tool box of the VS 2008 version. Downloading & Installing for Visual Studio 2008: The Microsoft Chart control was released as a standalone application with the Visual Studio 2008 Service Pack 1. In order to use this control in VS 2008 version we need to download the control and the libraries from the Microsoft URL (See following for the list of downloads with URL). Microsoft Chart Control (Check the following for the download and installation instructions.) Microsoft Visual Studio 2008 Chart Controls Add on The Microsoft Visual Studio 2008 Chart Controls Add-on helps to add the control to the toolbox and gives the intellisense support for the chart application. Microsoft Chart Control Samples - http://archive.msdn.microsoft.com/mschart

The Microsoft Chart control samples are a number of samples on both Windows and web applications that provide a very good start for the beginners to start and use the control.

TheMicrosoft Chart control is the mandatory download remaining 2 things are for our reference purpose which helps to build a very good chart application. Once you downloaded these software from the links provided we need to install and set up the development environment in order to start developing a charting application. We will see in detail how to install and configure the above 3 downloads one by one. Microsoft Chart Control - Installation: Click on the link above to open the window as shown in the following screen. Click on download (Mschart.exe) and save it to your local machine.

Now double-click on the Mschart.exe file to install the application. When we install this exe the binaries will be placed in the Global Assembly Cache (GAC) and

also will be placed in the ProgramFiles\Microsoft Chart Controls\Assemblies. Since the files are placed in the GAC we can use it globally without placing the DLLs in each and every BIN folder. When we publish the project in the server there will be no need to install the exe; instead we can use the binaries moved to the publish bin folder. Once you double-click the Mschart.exe it will open the window as shown below. It shows that we need the prerequisite of .Net Framework 3.5 with SP1. Click Next to proceed further.

Click on the license agreement to proceed further as shown in screen below.

The installation process will start and components will be installed one by one and we will see the progress as shown in the screen below.

Once the installation is completed we will see the final message as shown below which indicates that the software has been installed successfully.

We can find the Chart control in the toolbox as shown in the screen below.

Now we are ready with the development environment where we have the chart control installed and tested completely. These are the above steps we need to follow for setting up a development environment for using the Chart Control with Visual Studio 2008 version. As I said earlier since Visual Studio 2010 version includes this control we have no need to follow the above steps for the Visual Studio 2010 version. Now we will see some samples of using the different charts available.

.Net Framework 4.0 developers can omit the steps which we are done for the downloading and installation process since the control is also included in the latest framework. Now let us jump start to see the example of using this chart control. We have downloaded some samples from the MSDN archive (3 download). Let us see the samples by opening the project and running it. We need to navigate to where we downloaded the samples and open the solution as shown in the screen below:
rd

It will open the solution with pre-loaded samples as shown in the screen below:

Now we will build the solution and execute the project to see the result. To do this press F5; you will see the output in IE as shown in the screen below. When its building the project we will see the various chart types build as shown in the screen below.

The left side menu contains the different types of charts and for binding data and some common features required to be used for developing the application as shown in the following screen:

Each chart type is given with a tree view menu which has different types inside it like with normal chart view, 3D chart view and some other properties which developer needs to take care as per their requirements. Upon selecting each chart the sample will be opened in the right side portion with the code as well for C# and VB.Net as shown in the following screen:

With this help of data and the code, developers can develop a chart with ease. Now we will create an application and develop our own chart applications for a windows and a web application. Chart Control in Web Application: In this section we are going to see how to use the chart control in a web application. We are going to create a new application in C# and name it WebDashboard as shown in the following screen:

Now once the project solution is opened you can drag and drop the chart control as shown in the screen below:

If we want to change the chart type as per our interest we need to select the tab which appears at the top right corner of the control as shown in the screen below:

In our example I have selected the Doughnut type as shown in the following screen:

Here we have an option to select the data source as well; say if we want to use an XML as a source for the chart we can directly provide the XML path which takes data and show the result in the chart view. In our example we will fetch the data from the database and show the result in a chart. For getting the data from the database using a Wizard we can configure the data source as shown in the screen below.

Just follow the following steps to configure the data source.

Here the pop-up shows the list of data source providers available, since in our example we are going to get the data from the SQL Server we are going to select SQL from the list available as shown in the screen below:

Now click on ok to do the configuration of the server and the database from where we need to pull the data for the chart. It will open a window for taking the connection as shown in the screen below:

Here I have connected to a Northwind database in my local server to fetch the data for the chart. To make a new connection use the New Connection button

at the right side and fetch the connection. Once the connection is selected click on NEXT to go to the next window where we need to select the table from which we need to pull the data as shown in the screen below:

Here we can select as per the requirement on the different table or a combination of tables with joins as per the requirement. Here I have selected a product

table which has some basic product details as shown in the screen below:

Now after having selected the data required from the window, click on the NEXT button to move to the next screen where we can run the query and test the result set which we are going to show with the pictorial representation using the Chart control as shown in the screen below:

Now after having configured everything we need to click on the FINISH button to complete the configuration and we will see some configuration popups in

the base version as shown in the screen below:

The X value member and the Y value member are the places where we need to provide the x axis and y axis like data upon which the chart will be created. Here in our sample we are going to select Product name and Product Id as shown in the screen below:

Now we are half done with the configuration, to see some sample results we will execute the project. To execute the solution press F5 to see the screen with the chart in it as shown in the screen below:

This is our expected output out of the chart control we tried to create. Now we will do some enhancements on making the chart as 3D and some good look and feel to make the end users very attractive. To do some enhancements just select the chart and go to properties and go to the Chart Areas as shown in the following screen:

Select the tool box to open the configuration window for the chart as shown below:

This is the window where we need to make the configuration enhancements for making the chart look better to the end users. We will see the major properties used in order to make the chart look presentable. First enable a 3D view as shown in the following screen:

Now we need to select the Inclination on how much the 3D view should be shown to the user; the best option to show the chart in 3D view to the user will be something around 30 to 60. Here we will select 50 and we will see the inclination in the background chart as shown in the screen below:

Next section is the Rotation; we need to set the rotation something between 30 to 70 to show the majority of our output in the chart as per our requirements. Here in our example we have set it to 50 and we will see the change in the chart as shown in the screen below:

The Next property is the Background Color; we can change the background color of the chart as per the requirement using the property as shown in the screen below:

Upon completion of these configurations, click the OK button to complete the first section of the configuration and we will immediately see the changes onto the chart as shown in the screen below:

Now we will move on to some other properties to enhance the look of the chart. Now again go to the properties of the chart control and go to the Legends section as shown in the following screen:

Clicking on the toolbox will open the window as shown in the screen below. Here we need to configure the Legends to be shown on the chart.

Now click on the ADD button at the left bottom to automatically add the legend to the chart and show the results immediately as shown in the screen below. We have many options to configure as per our requirements as shown in the screen below.

Now clicking on OK will load the properties to the chart control. Now we will move on to the next property PALETTE which has many template palettes built-in to select the most suitable one as per our website recommendations. This property is something like themes to be applied to the chart as shown in the screen below.

Now we are done with the majority of the enhancements required to provide a rich user experience with the help of pictorial representation of data using our Microsoft Chart control. Now to build and execute the project press F5 and we will see the screen loaded and shown as below:

Now we are done with the charting control for a web application. With the above tutorial we can create a chart of our required pattern and create a good rich user attractive chart with the help of the Microsoft Chart Control. Chart Control in Windows Application: In this section we are going to see how to use the chart control in a Windows application. We are going to create a new application in C# and name it as WinDashboard as shown in the following screen:

Drag and drop the chart control to the form as shown in the screen below:

Now like in a web application we will not be shown the toolbox with the list of chart types and the data source in build read for customizing. We need to manually do the changes here as needed. We will see one by one as we did for the web application. Now to select the chart type we need to go to Series and the select the collections as shown in the screen below:

We will see a popup which has the list of chart types out of which we will select the Doughnut chart as shown in the screen below:

After we select the chart type click the OK button to change the chart image to Doughnut as shown in the following screen:

Now we need to select the data source, for that we need to navigate to Datasource in the properties menu and select to add a new datasource as shown in the screen below:

It will open the list of data source providers available as shown in the screen below. From here we will select the SQL database.

Now select the database option from the list using this provider we are going to connect to the SQL server database. After selecting the database and clicking on NEXT it will go to the next screen where we need to do the configuration as shown in the screen below:

Here based on the requirements we can select the model from which the data should be pulled. Since we have the direct connectivity with the database we

use the data set model to proceed further. Select Dataset then after clicking on Next it will move to the next screen as shown in the screen below:

Here we use the connection to the Northwind Database; else we can make use of the New connection to connect to any new servers locally or to the network to fetch the data. Once we are done with the connection string click on the NEXT button to have the configuration to select the data from the table as shown in the screen below:

Since we need to pull the data from the table, expand the table node and we will see the list of all the tables as shown in the screen below:

Here we need to select the source table; since in our example the ProductMaster table is the source we have selected that. Clicked the Finish button to complete the data source configuration section to proceed further.

Now if we build and execute the application we will see the empty screen with an empty chart as shown in the screen below:

The problem here is we have not set the X axis and Y axis members to make the chart. So to provide the X axis and Y axis we need to go to the SERIES property and select the collections to mark the X axis and Y axis members as shown in the screen below:

After having select these values, now click on the ok button to complete the configuration and now we are ready to build and execute the project. Press F5 to do so and you will see the end result in a much waited chart format in windows application as shown in the screen below:

Which is almost looks same like the web application result. So we are done with the Windows application chart. Conclusion:

S-ar putea să vă placă și