domingo, 29 de maio de 2011

Query em SQL Server retornar um documento XML

O Microsoft SQL Server dispõe de um vários recursos interessantes que facilitam a vida do desenvolvedor, um deles é permitir que o resultado de uma query seja formatada como um documento XML. O documento pode resultar em um elemento por registro (com as colunas exibidas como atributos) ou exibir as colunas como elementos. Iremos demonstrar as duas formas acima.

Abra o Microsoft SQL Server Management Studio (2005 ou 2008) e faça a autenticação no servidor SQL usando as credencias de acesso.


Selecione uma base de dados na guia Object Explorer e crie uma nova janela de consulta.


Como exemplo, vamos selecionar os registros da tabela Employees de forma tradicional.


Aproveitando a consulta acima, acrescente as palavras-chave FOR XML AUTO para que o resultado seja apresentado na forma de um documento XML.


Perceba na primeira imagem, que a consulta anterior retornava 9 linhas, enquanto que a segunda resultou somente uma. Isso ocorre porque o documento XML foi escrito na forma horizontal, ou seja, todas as linhas em somente uma. Clique sobre a linha resultante e veja o resultado em um editor XML interno do próprio Management.


As colunas da consulta foram retornadas em forma de atributos XML. Vamos acrescentar a palavra-chave ELEMENTS para que a estrutura do documento acrescente elementos, ao invés de atributos.



Esta dica é útil quando se utiliza o SGBD Microsoft SQL Server e documentos XML no escopo da aplicação.

Espero que tenham gostado, e até a próxima!

sábado, 28 de maio de 2011

Exportar MSFlexGrid para um arquivo CSV

Saudações, pessoal!

O arquivo com o formato CSV (campo separado por vírgula) é uma excelente alternativa para utilização de um arquivo de texto com conteúdo organizado. Com a separação das colunas usando a vírgula (ou outro caractere separador), é possível importar/exportar um arquivo CSV no Microsoft Excel ou qualquer outro editor de planilhas eletrônicas (Open Office, BR Office, Google Docs etc).

Este projeto permite que o conteúdo de uma grade MSFlexGrid possa ser exportado para um arquivo CSV, e em seguida aberto no Microsoft Excel para visualizar os dados organizados por colunas. O projeto foi escrito em linguagem Visual Basic 6.0 e necessita da base de dados Northwind (versão Microsoft Access) que pode ser baixado no link abaixo.http://sites.google.com/site/programacaoonline/download na seção Arquivos Diversos.

Grade carregada com os registros da tabela Products


Arquivo CSV aberto no NotePad do Windows


Arquivo CSV aberto no Excel da Microsoft


Baixe o projeto no link abaixo:
GridParaCSV_Tecla.rar

Até mais!

quinta-feira, 26 de maio de 2011

Visualizar planilha do Excel dentro do Form em VB6

Que tal, permitir que o usuário da sua aplicação em VB6, possa visualizar um arquivo do Excel dentro do formulário? A idéia é interessante e muito simples de se executar, nada que o controle WebBrowser do Visual Basic não consiga fazer. Para demonstrar, irei utilizar uma planilha criada e pré-formatada no próprio Excel.

Abra o Visual Basic e crie um novo projeto do tipo Standard EXE.


O VB cria um formulário (Form1) de forma automática, o qual iremos utilizar para demonstrar o exemplo proposto. Adicione a referência “Microsoft Internet Controls” ao projeto, para que o controle WebBrowser esteja disponível para utilização. Clique no menu Project > Components e marque a opção conforme abaixo.


Com o controle no projeto, aumente as dimensões do Form1 e arraste o controle WebBrowser da Toolbox para a janela.


 Já temos o formulário com o controle redimensionado, só nos resta escrever “uma única linha” de código para que a planilha seja exibida no WebBrowser. Dê um duplo-clique sobre uma área do Form1 e escreva o trecho de código abaixo no evento Load.

Private Sub Form_Load()
    WebBrowser1.Navigate "C:\Products.xls"
End Sub

Compile a aplicação e clique no botão “Abrir” da caixa de diálogo que aparecerá ao executar o projeto. Se tudo correr bem, o resultado obtido será conforme o da imagem abaixo.


É tudo muito simples, mas dá pra "atender a necessidade do usuário".
Até a próxima!

