sábado, 30 de abril de 2011

Criando e usando um arquivo de configuração

O Visual Studio dispõe de vários recursos que auxiliam o programador no processo de desenvolvimento de software. Um deles é o arquivo de configuração (app.config para aplicações desktop, e web.config para aplicações web), que é basicamente um documento XML (Extensible Markup Language). Nosso objetivo aqui, é criar o par “identificador - valor” para simular o armazenamento de parâmetros de configuração de um sistema.

Como exemplo, vamos usar as informações de uma connection string (servidor, usuário e senha) e armazenar no arquivo .config.

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


Com o projeto criado, clique no menu Project > UsandoConfigVBNet Properties para termos acesso às propriedades do projeto.


Na janela de configuração, clique na guia Settings e preencha a grade conforme a imagem abaixo.


Fecha a guia de configuração (clicando no “X”) e adicione alguns controles (Label, TextBox e Button) no Form1 conforme a figura. Para incluir os controles, acesse a Toolbox na guia Common Controls e arraste os controles para o formulário.


Com a aparência e o arquivo .config pronto, vamos codificar o sistema, começanco pelo botão “Ler Config”. Dê um duplo-clique no botão e escreva a listagem abaixo no escopo do evento Click.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs
Handles Button1.Click
    TextBox1.Text = My.Settings.Servidor
    TextBox2.Text = My.Settings.Usuario
    TextBox3.Text = My.Settings.Senha
End Sub

Volte para o Design do Form1, e faça o mesmo procedimento com o botão “Gravar Config”. O código deste outro botão segue abaixo.

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs
Handles Button2.Click
    My.Settings.Servidor = TextBox1.Text
    My.Settings.Usuario = TextBox2.Text
    My.Settings.Senha = TextBox3.Text
    My.Settings.Save()
    MessageBox.Show("As configurações foram salvas com sucesso!")
End Sub

O código que escrevemos, tem por finalidade acessar a guia de configurações que utilizamos no início do artigo, e em seguida executar as operações de leitura e escrita no arquivo. Para testar, pressione a tecla de atalho F5 para compilar e executar o projeto. Inicialmente, clique no botão “Ler Config” e veja o resultado.


Altere a senha para “123456” e clique no botão “Gravar Config” e veja o resultado.


Para finalizar, se em um dado momento, surgir a necessidade de voltar à configuração padrão (pré-definida na configuração) é só usar o método Reset.

My.Settings.Reset()

A implementação é muito simples, mas ajuda bastante o programador! Um outro detalhe, é que não há mais a necessidade de se criar arquivos ".INI", já que o ".CONFIG" não requer muitas linhas de código.

É isso aí e até a próxima!

domingo, 24 de abril de 2011

Acessando um base Access em ASP 3.0

Saudações, pessoal!

Mesmo com as novas aplicações web, sendo construídas com as linguagens PHP e ASP.NET, o ASP clássico continua sendo utilizado no ambiente das empresas de pequeno e médio porte. Para os sistemas que não necessitam armazenar uma grande quantidade de informação, normalmente utiliza-se o Microsoft Access como base de dados, por ser de fácil criação e manutenção. Pensando nisso, vamos demonstrar como acessar uma base Access com o ASP 3.0.

Para codificar, vamos utilizar o Adobe Dreamweaver CS3, mas você pode utilizar qualquer editor de texto (inclusive o Notepad do Windows). Além disso, vamos utilizar a base Northwind, já que ela vem com algumas tabelas prontas e pré-alimentadas. Quanto ao visual da página, vamos usar um arquivo CSS com as definições das propriedades dos elementos da página.

Crie um novo arquivo com o nome "access.asp" e codifique-o de acordo com a listagem seguinte:


<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<html>
<head>
<link href="styles.css" rel="stylesheet" type="text/css" /> 
<title>Acessando uma base Access com ASP 3.0</title>
</head>
<body>


<%
Dim con, rs, linha
Set con = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
linha = 0
con.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("Northwind.mdb")
rs.Open "SELECT ProductID, ProductName, UnitPrice, UnitsInStock FROM Products ORDER BY ProductName", con, 3, 1
%>