Exportando um DataGridView para Excel com VB.NET

O projeto à seguir exemplifica como extrair o conteúdo de um controle DataGridView para um arquivo Excel 2007 (*.xlsx). Para baixar o código fonte, acesse o link abaixo:
Download DGViewParaExcel.rar



Após a geração da planilha, o leiaute com a formatação simples é representada na imagem abaixo. 



Por enquanto é só, até mais!

quarta-feira, 25 de maio de 2011

Exportar banco de dados para XML

Em vários momentos, percebemos necessidade do usuário da aplicação, exportar as informações de um banco de dados para um arquivo externo. Um dos formatos que vem sendo muito utilizado em .NET, é o arquivo XML (Extensible Markup Language).

XML (Extensible Markup Language) é uma recomendação da W3C para gerar linguagens de marcação para necessidades especiais.
É um subtipo de SGML (acrônimo de Standard Generalized Markup Language, ou Linguagem Padronizada de Marcação Genérica) capaz de descrever diversos tipos de dados. Seu propósito principal é a facilidade de compartilhamento de informações através da Internet.
Entre linguagens baseadas em XML incluem-se XHTML (formato para páginas Web), RDF,SDMX ,SMILMathML (formato para expressões matemáticas), NCLXBRLXSIL e SVG (formato gráfico vetorial). A principal característica do XML, de criar uma infra-estrutura única para diversas linguagens, é que linguagens desconhecidas e de pouco uso também podem ser definidas sem maior trabalho e sem necessidade de ser submetidas aos comitês de padronização.
Fonte: http://pt.wikipedia.org/wiki/XML

Para demonstrar a exportação para XML, iremos utilizar uma base Access (MDB) e o Visual Studio 2010 Ultimate em linguagem C#. Para fazer download da base de dados, acesse o endereço abaixo:


Abra o VS e crie um novo projeto (File > New > Project) do tipo Windows Forms Application em linguagem C#.


Acesse a Toolbox, na guia Common Controls e adicione um controle Button no formulário Form1. Altere a propriedade Text para “Exportar MDB para XML”.



Dê um duplo-clique sobre o botão e escreva o trecho de código abaixo no evento Click.

using System.Data.OleDb;


private void button1_Click(object sender, EventArgs e)
{
    string conStr = "Provider=Microsoft.Jet.OleDb.4.0; Data     Source=C:\\Publico\\Northwind.mdb";
    string query = "Select FirstName, LastName, Address, City From Employees";
    using (OleDbDataAdapter da = new OleDbDataAdapter(query, conStr))
    {
        DataSet ds = new DataSet();
        da.Fill(ds, "Employees");
        ds.WriteXml("C:\\Publico\\Employees.xml");
    }
    MessageBox.Show("Exportação para XML concluída com êxito!");
}

A rotina acima, basicamente, se conecta na base Northwind.mdb que está alocada no caminho “C:\Publico” e faz uma consulta na tabela “Employees” (Funcionários). Em seguida, executou-se o comando no banco de dados e armazenou-se o resultado da consulta em um objeto DataSet. Através do método WriteXml, é que conseguimos converter o resultado para XML. Compile o projeto e teste a aplicação.



Segue a imagem do arquivo XML gerado após a execução do programa.



Fico por aqui e até a próxima!

segunda-feira, 23 de maio de 2011

Obter os nomes dos dias da semana

E aí, pessoal!

Esta é uma dica rápida e simples, que tem por objetivo listar os nomes dos dias da semana no idioma PT-BR (Português-Brasil). Para demonstrar este exemplo, utilizaremos o Visual Studio 2010 Ultimate em linguagem VB.NET.

Abra o Visual Studio e crie um novo projeto (File > New > Project) do tipo Windows Forms Application em linguagem VB.NET.



Adicione um controle TextBox no formulário Form1 e altere a propriedade MultiLine para True. Redimensione o controle para que ocupe a área central da janela.


Dê um duplo-clique sobre a área do Form para que o VS crie o evento Load da janela. Codifique o evento conforme a listagem abaixo.

Imports System.Globalization

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim domingo As New DateTime(2011, 5, 21)
        Dim idioma As New CultureInfo("pt-BR")
        For d As Integer = 1 To 7
            domingo = domingo.AddDays(1)
            TextBox1.Text += domingo.ToString("D", idioma).Split(",")(0).ToUpper() + Environment.NewLine
        Next
    End Sub

End Class

Compile a aplicação e veja o resultado que obtemos.


Até a próxima!

sábado, 21 de maio de 2011

Criando um banco Access em tempo de execução

Grande parte das aplicações em geral, no ato da instalação, a base de dados do sistema é extraída com os demais arquivos dependentes (DLL, INI, OCX, XML etc). Por vezes, tive que criar uma rotina que criasse a base de dados em tempo de execução, na primeira utilização do programa. Pensando nisso, que tal criarmos uma base de dados Microsoft Access (com uma tabela e com alguns registros inseridos) em tempo de execução? 

Para demonstrar, iremos utilizar o Visual Studio 2010 Ultimate e linguagem VB.NET.

Abra o Visual Studio e crie um novo projeto (File > New > Project) do tipo Windows Forms Application em linguagem VB.NET.


Adicione 3 controles do tipo Button no formulário Form1, com as legendas alteradas de acordo com a tabela abaixo.

Controle
Propriedade Text
Button1
Criar banco MDB
Button2
Criar tabela ‘Contato’
Button3
Inserir registros

A interface do Form1 deve ser semelhante ao da imagem .


Vamos adicionar a referência Microsoft ADO Ext. for DLL and Security ao projeto, que é o recurso que vai agregar a funcionalidade de criação da base MDB. Clique no menu Project > Add Reference e clique no botão OK.


Primeiramente, vamos escrever a rotina que irá criar a base de dados MDB em um diretório do computador. Dê um duplo-clique no botão “Criar banco MDB” e escreva a listagem abaixo no evento Click.

Public Class Form1

    Private Const CONNECTION_STRING = "Provider=Microsoft.Jet.Oledb.4.0;" & _
                                      "Data Source=C:\POnLine.mdb"

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim catalogo As New ADOX.Catalog
        catalogo.Create(CONNECTION_STRING)
        MessageBox.Show("Banco ""POnLine.mdb"" criado com sucesso!")
    End Sub
End Class

Perceba que criamos uma constante fora do contexto do evento Click, para que fique visível para todo o formulário. Seguindo, dê um duplo-clique no botão “Criar tabela ‘Contato’” e escreva a rotina abaixo.

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim conn As New OleDb.OleDbConnection(CONNECTION_STRING)
        Dim cmd As New OleDb.OleDbCommand("CREATE TABLE Contato (ID int not null, Nome varchar(50))", conn)
        conn.Open()
        cmd.ExecuteNonQuery()
        MessageBox.Show("Tabela 'Contato' criada com sucesso!")
    End Sub

A rotina acima cria a tabela Contato no banco de dados criado. Por fim, proceda da mesma forma para o terceiro botão, a fim de inserirmos alguns registros de exemplo.

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    Dim conn As New OleDb.OleDbConnection(CONNECTION_STRING)
    Dim cmd As New OleDb.OleDbCommand()

    cmd.Connection = conn
    cmd.CommandType = CommandType.Text
    conn.Open()

    cmd.CommandText = "INSERT INTO Contato VALUES (1, 'Contato 1')"
    cmd.ExecuteNonQuery()

    cmd.CommandText = "INSERT INTO Contato VALUES (2, 'Contato 2')"
    cmd.ExecuteNonQuery()

    cmd.CommandText = "INSERT INTO Contato VALUES (3, 'Contato 3')"
    cmd.ExecuteNonQuery()
    MessageBox.Show("Registros inseridos com sucesso!")
End Sub

Nosso exemplo está pronto, execute a aplicação e teste seguindo a sequência dos botões, ou seja, crie o banco, em seguida a tabela e por fim insira os registros. Após a execução do programa, o resultado que obtive foi este:



Fico por aqui, e até a próxima!

quinta-feira, 19 de maio de 2011

Usando o objeto AccessDataSource em ASP.NET

A maioria dos controles do Visual Studio .NET tem por característica principal facilitar, a produtividade. Ou seja, com pouca ou nenhuma linha de código, se consegue obter um resultado profissional e que as vezes vai além da necessidade atual. Um exemplo disso, são os controles de acesso à dados de forma vinculada. 