<h2>Acessando uma base Access com ASP 3.0</h2>
<table id="mytable" cellspacing="0"> 
  <tr> 
    <th scope="col" abbr="Dual 1.8">ProductID</th> 
    <th scope="col" abbr="Dual 2">ProductName</th> 
<th scope="col" abbr="Dual 2.5">UnitPrice</th> 
<th scope="col" abbr="Dual 2.5">UnitsInStock</th>     
  </tr> 


  <% 
  Do While Not rs.Eof
   If linha = 0 Then
Response.Write("<tr>")
Response.Write("<td>" & rs.Fields("ProductID") & "</td>")
Response.Write("<td>" & rs.Fields("ProductName") & "</td>")
Response.Write("<td>" & FormatNumber(rs.Fields("UnitPrice"), 2) & "</td>")
Response.Write("<td>" & rs.Fields("UnitsInStock") & "</td>")
Response.Write("</tr>")
linha = 1
Else
Response.Write("<tr>")
Response.Write("<td class='alt'>" & rs.Fields("ProductID") & "</td>")
Response.Write("<td class='alt'>" & rs.Fields("ProductName") & "</td>")
Response.Write("<td class='alt'>" & FormatNumber(rs.Fields("UnitPrice"), 2) & "</td>")
Response.Write("<td class='alt'>" & rs.Fields("UnitsInStock") & "</td>")
Response.Write("</tr>")
linha = 0
End If
   rs.MoveNext
  Loop
  %>
  
</table>
</body>
</html>

No escopo da tag "Head" da página, fizemos uma referência ao arquivo de estilos "styles.css". Até o momento, o ficheiro não existe. Vamos criá-lo agora. Utilizando o mesmo editor de texto, crie um arquivo com este nome e codifique o mesmo com o trecho a seguir. O detalhe é que o arquivo CSS deve ser criado no mesmo diretório da página ASP.

body {
font: normal 11px auto "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
color: #4f6b72;
}

a {
color: #c75f3e;
}

#mytable {
width: 700px;
padding: 0;
margin: 0;
}

caption {
padding: 0 0 5px 0;
width: 700px;  
font: italic 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
text-align: right;
}

th {
font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
color: #4f6b72;
border-right: 1px solid #C1DAD7;
border-bottom: 1px solid #C1DAD7;
border-top: 1px solid #C1DAD7;
letter-spacing: 2px;
text-transform: uppercase;
text-align: left;
padding: 6px 6px 6px 12px;
background: #CAE8EA url(images/bg_header.jpg) no-repeat;
}

th.nobg {
border-top: 0;
border-left: 0;
border-right: 1px solid #C1DAD7;
background: none;
}

td {
border-left: 1px solid #C1DAD7;
border-right: 1px solid #C1DAD7;
border-bottom: 1px solid #C1DAD7;
background: #fff;
padding: 6px 6px 6px 12px;
color: #4f6b72;
}


td.alt {
background: #F5FAFA;
color: #797268;
}

th.spec {
border-left: 1px solid #C1DAD7;
border-top: 0;
background: #fff url(images/bullet1.gif) no-repeat;
font: bold 10px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}

th.specalt {
border-left: 1px solid #C1DAD7;
border-top: 0;
background: #f5fafa url(images/bullet2.gif) no-repeat;
font: bold 10px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
color: #797268;
}

Já temos todas as definições da página, e seus devidos estilos ajustados no arquivo CSS. Para testar, hospede os arquivos em um servidor web local (ou remoto) e digite a URL no browser para visualizar o resultado. 


A aparência final da página, ganhou um aspecto profissional que lembra os templates pré-definidos do controle GridView em ASP.NET. Fico por aqui, e até a próxima!

sábado, 23 de abril de 2011

Alimentar dois controles ComboBox com LINQ To SQL em C#

Pré-requisitos:

E aí, pessoal!

Em outro momento, escrevemos um artigo ilustrando como “Preencher um ListBox com LINQ To SQL” (link acima).

Seguindo o mesmo raciocínio, vamos alimentar dois controles do tipo ComboBox com LINQ To SQL. A idéia é carregar o primeiro controle com algumas Categorias, e o segundo com os Produtos da categoria selecionada no controle anterior.