Nosso objetivo aqui, é permitir que se utilize o controle AccessDataSource para acessar uma base .MDB e exibir os dados em uma grade. O pequeno detalhe é que não iremos escrever nenhuma linha de código para obter o resultado proposto.

Abra o Visual Studio e crie um novo projeto do tipo ASP.NET Web Site (File > New > Web Site) em linguagem VB.NET. Iremos utilizar o VS 2010 para demonstrar no artigo.



Com o projeto criado, iremos utilizar a página Default.aspx para alocar os objetos da Toolbox. Adicione o controle AccessDataSource e um GridView na página.



Para darmos continuidade, precisamos adicionar uma base Access no projeto. Vou utilizar a base Northwind.mdb. Clique com o botão direito do mouse sobre a pasta App_Data (na guia Solution Explorer do VS) e clique na opção Add Existing Item. Localize o arquivo .MDB e clique no botão Add.


Continuando, dê um clique somente sobre o controle AccessDataSource e perceba que irá aparecer uma pequena seta (conhecida como smart tag). Clique na seta e em seguida na opção Configure Data Source.


O assistente de configuração é aberto. Na janela Configure Data Source, selecione uma base de dados .MDB e clique no botão Next.


Na próxima janela, selecione uma das tabelas da base de dados, marque as colunas que deseja exibir e clique em Next.


Na janela seguinte, clique no botão Test Query para visualizar o resultado que irá obter, e clique em Finish. Já temos o acesso aos dados, só nos resta vincular o controle GridView ao AccessDataSource. Selecione o GridView, clique na smart tag, e na opção Choose Data Source selecione o controle AccessDataSource.


Perceba que ao selecionar a fonte de dados, as colunas escolhidas durante o processo de configuração, é exibida no GridView mesmo estando em ambiente de projeto. Só nos resta testar a aplicação. Pressione a tecla F5 para executarmos a aplicação, e confira o resultado conforme a imagem a seguir.


É isso aí, o nosso objetivo de estabelecer uma conexão e exibir os dados em uma grade foi alcançado.
Até a próxima!

sábado, 14 de maio de 2011

Gravando o log de erro em arquivo TXT

Por mais completa e robusta seja a uma aplicação, ela não está totalmente livre de gerar alguns erros/exceções inesperados em tempo de execução. O erro pode ser gerado de “n” situações: Servidor de dados indisponível, cálculo com um dos operandos portando um valor nulo, falha durante um envio de e-mail e muitas outras situações. Como uma boa prática, é imprescindível armazenar as informações do escopo do erro, já que em um outro momento (dependendo do grau do problema), o desenvolvedor terá que avaliar o acontecido.

É pensando neste cenário, que vamos demonstrar como criar um arquivo de texto .TXT para gravar os erros de uma  aplicação. Para criar o projeto, utilizou-se o Visual Studio 2010 Ultimate em linguagem VB.NET.

Abra o Visual Studio e crie um novo projeto (File > New > Project) do tipo Windows Forms Application em linguagem VB.NET.


Para lançar um erro em tempo de execução, vamos criar uma rotina básica para forçar um erro, que nada mais é do que dividir um número por zero “0”. Dê um duplo-clique no centro do Form1, para que o VS crie o escopo do evento Load do formulário. Escreva a listagem abaixo.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim valor1 As Integer = 5
    Dim valor2 As Integer = 0
    Try
        Dim ret As Integer = valor1 / valor2
    Catch ex As Exception
        Me.GerarLogErro(ex)
        MessageBox.Show("Ocorreu um erro inesperado. Avise ao suporte.", _
                        "Programação On-Line")
    End Try
End Sub

No código acima, utilizamos um bloco de tratamento de erro (Try… Catch) e quando o erro acontecer, os dados da exceção serão enviados para um método chamado GerarLogErro. A implementação do método segue abaixo.

Private Sub GerarLogErro(ByRef e As Exception)
    Try
        Dim sw As New StreamWriter("C:\LogErro.txt", True)
        With sw
            .WriteLine("Data: " & DateTime.Now.ToShortDateString())
            .WriteLine("Hora: " & DateTime.Now.ToShortTimeString())
            .WriteLine("Descrição do erro: " & e.Message)

            .WriteLine("Formulário: " & form)
            .WriteLine("Computador: " & My.Computer.Name)
            .WriteLine("Usuário: " & My.User.Name)
            .WriteLine("---")
            .Flush()
            .Dispose()
        End With
    Catch
    End Try