Abra o Visual Studio e crie um novo projeto (File > New > Project) do tipo Windows Forms Application em linguagem C#. O VS cria automaticamente um formulário (Form1) que será a janela que utilizaremos no projeto. Acesse a Toolbox, e arraste dois controles do tipo ComboBox para o Form1, e dois Labels para rotular as caixas de combinação.


Vamos adicionar ao projeto, o arquivo DBML (Project > Add New Item > LINQ To SQL Classes) que será responsável por fazer o mapeamento objeto-relacional das nossas tabelas (Categories e Products) da base Northwind. Não demonstraremos como fazer este procedimento, já que os detalhes foram postados no artigo de referência acima.Após o mapeamento das entidades, o arquivo DBML estará com a aparência da imagem abaixo.


Perceba que há um relacionamento entre as classes (tabelas) através do campo CategoryID, que é comum nas duas entidades. Usaremos este campo para obter os produtos da categoria selecionada. Selecione o Form1 na IDE do VS, e dê um duplo-clique no meio do formulário para que o Visual Studio crie o evento Load. Escreva a listagem abaixo no escopo do evento Load.

private void Form1_Load(object sender, EventArgs e)
{
    using (NorthwindDataContext context = new NorthwindDataContext())
    {
        var query = from c in context.Categories
                    select c;
        comboBox1.DataSource = query;
        comboBox1.DisplayMember = "CategoryName";
        comboBox1.ValueMember = "CategoryID";
    }
}

Se for executada a aplicação neste momento, perceba que o primeiro ComboBox (com as categorias) já está sendo devidamente preenchido.


Prosseguindo, resta escrever uma rotina para alimentar o segundo controle, quando o primeiro Combo for selecionado. O evento que usaremos é o SelectedIndexChanged do ComboBox. Acesse a guia Properties, selecione o controle comboBox1, clique no ícone Events e dê um duplo-clique sobre o evento SelectedIndexChanged.


Com este procedimento, o Visual Studio escreve o escopo do evento no editor, que será acionado ao selecionar um registro no Combo. Escreva o trecho de código abaixo no escopo do evento.

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    int categoryID = 0;
    if (int.TryParse(comboBox1.SelectedValue.ToString(), out categoryID))
    {
        using (NorthwindDataContext context = new NorthwindDataContext())
        {
            var query = from p in context.Products
                        where p.CategoryID == categoryID
                        select p;
            comboBox2.DataSource = query;
            comboBox2.DisplayMember = "ProductName";
            comboBox2.ValueMember = "ProductID";
         }
    }
}

Basicamente, ao selecionar uma categoria no primeiro ComboBox, será executado o evento SelectedIndexChanged que possui a rotina para preencher o segundo controle. Um detalhe importante, é que não escrevemos nenhum bloco de tratamento, já que o objetivo é demonstrar a usabilidade dos dois controles do tipo ComboBox.

Execute a aplicação e veja o resultado.


Espero que o artigo sirva de exemplo para uma implementação com LINQ e ComboBox.
Qualquer dúvida, é só enviar um e-mail para contato.programacao@gmail.com.

Até a próxima!

Ouvindo rádios pela internet com C#

Pra quem já acompanha os artigos que escrevo no site / blog, já deve ter lido (ou não) um projeto com esta mesma finalidade, só que em linguagem Visual Basic 6.0.


O nosso objetivo aqui é o mesmo, só que desta vez o faremos em linguagem C#. Abra o Visual Studio (utilizou-se a versão 2010 Ultimate) e crie um novo projeto (File > New > Project) do tipo Windows Forms Application em linguagem C#. O controle que será usado para reproduzir a transmissão das rádios on-line, é o Windows Media Player. Na Toolbox, clique com o botão direito do mouse e escolha a opção Choose Items.


Na janela Choose Toolbox Items, clique na guia COM Components, marque a opção Windows Media Player e clique no botão OK.


Feito isso, o controle do Windows Media Player já se encontra disponível no VS para ser usado no projeto. Dê um duplo-clique sobre ele, para adicioná-lo ao formulário Form1.


Adicione mais dois controles no formulário – um ListBox e um Button (com a propridade Text igual a Ouvir Rádio). Redimensione os controles para que se alinhem e ocupem seu devido espaço no formulário. Neste exato momento, o leiaute do Form1 deve ser semelhante a imagem abaixo.


Vamos seguir para a parte de codificação do projeto, para ter acesso ao editor de código fonte, dê um duplo clique sobre uma área do Form1, para que o VS já escreva o evento Load do Form. Escreva o trecho abaixo no escopo deste evento.

private void Form1_Load(object sender, EventArgs e)
{
    listBox1.Items.Add("Antena 1 FM (Adulta)");
    listBox1.Items.Add("Jovem Pan AM (Notícias)");
    listBox1.Items.Add("Nova Brasil FM (MPB)");
    listBox1.Items.Add("Shekinah FM (Gospel)");
}

Seguindo o raciocínio, volte para o Design do Form, e dê um duplo-clique sobre o botão “Ouvir rádio”. Escreva a listagem abaixo no evento Click.

private void button1_Click(object sender, EventArgs e)
{
    string URL = string.Empty;
    switch (listBox1.SelectedIndex)
    {
        case 0:
            URL = "mms://wmedia.telium.com.br/antenaum";
            break;
        case 1:
            URL = "mms://p.mm.uol.com.br/ampan";
            break;
        case 2:
            URL = "http://00086.cdn.upx.net.br/listen.wmx";
            break;
        case 3:
            URL = "http://www.shekinahfm.com.br/radio.asx";
            break;
        default:
            MessageBox.Show("Selecione um rádio da lista e clique no botão \"Ouvir rádio\".");
            break;
    }
    if (!URL.Equals("")) axWindowsMediaPlayer1.URL = URL;
}

Para obter o link de algumas rádios on-line, acesse o site www.radios.com.br, escolha uma rádio que você gostaria de ouvir pela internet, e acesse as propriedades do controle do Windows Media Player na web. No campo Local, é apresentada a URL da rádio escolhida.

Teste o projeto, pressionando a tecla de atalho F5, e veja o resultado.


Fico por aqui, ouvindo uma rádio on-line, e esperando que tenham gostado do artigo.
Até a próxima!

quinta-feira, 21 de abril de 2011

Usando o Fancybox com ASP clássico

Fancybox é uma ferramenta gratuita desenvolvida com a parceria da bibliteca jQuery, e que permite a exibição de imagens, textos e conteúdos multimídias em "janelas flutuantes" sobre uma página da web. A página oficial do Fancybox é http://fancybox.net/.

Este exemplo foi desenvolvido em ASP 3.0 com uma base Microsoft Access para alocar os dados utilizados no projeto. A idéia é listar os dados de um produto, semelhante a uma loja virtual, e ao clicar no link + Detalhes do produto, é exibida as informações detalhadas no Fancybox do produto em questão.

Screenshots

Baixe o código fonte completo no link abaixo:

Até a próxima!

terça-feira, 19 de abril de 2011

Importar planilha do Excel para o SQL Server

O Microsoft SQL Server dispõe de uma ferramenta de importação (e exportação) de dados, que permite obter (e extrair) dados de inúmeras fontes de dados. Toda a atividade é executada com o auxílio de um assistente, que aliás é muito simples de utilizar. Neste artigo, vamos criar uma planilha no Excel 2007, acrescentar algumas linhas e colunas, e em seguida importar o arquivo para o SQL Server 2005 Express Edition.

Abra o Excel (pode ser em qualquer versão), e preencha as células com os dados abaixo:


Na primeira coluna da planilha (Codigo), informamos um código que será o identificador do contato. Selecione os valores desta coluna (célula A2 até A6), e formate os dados como “Número”. Para isso, clique com o botão direito do mouse sobre as linhas selecionadas e escolha a opção “Formatar células”.


Selecione a opção “Número”, selecione a quantidade “0” (zero) de casas decimais e clique no botão OK. Para concluir a primeira parte, renomeie a planilha de “Plan1” para “Contato” (clique com o botão direito do mouse, e em seguida “Renomear”) pois será o nome final da nossa tabela.