End Sub

Para exemplificar, o arquivo TXT será criado no caminho na unidade “C:\” (mas poderia ser criado em qualquer outra unidade). Testa a aplicação (tecla de atalho F5) e veja o resultado.


Para que o usuário saiba que ocorreu uma exceção, mostramos uma caixa de mensagem com uma informações genérica. Neste momento, o arquivo foi criado e o conteúdo do mesmo segue na imagem abaixo.


Este é um modo simples de como documentar as mensagens inesperadas que ocorrem no sistema. Espero que o material seja útil e até a próxima!

Alternando as cores das linhas do DataGridView

Em Visual Basic 6.0, quando se tinha a necessidade de alternar as cores das linhas de uma grade (ListView, MSFlexGrid, MSHFlexGrid, DataGrid...), o programador precisa recorrer a algum recurso externo (API ou linhas de código) para obter um bom resultado. Em VB.NET, não há esta necessidade, já que o próprio controle dispõe de uma janela de configuração que possibilita o ajuste manual. Este exemplo será demonstrado no Visual Studio 2010 em linguagem VB.NET.

Abra o Visual Studio (VS) e crie um novo projeto (File > New > Project) do tipo Windows Forms Application em linguagem VB.NET.


Adicione um controle DataGridView (que está alocado na guia Data da Toolbox) no Form1, dando um duplo-clique sobre o controle.



Com a janela devidamente pronta, precisamos alimentar a grade para demonstrar as linhas com cores alternadas. Para isso, dê um duplo-clique sobre a área livre do Form1, e escreva o código abaixo no evento Load.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Lista contendo os times semi-finalistas da Copa do Brasil
        Dim copaDoBrasil() As String = {"CEARÁ", "CORITIBA", "VASCO", "AVAÍ"}

        'Criar uma coluna no Grid
        DataGridView1.Columns.Add("Time", "Semi-Finalistas da Copa do Brasil")
        DataGridView1.Columns(0).Width = 340

        'Popular a grade usando os itens da lista
        For Each time As String In copaDoBrasil
            DataGridView1.Rows.Add(time)
        Next
    End Sub

Por fim, volte para a guia Design e acesse a janela de Propriedades para ajustar as configurações do Grid. Selecione a opção AlternatingRowsDefaultCellStyle e clique no botão [...]. Na janela CellStyle Builder, altere a propriedade BackColor para a cor desejada e clique no botão OK.



Execute a aplicação e teste o projeto. A imagem abaixo representa o resultado que obtive no término do exemplo.


Fico por aqui e até a próxima.

quarta-feira, 11 de maio de 2011

Usando o atributo OnClientClick do Button

Alguns controles em ASP.NET possuem uma propriedade OnClientClick, que é utilizada para executar um script do lado do cliente (navegador). Em se tratando do controle Button, ao receber um clique, o botão antecipa a execução do evento Click passando antes pela rotina escrita na propriedade OnClientClick

Veremos um exemplo bem simples.

Abra o Visual Studio e crie um novo Web Site (File > New > Web Site > ASP.NET Web Site) em linguagem C#.


Aproveitando a página Default.aspx, que foi criada automaticamente, clique na guia Source e altere o código fonte HTML da página conforme a listagem abaixo.


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!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></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" Text="Enviar" onclick="Button1_Click"
            onclientclick="return confirm('Deseja enviar?');" />
        <br />
        <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
    </div>
    </form>
</body>
</html>

O atributo OnClientClick do Button1 foi preenchido com uma rotina em linguagem Javascript, para exibir uma caixa de diálogo com dois botões (OK e Cancel). Volte para a guia Design da página, dê um duplo-clique sobre o botão “Enviar” e escreva o código abaixo no evento Click.

protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = "Os dados foram enviados com sucesso!";
}

O exemplo está pronto, rode a aplicação e clique no botão “Enviar”. Uma mensagem é exibida sobre a janela, e ao clicar no botão Cancel a rotina é cancelada. Caso o usuário clique no botão OK, a rotina escrita no evento Click é executada do lado do servidor.



A idéia do exemplo, é permitir que o usuário confirme a postagem de dados, antes da rotina de persistência ser executada. Por enquanto é só. 

Fico por aqui e até a próxima!