Salve o arquivo em um diretório no computador e feche o Excel. Abra o Microsoft SQL Server Management Studio, que é a ferramenta de administração do SQL, e crie um banco de dados para receber a nossa planilha.


Para exemplificar, vou criar uma base chamada “Estudo”.


Com a base de dados criada, clique com o botão direito sobre a mesma e selecione a opção “Tasks”, em seguida clique em “Import Data”. A janela do assistente de importação será aberta, conforme a imagem abaixo.


Clique no botão “Next” para prosseguir. Na listagem de fonte de dados (Data Source), selecione a opção Microsoft Excel, em seguida clique no botão “Browse” e localize o arquivo recentemente criado. Clique no botão “Next” para prosseguir.


Na próxima janela, vamos selecionar o servidor de destino e base de dados SQL que irá receber a nossa planilha. Selecione a opção “Use SQL Server Authentication”, preencha com os dados de autenticação do servidor e selecione a base de dados “Estudo”. Clique no botão “Next” para prosseguir.


Na próxima janela, mantenha a opção “Copy data from one or more tables or views” e clique no botão “Next”. Seguindo com a importação, na próxima janela, iremos marcar a opção referente a planilha “Contato$”, em seguida retirar o caractere “$” da coluna “Destination” e clique em “Next”.


No próxima passo, mantenha a opção “Run immediately” e clique no botão “Finish” para concluir.


Com o processo concluído, vamos conferir o resultado. Clique no sinal de “+” da base de dados “Estudo” e veja a tabela recém-criada na importação.


Para comprovar se os contatos da planilha foram importados com para a tabela, faça uma seleção dos dados conforme a query abaixo.



É isso aí! A importação foi concluída com êxito, e vou ficar por aqui!
Até a próxima!

segunda-feira, 18 de abril de 2011

Agenda de contatos com ADO.NET

O projeto demonstra como criar uma simples agenda de contatos em ADO.NET com SQL Server. O código fonte foi desenvolvido usando o Visual Studio2010 Ultimate, mas é possível abrí-lo com o VS2008 (através do arquivo .csproj).

Script da tabela
USE [Agenda]

CREATE TABLE [dbo].[Contato](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Nome] [varchar](50) NULL,
[Endereco] [varchar](50) NULL,
[Email] [varchar](50) NULL,
[Telefone] [varchar](15) NULL,
 CONSTRAINT [PK_Contato] PRIMARY KEY CLUSTERED 
(
[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

O nome da base de dados deve ser Agenda.

Screenshot
O código fonte está disponível no link abaixo.

Até a próxima!

domingo, 17 de abril de 2011

Leitor de RSS em VB6 (OCX)

Que tal permitir que os usuários de suas aplicações possam obter notícias em tempo real sem sair da janela do sistema? O componente RSS, desenvolvido por Flávio Tecla (Programação On-Line) tem este objetivo, ou seja, disponibilizar as notícias dos principais portais de notícias ou qualquer site que disponha de um feed RSS (Really Simple Syndication). Caso o usuário deseja ler a notícia na íntegra, é só clicar no link da manchete e aguardar o carregamento da página respectiva no browser definido como padrão.

Para obter mais informações sobre a tecnologia RSS, acesse o link abaixo: 
http://pt.wikipedia.org/wiki/RSS 


Screenshot do componente em run-time

VBMania
Terra Brasil
Terra Tecnologia

Olhar Digital

Como utilizar o componente
Para usufruir do componente RSS no VB6, inicialmente baixe o arquivo LeitorRSS.ocx no link abaixo:
LeitorRSS.ocx

Em seguida, copie o arquivo para a pasta \WINDOWS\SYSTEM32 e registre usando o comando a seguir:
REGSVR32 LeitorRSS.ocx
O código fonte se resume a 2 linhas somente.
RSS1.URL = "http://url_do_feed_rss"
RSS1.CarregarRSS

Para facilitar o processo de implementação, foi feita uma demonstração em formato de vídeo. 
Acompanhe e veja o controle em tempo de execução.


Qualquer problema, sugestão ou crítica, envie um e-mail para contato.programacao@gmail.com