Você está na página 1de 74

LOCADORA DE FILMES - VB.

NET 2005 - JOS CARLOS MACORATTI

Parte 1 Atendendo milhares de pedidos resolvi mostrar como voc pode desenvolver uma aplicao Windows no VB 2005 do incio ao fim. Ser uma aplicao que se prope a gerenciar uma locadora de filmes (DVD e VHS) com recursos bsicos. A APLICAO APRESENTADA EM 8 PARTES. Primeiro quero deixar claro que tudo o que voc vai ler neste artigo e nos artigos seguintes no de minha autoria. Tudo est baseado nos exemplos da MSDN (MSDnVideo) que voc pode acessar no site da Microsoft. Eu apenas refiz os exemplos citados com algumas adaptaes. Para acompanhar esta srie de artigos voc vai precisar ter os seguintes recursos instalados e funcionando no seu computador:
Visual Developer 2005 Express Visual Basic 2005 Express SQL Server 2005 Express

O objetivo principal deste artigo apresentar os novos recursos de acesso a dados a aplicao ser bem simples de forma a tornar possvel, em um tempo razovel, a publicao dos artigos. Portanto a modelagem de dados e a definio de requisitos, pontos fundamentais em qualquer aplicao no estaro refletindo o que seria uma aplicao real de produo. A idia fornecer os fundamentos bsicos para que voc possa expandir e melhorar a aplicao e tambm para que os que esto comeando agora possam acompanhar os artigos sem muito trauma.

Nesta primeira parte vou desenvolver os seguintes tpicos:


1. Criao do Banco de dados , tabelas , campos , definio de chaves primrias e do relacionamento entre as tabelas do sistema 2. Criao de uma conexo com a fonte de dados e definio dos DataSets

1- Criando o Banco de dados, as tabelas e definindo o relacionamento


Vamos ento arregaar as mangas e por a 'mo na massa'. Inicie o Visual Basic 2005 Express Edition e clique na opo Create Project, selecionando a seguir na janela New Project o Template Windows Application, e, informando o nome do projeto como Locadora Filmes (ou algo que melhor lhe apetecer...eu vou usar o nome citado.) conforme figura abaixo:

-1-

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Na janela Solution Explorer clique com o boto direito do mouse sobre o nome do projeto e selecione do menu suspenso a opo Add -> New Item, e na janela Add New Item , selecione o Template SQL Database informando o nome de Locadora.mdf; a seguir clique no boto Add. (figura abaixo)

-2-

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Na janela Data Source COnfiguration Wizard, como vamos criar as tabelas clique no boto - Finished. Voc ver, conforme figura abaixo, o banco de dados Locadora.mdf criado e incorporado ao seu projeto. Isto uma novidade do VB 2005.

-3-

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Vamos criar as tabelas do nosso projeto; na janela DataBase Explorer expanda o item Locadora.mdf e clique com o boto direito do mouse sobre o item Tables, selecionando a opo Add New Table.

-4-

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Digite o nome e os tipos de dados de cada campo e a seguir salve a tabela com o nome de Cliente, conforme figura abaixo:

Repita o procedimento adota acima e crie a tabela Filmes conforme figura abaixo:

-5-

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Repita a operao para a tabela Movimento, conforme abaixo:

Aps terminar voc dever ter 3 tabelas conforme abaixo:

1. Cliente - Contm os dados dos clientes da locadora 2. FImes - Contm os dados sobre os filmes oferecidos pela locadora 3. Movimento - Contm os dados sobre a locao dos filmes pelos clientes

Vamos definir o relacionamento entre as tabelas. Clique agora no item Database Diagrams e selecione a opo Add New Diagram. Nota: Informe o nome do Diagrama como DiagramaLocadora

-6-

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Na janela Add Table, selecione cada uma das tabelas e clique no boto Add.

Para definir a chave primria para cada tabela clique com o boto direito do mouse sobre o campo que deseja como chave primria e selecione a opo - Set As Primary Key, aceitando o valor padro das telas seguintes. Vamos definir os seguintes relacionamentos entre as tabelas: 1- Cliente (CodigoCliente) --> UM-PARA-MUITOS Movimento (CodigoCliente) - Relacionamento do tipo

2- Filmes(CodigoFilme) --> Movimento (CodigoFilme) - Relacionamento do tipo UMPARA-MUITOS

-7-

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Ou seja: 1- Existe um relacionamento entre a tabela Cliente e a tabela Movimento entre as chaves primrias CodigoCliente onde para cada Cliente da tabela Cliente eu posso ter infinitos Clientes na tabela Movimento. 2- Existe um relacionamento entre a tabela Filmes e a tabela Movimento entre as chaves primrias CodigoFilme onde para cada Filme da tabela Cliente eu posso ter infinitos Filmes na tabela Movimento. Nota: Esta modelagem foi adotada apenas com objetivo didtico e no deve ser usada em uma aplicao de produo pois no est, como podem notar, corretamente normalizada.

Pronto ! J temos o banco de dados criado no SQL Server 2005 e as tabelas Cliente, Filmes e Movimento tambm criadas e com campos e relacionamentos definidos. Note que tudo foi feito usando o VB.NET 2005 com ajuda dos seus assistentes.

2- Criao de uma conexo com a fonte de dados e definio dos DataSets


Vamos agora criar a conexo e as fonte de dados do tipo DataSet usando o assistente do VB 2005. 1- Clique na guia Data Sources e selecione a opo - Add New DataSource; Na janela Data Source Configuration Wizard, selecione a opo DataBase e clique no boto Next>.

-8-

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Fontes de dados O Visual Studio 2005 apresenta o conceito de fontes de dados em um projeto. Uma fonte de dados representa os dados disponveis para um aplicativo. Esses dados no esto necessariamente em um banco de dados, o Data Source Configuration Wizard (Assistente para Configurao de Fonte de Dados) que voc usa para definir a fonte de dados permite obter os dados de trs fontes diferentes: 1.Banco de dados pode ser um banco de dados baseado no servidor, como o SQL Server ou o Oracle, ou um banco de dados baseado em arquivo, como o Access ou o SQL Server Express. O Visual Studio gera automaticamente os DataSets de tipos, bem como outras classes, e os adiciona ao projeto. 2.Objeto qualquer objeto com propriedades pblicas pode ser a fonte de dados. No necessrio implementar nenhuma interface especial. 3.Servio da Web criar uma fonte de dados em um servio da Web cria objetos correspondentes ao tipo de dados retornado por esse servio. A finalidade da fonte de dados dupla. Em primeiro lugar, ela torna mais fcil especificar, criar e gerar classes com rigidez de tipos que representam os dados do aplicativo. Em segundo lugar, fornece um mecanismo flexvel, porm uniforme, de criao rpida de interfaces de usurio WinForm e WebForms avanadas e altamente funcionais. Neste artigo, veremos o quanto isso rpido, fcil e flexvel. Tambm nos concentraremos na criao de fontes de dados de banco de dados (DataSet) e no uso dessas fontes em aplicativos WinForms. No entanto, importante salientar estes dois pontos:

-9-

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Aps a criao de uma fonte de dados, voc a utiliza da mesma maneira, independentemente da origem dos dados. Ou seja, assim como voc pode facilmente (e graficamente) ligar uma fonte de dados baseada em um Database a uma grade ou a um conjunto de controles, tambm pode fazer isso com os dados cuja origem um servio da Web ou seus objetos comerciais personalizados. As fontes de dados so definidas da mesma maneira, independentemente de serem usadas em um aplicativo WinForms ou WebForms. Os diferentes provedores de dados tambm so abstratos; assim, se o seu acesso aos dados estiver exposto somente pelo uso de DataSets e TableAdapters, para alterar o banco de dados real, bastar alterar a seqncia de caracteres de conexo e gerar as classes novamente. fonte MSDN - Novos recursos de DataSet no Visual Studio 2005 - Jackie Goldstein - Renaissance Computer Systems

2- Na tela seguinte, defina a conexo com o banco de dados Locadora.mdf. Lembrando que podemos exibir a string de conexo. Clique no boto Next>

3- No prximo passo vamos criar uma fonte de dados do tipo DataSet para cada uma das tabelas. Poderamos criar um DataSet com mais de uma tabela se desejamos apresentar um relacionamento do tipo mestre-detalhes. Selecione ento a tabela Clientes, informe o nome ClienteDS e clique no boto Finish.

- 10 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Repita o procedimento acima (item 1 ao 3) e crie as fontes de dados FilmesDS e MovimentoDS para as tabelas Filmes e Movimento. Se tudo deu certo voc dever ter 3 fontes de dados do tipo DataSet em sua janela, conforme figura abaixo:

Podemos navegar pelos objetos DataSet criados exibindo os campos de cada um deles e tambm editar o DataSet. Para isto clique com o boto direito do mouse sobre o DataSet e selecione a opo - Edit DataSet with Designer.

- 11 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Ser exibido a representao do objeto MovimentoDS, conforme figura acima, onde temos a tabela com seus respectivos campos e o objeto TableAdapter que permite alimentar, atualizar e aplicar filtros a fonte de dados. E chegamos ao final da primeira parte onde temos a base de dados e as entidades relacionadas a esta base de dados que simbolizam os nossos objetos de negcios os quais so representados pelas tabelas Cliente, Filmes e Movimento; temos tambm o adaptador que permite sincronizar essas entidades em memria com a base de dados. Nota: O conceito de um TableAdapter, por outro lado, novo no Visual Studio 2005. A idia subjacente que um TableAdapter com rigidez de tipos o equivalente com rigidez de tipos do DataAdapter padro. Voc usa o TableAdapter para se conectar a um banco de dados e executar consultas (ou procedimentos armazenados) nesse banco de dados, bem como para preencher com dados um DataTable associado. Cada par DataTable-TableAdapter indicado simplesmente como um TableAdapter O TableAdapter essencialmente um invlucro ao redor de um DataAdapter padro, que oferece vrios benefcios: A mesma classe TableAdapter pode ser usada em mais de um formulrio ou componente para que qualquer alterao em consultas/comandos seja automaticamente refletida em todas as instncias. Essa situao diferente da existente, na qual cada componente que acessa o banco de dados deve ter seu prprio DataAdapter configurado individualmente. Dessa forma, fica muito mais fcil garantir a sincronizao de DataTables e DataAdapters. Em vez de usar vrios DataAdapters (ou cdigo de comutao artesanal) para ter vrias consultas/comandos para um nico DataTable, um TableAdapter permite definir facilmente vrios comandos para um DataTable especfico. Os comandos de preenchimento tm nomes legveis ("amigveis") e o TableAdapter inclui um cdigo para preencher automaticamente as informaes de tipo e valor de todos os parmetros desses mtodos de comando. Voc no precisa mais se preocupar em passar tipos de dados especficos do provedor, como SqlInt. fonte MSDN - Novos recursos de DataSet no Visual Studio 2005 - Jackie Goldstein Renaissance Computer Systems

- 12 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Parte 2 Continuando o desenvolvimento do nosso projeto Locadora de Filmes no Visual Basic 2005 Express Edition este artigo ir mostrar como voc pode criar a interface com o usurio usando alguns dos recursos disponveis no VB 2005. Se voc esta chegando agora recomendo que leia a primeira parte em : VB.NET 2005 - Criando uma aplicao completa : Locadora de Filmes I Os principais formulrios que iremos criar para a aplicao so : 1. Principal.vb - formulrio MDI que apresenta a aplicao com um menu de opes 2. Clientes.vb - formulrio usado para cadastrar os clientes 3. Movimento.vb - formulrio que gerencia as informaes sobre locaes de filmes 4. Devolucao.vb - formulrio que gerencia as informaes sobre a devoluo de filmes alugados.

Criando os formulrios da aplicao


- O formulrio Principal Vamos usar o formulrio padro form1.vb para criar o formulrio principal da nossa aplicao. Vamos alterar o nome do arquivo para Principal.vb (clique com o boto direito do mouse sobre o nome do arquivo e selecione Rename) e o nome do formulrio tambm para Principal (Name=Principal) na janela de propriedades. Este formulrio ser o formulrio que ir conter os demais formulrios do projeto, e, portanto dever ser um formulrio MDI, desta forma altere o valor da propriedade IsMdiContainer para True. Altere tambm as propriedades conforme abaixo na janela de propriedades deste formulrio:
Propriedade Valor StartPosition CenterScreen JcmSoft - Locadora (ou algo Text que mais lhe agrade)

Vamos incluir um menu no formulrio de forma a poder gerenciar as opes referente as funcionalidades implementadas. Inclua, a partir da ToolBox um controle MenuStrip na Seo Merus & ToolBars, no formulrio Principal.

- 13 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Vamos aceitar o nome padro para o controle dado pelo VB2005 MenuStrip1 - mas recomendvel dar um nome sugestivo a cada controle que voc usar no seu projeto para facilitar o entendimento e a manuteno.

A seguir Digite diretamente no controle os textos conforme mostrado na figura abaixo.

Perceba que inclumos cones no menu. Fazemos isto selecionando o texto digitado e na janela de propriedades clicando na propriedade Image do item. Na janela Select Resource podemos ento selecionar a imagem como um recurso local ou como um recurso do projeto clicando a seguir no boto Import... e selecionando a imagem:

- 14 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

A seguir vamos incluir um controle Panel na parte inferior do nosso formulrio diretamente da ToolBar a partir da seo Containers.
Este controle do tipo Container pois pode conter outros controles. Altere as seguintes propriedades do controle na janela de propriedades: - Aceite o nome padro - Name = Panel1 - BackColor = White A propriedade Anchor deve ser definida conforme figura abaixo, pois desta forma ao redimensionar o formulrio o controle ser redimensionado de forma adequada.

Inclua um controle PictureBox no interior do controle Panel que voc acabou de inserir no formulrio. Posicione o controle a direita do controle Panel e inclua uma imagem clicando na propriedade Image e selecionando uma imagem via opo Import da janela Select Resource, conforme mostrado na figura abaixo.

- 15 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Defina as seguintes propriedades do controle PictureBox na janela de Propriedades:

Name = PictureBox1 (padro) Image = A imagem selecionada

A propriedade Anchor deve ser definida conforme figura abaixo, pois desta forma ao redimensionar o formulrio o controle ser redimensionado de forma adequada.

Criando um modelo para formulrios


Os formulrios Clientes.vb , Movimento.vb e Devolucao.vb so formulrios que tero praticamente um mesmo comportamento e identidade visual por este motivo seria interessante que fossem criados a partir de um modelo (template) de formulrio. isto que iremos fazer , primeiro vamos criar um formulrio com os componentes comuns aos formulrios que desejamos criar para em seguida criar os formulrios a partir deste modelo. Chamamos este comportamento de herana visual. - Criando o formulrio modelo Inclua no novo formulrio Windows no projeto , clicando com o boto direito do mouse sobre o nome do projeto e selecionando a opo Add->New Item e selecionando a opo Windows Forms na janela Add New Item. Informe o nome FormularioModelo.vb , conforme figura abaixo.

- 16 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

A seguir vamos incluir os componentes que achamos que sero comuns aos formulrios que sero criados a partir deste modelo. Para no complicar vou definir o formulrio modelo contendo apenas um controle Label e um controle GroupBox conforme figura abaixo:
Altere as seguintes propriedades do formulrio modelo na janela de propriedades:

Name = FormularioModelo BackColor = 192; 192; 255 ControlBox = False Font = Arial; 12pt; style=Bold KeyPreview = True Text = FormularioModelo

Altere as seguintes propriedades do controle Label1 :

Anchor = Top, Left, Right BackColor = Navy Font = Arial; 18pt; style=Bold ForeColor = White Modifiers =

- 17 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Protected Defina a propriedade Anchor do controle GroupBox1 como sendo igual a : Top, Bottom, Left, Right

Criando os formulrios a partir do Modelo Vou mostrar agora como voc pode criar formulrios a partir do formulrio modelo acima. Vou fazer isto uma nica vez para o formulrio Clientes.vb de forma que para os demais bastar repetir o processo. Inclua um novo formulrio Windows com o nome de Clientes.vb.
Na janela Solution Explorer clique no cone Show All Files para que todos os arquivos que compem a soluo sejam exibidos. Clique no sinal de mais ao lado do formulrio clientes.vb e clique duas vezes sobre o item Clientes.Designer.vb Isto ir exibir o cdigo do formulrio criado pelo VB2005.

O formulrio Clientes.vb, por padro, herda sua identidade visual da classe Windows.Forms.Form conforme mostrado na figura 1 abaixo. Para que o formulrio passe a herdar a identidade visual do nosso formulrio modelo altere a linha de cdigo Inherits de System.Windows.Forms.Form para FormularioModelo conforme figura 2 abaixo:

Figura 1 - Herdando de Windows.Forms.Form

Figura 2 - Herdando do formulrio - FormularioModelo

- 18 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Agora compile o projeto na opo Build do menu, opo Build Locadora Filmes. A seguir abra o formulrio Clientes.vb e altere a propriedade Text do controle Label1 para - Cadastro de Clientes, conforme abaixo:

Repita o procedimento acima para os formulrio Movimento.vb e Devolucao.vb de forma a obter o resultado abaixo para os respectivos formulrios:

Vamos retornar ao formulrio MDI Principal.vb e vamos incluir as chamadas para cada formulrio que criamos a partir da seleo do menu do formulrio. Para isto clique na opo do menu desejada e inclua o cdigo para exibir cada formulrio conforme abaixo:
Private Sub MovimentoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MovimentoToolStripMenuItem.Click My.Forms.Movimento.MdiParent = Me My.Forms.Movimento.Show() End Sub Private Sub DevoluoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As

- 19 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

System.EventArgs) Handles DevoluoToolStripMenuItem.Click My.Forms.Devolucao.MdiParent = Me My.Forms.Devolucao.Show() End Sub Private Sub ClientesToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClientesToolStripMenuItem1.Click My.Forms.Clientes.MdiParent = Me My.Forms.Clientes.Show() End Sub

Vejamos como o cdigo funciona: My.Forms.Movimento.MdiParent = Me -> Permite que o formulrio seja aberto no container MDI e no em outra janela My.Forms.Movimento.Show() -> Exibe o formulrio Perceba que estamos usando o recurso My do VB2005. Em verses anteriores teramos que usar o seguinte cdigo: Dim frmMovimento As New Movimento frmMovimento.Show()
Nota: Namespace MY O namespace My veio reunir algumas das funes mais utilizadas no .NET Framework, expor novas funes que antes s poderiam ser utilizadas atravs de APIs, ou at mesmo facilitar o uso de outras funes. O objetivo ganhar produtividade obtendo as informaes de forma mais rpida. Abaixo as principais classes e suas descries do namespace My: Namespace My Application Sistemas e servios Computer Computador Host e servios Forms Formulrios do projeto atual Resources Recursos Settings parmetros do sistema e do usurio User segurana do usurio Ex: My.Application... , My.Computer... , My.Forms..., My.Resources...., My.Settings..., My.User...

Incluindo alguns modelos prontos


O VB2005 vem com alguns modelos prontos de formulrios, basta, pegar e usar. Vou usar os seguintes modelos de formulrio j disponveis no VB2005 LoginForm - nome dado Login.vb Splash Screen - nome dado Entrada.vb About Box - nome dado Sobre.vb

- 20 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Abaixo estou exibindo cada um dos respectivos formulrios com seu layout adotado:

O formulrio login.vb permite efetuar uma validao do usurio com senha Vamos implementar o recurso criando uma tabela chamada Usuarios com os Campos: nomeUsuario e senhaID. A senha ser armazenada na forma de um Hash que iremos Gerar usando uma Classe.

- 21 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

formulrio Sobre.vb

O formulrio sobre busca informaes definidas na Configurao do projeto na guia Application do recurso My Project

A tela de apresentao exibida no inicio da aplicao Basta informar na configurao do projeto no campo Splash Screen (ver figura acima) o nome do formulrio que usamos, no caso Entrada.

Como vamos implementar o acesso restrito por chave e senha teremos que incluir um novo formulrio chamado Acesso.vb que ir permitir a incluso destas informaes na base de dados Usuarios (que vou criar em seguida). Inclua um novo formulrio chamado Acesso.vb no projeto conforme o layout abaixo:

- 22 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Os demais componentes do formulrio so:

TextBox : txtUsuario, TxtSenha e TxtSenha2 Button : btnRegistrar e btnCancelar

Ao visualizarmos a janela Solution Explorer do nosso projeto neste momento teremos a seguinte fotografia do mesmo:
Em nossa Soluo temos os seguintes componentes j criados: Formulrios:

Clientes.vb Devolucao.vb Entrada.vb FormularioModelo.vb Login.vb Movimento.vb Principal.vb Sobre.vb

Banco de dados:

Classes

Locadora.mdf

Util (irei falar dela logo abaixo)

Recursos

As imagens usadas no menu

Vou continuar falando da implementao do formulrio Login.vb e do formulrio Acesso.vb onde iremos fazer o acesso ao banco de dados na tabela Usuarios e usar o recurso de gerar um Hash de um texto.

Parte 3

- 23 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

1. Continuando o desenvolvimento do nosso projeto Locadora de Filmes no Visual

Basic 2005 Express Edition este artigo ir continuar a mostrar a implementao da interface do usurio.

Neste artigo vou mostrar como implementar os formulrios Login.vb e Acesso.vb.

Implementando o formulrio de Login


Como j vimos no artigo anterior o formulrio de login - Login.vb - foi criado a partir de um modelo j existente no VB 2005.
O formulrio login.vb permite efetuar uma validao do usurio com nome e senha. Vamos implementar o recurso criando uma tabela chamada Usuarios com os campos: nomeUsuario e SenhaId. A senha ser armazenada na forma de um Hash que iremos gerar usando uma classe. Inclumos um controle CheckBox para permitir que o nome do usurio seja armazenado na aplicao.

O cdigo do evento Click do boto OK para este formulrio exibido abaixo:


Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click Dim conn As New SqlConnection Dim comando As New SqlCommand Dim senhaID As String conn.ConnectionString = My.Settings.LocadoraConnectionString Try conn.Open() comando.Connection = conn comando.CommandText = "SELECT senhaID FROM usuarios Where nomeUsuario=@nomeUsuario" comando.Parameters.AddWithValue("@nomeUsuario", UsernameTextBox.Text) senhaID = comando.ExecuteScalar conn.Close() If chkLembraUsuario.Checked Then

- 24 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

My.Settings.Usuario = UsernameTextBox.Text My.Settings.Save() Else My.Settings.Usuario = "" End If If util.GeraHash(PasswordTextBox.Text).Equals(senhaID) Then My.Forms.Principal.Show() Me.Hide() Else MessageBox.Show("Senha/Usurio Incorreto(s)", "Senha incorreta", MessageBoxButtons.OK, MessageBoxIcon.Information) PasswordTextBox.Focus() End If Catch ex As SqlException MessageBox.Show("Erro ao efetuar a conexo com a base de dados : " + ex.Message) conn.Dispose() End Try End Sub

Explicando o cdigo: A linha de cdigo:


conn.ConnectionString = My.Settings.LocadoraConnectionString

permite a recuperao da string de conexo usando o recurso My.Settings Aps abrir a conexo criamos um comando com a instruo SQL que ir selecionar a senha da tabela usuarios onde o nome do usurio passado como parmetro conforme o cdigo abaixo:
comando.Connection = conn comando.CommandText = "SELECT senhaID FROM usuarios Where nomeUsuario=@nomeUsuario" comando.Parameters.AddWithValue("@nomeUsuario", UsernameTextBox.Text)

A seguir obtemos o valor da Senha atravs da execuo do mtodo ExecuteScalar


O objeto Command fornece o mtodo ExecuteScalar que permite retornar um valor nico de uma fonte de dados. Este mtodo executa uma consulta e retorna a primeira coluna da primeira linha do conjunto de registros retornado O mtodo ExecuteScalar o meio mais rpido de se acessar e retornar dados em um base de dados. senhaID = comando.ExecuteScalar Verificamos se o checkbox esta marcado; neste caso salvamos o nome do usurio nas configuraes da aplicao. If chkLembraUsuario.Checked Then

- 25 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

My.Settings.Usuario = UsernameTextBox.Text My.Settings.Save() Else My.Settings.Usuario = "" End If A seguir o mtodo GeraHash da classe util usado para gerar o hash da senha informada para comparar com o hash armazenado no banco de dados.(isto ser feito via formulrio acesso.vb). If util.GeraHash(PasswordTextBox.Text).Equals(senhaID) Then My.Forms.Principal.Show() Me.Hide() Else MessageBox.Show("Senha/Usurio Incorreto(s)", "Senha incorreta", MessageBoxButtons.OK, MessageBoxIcon.Information) PasswordTextBox.Focus() End If

Nota: O recurso My usado em My.Forms.Principal.Show() permite exibir o formulrio de forma rpida e direta. Para implementar A classe util e seu mtodo GeraHash inclua um novo mdulo de classe no projeto. Menu Project opo Add Class inclua o mdulo dando ao mesmo o nome util.vb. A seguir inclua o cdigo abaixo na classe:
Imports System.Security.Cryptography Imports System.text Public Class util Public Shared Function GeraHash(ByVal texto As String) As String 'Cria um objeto enconding para assegurar o padro 'de encondig para o texto origem Dim Ue As New UnicodeEncoding() 'Retorna um byte array baseado no texto origem Dim ByteSourceText() As Byte = Ue.GetBytes(texto) 'Instancia um objeto MD5 Dim Md5 As New MD5CryptoServiceProvider() 'Calcula o valor do hash para o texto origem Dim ByteHash() As Byte = Md5.ComputeHash(ByteSourceText) 'Converte o valor obtido para o formato string Return Convert.ToBase64String(ByteHash) End Function End Class

Implementando o formulrio de Acesso

- 26 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

O formulrio acesso permite o cadastramento de usurios e senhas na base de dados Acesso.mdb , tabela Usuarios. So armazenados o nome do usurio e o hash da senha informada.
Os demais componentes do formulrio so:

TextBox : txtUsuario, TxtSenha e TxtSenha2 Button : btnRegistrar e btnCancelar

O cdigo do evento Click do boto Registrar mostrado a seguir:


Private Sub btnRegistrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegistrar.Click Dim conn As New SqlConnection Dim comando As New SqlCommand Dim reg As Integer conn.ConnectionString = My.Settings.LocadoraConnectionString If txtUsuario.Text = "" Then MessageBox.Show("Informe um valor vlido.") txtUsuario.Focus() Exit Sub End If If txtsenha.Text = "" Then MessageBox.Show("Informe um valor vlido.") txtsenha.Focus() Exit Sub End If If Not txtsenha.Text.Equals(txtSenha2.Text) Then MessageBox.Show("A senha no confere.") txtSenha2.Focus() Exit Sub End If Try conn.Open() comando.Connection = conn comando.CommandText = "INSERT INTO Usuarios(nomeUsuario,senhaID) values(@Usuario,@senha)" comando.Parameters.AddWithValue("@Usuario", txtUsuario.Text) comando.Parameters.AddWithValue("@senha", util.GeraHash(txtsenha.Text)) reg = comando.ExecuteNonQuery()

- 27 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

MessageBox.Show(reg.ToString + " registro de Usurio incluido com sucesso.") Catch ex As SqlException MessageBox.Show("Erro ao efetuar a conexo com a base de dados : " + ex.Message) Finally conn.Close() conn.Dispose() End Try End Sub

Neste cdigo estamos incluindo, via instruo SQL INSERT INTO, o nome do usurio e a senha informada na tabela usuarios. Os parmetros so montados com os dados das caixas de texto, e, o mtodo GeraHash() usado para gerar o hash do texto da senha informado.
conn.Open() comando.Connection = conn comando.CommandText = "INSERT INTO Usuarios(nomeUsuario,senhaID) values(@Usuario,@senha)" comando.Parameters.AddWithValue("@Usuario", txtUsuario.Text) comando.Parameters.AddWithValue("@senha", util.GeraHash(txtsenha.Text))

O mtodo executeNonQuery() usado para executar a consulta ao. Este mtodo usado para executar um comando SQL que no retorna registros. reg = comando.ExecuteNonQuery() Nossa aplicao j possui uma forma de cadastrar os seus usurios via formulrio acesso.vb e de permitir a validao dos mesmos para acesso a aplicao via formulrio login.vb. Nota: Para permitir que a mudana de um campo para outro do formulrio seja possvel com o pressionamento da tecla ENTER altere a propriedade KeyPreview do formulrio para True e inclua o seguinte trecho de cdigo Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress If e.KeyChar = Convert.ToChar(13) Then e.Handled = True SendKeys.Send("{TAB}") End If End Sub

- 28 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Parte 4

1. Continuando o desenvolvimento do nosso projeto Locadora de Filmes no Visual


Basic 2005 Express Edition este artigo ir continuar a mostrar a implementao da interface do usurio. Neste artigo vou mostrar como implementar a interface com o usurio atravs dos formulrios com a seguintes funcionalidades:

1. Cadastrar clientes - Clientes.vb


2. Cadastrar Filmes - Filmes.vb 3. Cadastrar Categorias - Categorias.vb 4. Registrar Locao de Filmes - Movimento.vb.

Implementando o formulrio para cadastrar Clientes : Clientes.vb


Apenas para voc lembrar: j criamos o dataset ClienteDS que representa a tabela Clientes(criada no primeiro artigo) e j criamos o formulrio Clientes.vb que herda do formulrio FormularioModelo.vb. Para implementar o formulrio para cadastrar clientes vou usar o recurso do assistente do VB2005. Acompanhe:

1- Na janela DataSource, expanda o DataSet ClienteDS e a seguir selecione a tabela Cliente 2- Altere a opo de exibio para Details conforme figura ao lado

3- A segui abra o formulrio Clientes.vb e arraste a tabela Clientes da janela DataSource para o formulrio. Aps os ajustes de tamanho nos campos voc dever obter o formulrio conforme a figura a seguir:

- 29 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Note que o tipo do campo Nascimento usa um controle DateTimePicker. Pronto ! acabamos de implementar o formulrio de cadastramento de clientes usando os novos recursos do VB2005.

Implementando o formulrio para cadastrar Filmes : Filmes.vb


A implementao deste formulrio idntico ao formulrio para cadastrar Clientes. 1- Crie o formulrio Filmes.vb incluindo um novo formulrio no projeto (Add -> New Item) e a seguir , conforme j explicado no segundo artigo , use a identidade visual herdada do formulrio modelo FormularioModelo.vb. 2- Na janela DataSource, expanda o DataSet FilmesDS e a seguir selecione a tabela Filmes 2- Altere a opo de exibio para Details 3- Abra o formulrio Filmes.vb e arraste a tabela Filmes para o formulrio. Aps alguns ajustes voc dever obter o resultado exibido na figura abaixo:

- 30 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Implementando o formulrio para cadastrar Categorias : Categorias.vb


Tendo sempre em mente que a aplicao Locadora de Filmes, objeto desta srie de artigos, tem o propsito de mostrar os novos recursos do VB2005 para desenvolver aplicaes Windows Forms, estou fazendo muitas simplificaes e adotando algumas estratgias com objetivo didtico que no seriam usadas em um aplicao real de produo. Vamos criar uma tabela chamada Categorias que ir armazenar os dados das categorias dos filmes.(Veja como fazer isto no primeiro artigo desta srie). A tabela dever possuir os seguintes campos e propriedades:

- 31 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Campos da tabela Categorias: 1. Cdigo 2. Descrio da Categoria

3.

Estado (ativo/inativo)

Agora inclua um novo formulrio chamado Categorias.vb no seu projeto herdando do formulrio base FormularioModelo.vb. O prximo passo criar um novo Data Source para a tabela Categorias recm criada. Clique com o boto direito do mouse na janela Data Sources e selecione Create new Data Source. Na prxima janela selecione DataBase e clique em Next>. Aceite a conexo que j foi criada e clique em Next> . Selecione a tabela Categorias e informe o nome CategoriasDS clicando a seguir em Finish. Se voc seguiu as orientaes ter a seguinte viso do seu projeto:

- 32 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Vamos alterar o modo de viso do Data Source CategoriasDS para Details e arrastlo para o formulrio Categorias.vb. Quando fazemos esta operao o Assistente, alm de criar os campos no formulrio e incluir os objetos : CategoriaBindingSource, CategoriaTableAdpater e CategoriasBindingNavigator, cria tambm uma barra de navegao que permite, alm da navegao pelos registros, realizar as operaes CRUD (read, update e delete) na fonte de dados. No vamos usar esta barra de navegao, vamos exclu-la do formulrio de forma a ficar com o seguinte layout:

Se olharmos, neste momento, o cdigo do formulrio iremos ver:


Public Class Categorias Private Sub CategoriaBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Me.Validate() Me.CategoriaBindingSource.EndEdit() Me.CategoriaTableAdapter.Update(Me.CategoriasDS.Categoria) End Sub Private Sub Categorias_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'TODO: This line of code loads data into the 'CategoriasDS.Categoria' table. You can move, or remove it, as needed. Me.CategoriaTableAdapter.Fill(Me.CategoriasDS.Categoria) End Sub End Class

- 33 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Acima temos o cdigo do boto Salvar da barra de Navegao e o cdigo que carrega todos as categorias na carga do formulrio. Vamos excluir todo este cdigo do formulrio e incluir dois botes de comando : Criar e Cancelar, conforme abaixo:

No evento Load do formulrio inclua o seguinte cdigo:


Private Sub Categorias_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.CategoriaBindingSource.AddNew() End Sub

Este cdigo inclui um novo registro no Data Source. No evento Click do boto Criar insira o cdigo abaixo:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Me.Validate() Then Me.CategoriaBindingSource.EndEdit() Me.CategoriaTableAdapter.Update(Me.CategoriasDS.Categoria) Else System.Windows.Forms.MessageBox.Show(Me, "Erro") End If Me.Close() End Sub

Este cdigo atualiza a tabela Categorias incluindo os dados digitados.

- 34 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Como o campo Codigo da tabela Categorias Identity com incremento automtico de 1 em 1 iremos desabilitar este campo no formulrio definindo para controle TextBox - CodigoTextBox a propriedade Enabled=False e TabStop=False. Alm disto vamos validar o campo descrio no permitindo que o mesmo esteja vazio. Para isto inclua o seguinte cdigo no evento Validating do TextBox:
Private Sub DescricaoTextBox_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles DescricaoTextBox.Validating If Me.DescricaoTextBox.Text.Length = 0 Then e.Cancel = True ErrorProvider1.SetError(DescricaoTextBox, "Informe a descrio da categoria.") Else ErrorProvider1.SetError(DescricaoTextBox, Nothing) End If End Sub

Para que o cdigo acima funcione corretamente voc deve incluir um controle ErrorProvider no seu formulrio. Podemos querer exibir em um Grid todas as categorias cadastradas, para isto vamos criar um formulrio chamado TodasCategorias.vb , e, arrastar o data source CategoriasDS no formato GridView para o formulrio. O resultado ser o exibido na figura abaixo:

Teremos que fazer um ajuste no menu permitindo duas opes para Categorias: Incluir Nova Categoria e Exibir Categorias.

- 35 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

No esquea de incluir o cdigo abaixo para exibir os formulrios a partir da seleo do usurio via Menu:
Private Sub IncluirNovaCategoriaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IncluirNovaCategoriaToolStripMenuItem.Click My.Forms.Categorias.MdiParent = Me My.Forms.Categorias.Show() End Sub

Private Sub ExibirCategoriasToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExibirCategoriasToolStripMenuItem.Click My.Forms.TodasCategorias.MdiParent = Me My.Forms.TodasCategorias.Show() End Sub

Implementando o formulrio para registrar as locaes : Movimento.vb


A implementao do formulrio de locao deve registrar as locaes efetuadas pelos clientes. No nosso caso o processo de locao funciona da seguinte forma: 1. O cliente escolha o filme que deseja do acervo e se dirige ao funcionrio 2. O funcionrio acessa o sistema e informa o cdigo do filme escolhido e o cdigo do cliente que esta efetuando a locao 3. Como geralmente o cliente no memoriza o seu cdigo devemos implementar uma alternativa para selecionar o cliente pelo nome Vamos recordar a estrutura da tabela Movimento para ver os dados que devemos registrar:

- 36 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

- O campo CodigoLocacao um campo autonumerado (Identity) e por este motivo no iremos gravar nada neste campo visto que seu valor incrementado automaticamente Devemos registrar valores nos seguintes campos:

CodigoCliente - este dado vir da tabela Clientes CodigoFilme - o valor vir da tabela Filmes Locacao - a data de locao (a data atual do sistema)

- Os campos Devolucao e Valor sero preenchidos quando da devoluo do filme pelo cliente (por este motivo aceitam valores Nulls, pois no iremos gravar nada na locao nestes campos)

Abra o formulrio Movimento.vb e inclua dois controles Labels , dois controles TextBox e quatro botes de comando(Button) conforme a figura abaixo:

O que pretendendo aqui que quando o for efetuar a locao o funcionrio ir informar o cdigo do filme e o cdigo do cliente. Se por algum motivo estes dados no estiverem disponveis implementamos uma busca nas tabelas Filmes e Clientes que nos retornaro estes valores. Para implementar este recurso deveremos criar dois novos formulrios : SelecionaFilme.vb e SelecionaCliente.vb que atuaro basicamente de forma idntica : iro exibir uma caixa de texto, onde o usurio informar o nome do filme ou do cliente, um boto selecionar que dever extrair os dados da respectiva tabela, e

- 37 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

exibir o resultado da consulta em um DataGridview. A seguir os passos para implementar o recurso para o formulrio SelecionaFilme.vb.

1. Inclua um novo formulrio chamado SelecioneFilme.vb na sua aplicao


herdando a identidade visual do formulrio FormularioModelo.vb DataGridView, conforme abaixo:

2. Inclua no formulrio os seguintes controles : Label, TextBox , Button e

3. Quando da incluso do DataGridView , usando as Smart Tags , selecione o Data


Source - FilmesDS - conforme a figura abaixo

- 38 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

4. Como queremos exibir somente o filme correspondente ao nome informado 5. 6.


pelo funcionrio devemos incluir um filtro na nossa fonte de dados - Data Source - FilmesDS. Na guia Data Source , selecione FilmesDS e clique com o boto direito selecionando - Edit Data Set with Designer A seguir selecione o Data Set Filmes e clique com o boto direito do mouse selecionando Add -> Query

7. Na janela - TableAdapter Configuration Wizard - vamos usar uma instruo


SQL Select , por isto clique no boto Next> boto Next > novamente

8. Como vamos obter linhas de retorno, aceite a seleo do wizard e clique no

- 39 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

9. Na janela a seguir vamos montar a nossa consulta , por isto clique no 10.

boto - Query Builder. Estando na janela Query Builder selecione o campo titulo e na coluna Filter informe o parmetro : Like @titulo

11. Podemos testar a consulta clicando no boto Execute Query. 12. Clique no boto Ok e a seguir informe o nome da consulta criada:

- 40 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

13. A seguir clique em Next> e finalmente em Finished. Pronto criamos uma


consulta para selecionar o filme pelo ttulo informado. Podemos retornar ao formulrio SelecionaFilme. Ao clicar no boto Seleciona devemos acionar a consulta criada, para isto inclua o seguinte cdigo no evento Click do boto:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.FilmesTableAdapter.FillByTitulo(FilmesDS.Filmes, "%" & TextBox1.Text & "%") End Sub

Obs: Voc deve remover qualquer outro cdigo gerado pelo assistente no formulrio. Neste cdigo eu estou usando do TableAdapter e a consulta FillByTitulo para extrair dados do dataset Filmes segundo o valor informado na caixa de texto TextBox1.Text. (eu sugiro que voc fornea nomes sugestivos aos controles) Devemos ainda configurar algumas propriedades do DataGridView pois no desejamos que o usurio altere o DataGridView ou inclua, exclua ou efetue uma seleo mltipla

- 41 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

no mesmo. Para isto defina como False as seguintes propriedades : MultiSelect , AllowUserAddRows, AllowUserDeleteRows, AllowUserResizeRows e AllowUserResizeColumns. Vamos definir a propriedade SelecionMode como FullRowSelect para selecionar a linha por inteiro. Quando o usurio clicar na clula que exibe os dados do ttulo procurado devemos capturar a seleo e os dados do filme escolhido. Fazemos isto tratando o evento Click do boto Aceitar. Abaixo temos o cdigo que deve ser includo neste evento:
Private Sub btnAceita_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceita.Click codigoFilme = Me.FilmesDS.Filmes(FilmesBindingSource.Position).CodigoFilme Me.Close() End Sub

Aqui definimos a varivel pblica codigoFilme no formulrio e obtemos o cdigo do filme pois este valor que vamos gravar na tabela Movimento. Agora voltemos ao formulrio Movimento.vb , onde tudo comeou. Aps efetuar a busca e selecionar o filme pelo ttulo deveremos obter o cdigo do filme e exibir na caixa de texto - txtCodigoFilme - do formulrio de Locaes - Movimento.vb. Para isto basta acrescentar o cdigo abaixo no evento Click do boto Procurar do formulrio:
Private Sub btnProcuraFilme_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcuraFilme.Click My.Forms.SelecionaFilme.ShowDialog() txtCodigoFilme.Text = My.Forms.SelecionaFilme.codigoFilme End Sub

A primeira linha abre o formulrio para selecionar o filme e a segunda obtm o valor da varivel codigoFilme declarada como Public no formulrio SelecionaFilme. Todo o procedimento acima dever ser repetido para o formulrio SelecionaCliente. Deixo isto como tarefa para voc realizar. O cdigo final do formulrio, antes de efetuar o registro da locao, ser o seguinte:
Public Class Movimento Private Sub btnProcuraFilme_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcuraFilme.Click My.Forms.SelecionaFilme.ShowDialog() txtCodigoFilme.Text = My.Forms.SelecionaFilme.codigoFilme End Sub

- 42 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Private Sub btnProcuraCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcuraCliente.Click My.Forms.SelecionaCliente.ShowDialog() txtCodigoCliente.Text = My.Forms.SelecionaCliente.codigoCliente End Sub End Class

Para efetuar o registro da locao vou criar uma classe que ser responsvel por esta tarefa. Mas isto assunto para o prximo artigo.

- 43 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Parte 5

1. Continuando o desenvolvimento do nosso projeto Locadora de Filmes no Visual


Basic 2005 Express Edition este artigo ir continuar a mostrar a implementao da interface do usurio. Neste artigo vou mostrar como implementar a classe para efetuar o registra da locao dos filmes da locadora de filmes.Lembrando que j foram implementadas as seguintes funcionalidades:

1. Cadastrar clientes - Clientes.vb

2. Cadastrar Filmes - Filmes.vb 3. Cadastrar Categorias - Categorias.vb

Implementando a classe para registrar a locao efetuada no formulrio: Movimento.vb


Apenas para recordar o formulrio Movimento.vb possui o seguinte layout:

A estrutura da tabela Movimento a seguinte:

- 44 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

- O campo CodigoLocacao um campo autonumerado (Identity) e por este motivo no iremos gravar nada neste campo visto que seu valor incrementado automaticamente Devemos registrar valores nos seguintes campos:

CodigoCliente - este dado vir da tabela Clientes CodigoFilme - o valor vir da tabela Filmes Locacao - a data de locao (a data atual do sistema)

- Os campos Devolucao e Valor sero preenchidos quando da devoluo do filme pelo cliente (por este motivo aceitam valores Nulls, pois no iremos gravar nada na locao nestes campos)

Uma primeira pergunta que talvez possa surgir seria: Porque eu no implemento o cdigo de locao no prprio formulrio ? Bem , primeiro porque a locao refere-se a ao negcio da locadora de filmes e por este motivo bom separar a regra de negcio da interface do usurio. Para criar a classe LocaFilmes.vb clique com o boto direito do mouse sobre o nome do projeto e selecione a opo Add e a seguir New Item; informando a seguir o nome do arquivo e clicando no boto Add.

- 45 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

claro que antes de efetuar a locao eu preciso verificar o estoque de filmes para ver se existe o filme disponvel. Se houver terei que diminuir uma unidade , referente a unidade locada e acrescent-la a tabela de locaes efetuadas : Movimento. Antes de entrar no cdigo teremos que criar uma nova consulta relacionada com a tabela Filmes que nos devolva um determinado filme conforme o seu cdigo. Na janela Data Source vamos editar o DataSet FilmeDS e vamos incluir uma nova consulta, conforme j vimos nos artigos anteriores, para filtrar os filmes selecionados pelo cdigo do filme. Usando o Query Builder informamos o parmetro @codigoFilme para montar a instruo SQL conforme abaixo:

Ao salvar a consulta acrescente o sufixo Codigo conforme tela da figura 1.0 abaixo. Na figura 2.0 vemos o DataSet exibindo a nova consulta criada:

- 46 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Figura 1.0 - Nomeando a instruo SQL para selecionar dados Figura 2.0 - O dataset exibindo a consulta criada Vamos precisar criar tambm uma nova consulta de incluso de dados na tabela Movimento usando a instruo SQL INSERT/INTO. Na janela Data Sources clique com o boto direito do mouse sobre o DataSet MovimentoDS e selecione - Edit DataSet with Designer. A seguir clique no dataset com o boto direito e selecione Add e a seguir Query. Usando o Query Builder construa a instruo SQL para inserir uma linha na tabela Movimento , conforme figura abaixo:

- 47 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

A janela - TableAdapter Query Configuration Wizard - dever exibir a instruo INSERT INTO conforme figura abaixo:

- 48 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Clique em Next> e Informe o nome da consulta - InsertQueryMovimentoLocacao - conforme figura 3.0. Na figura 4.0 temos o resultado final onde o dataset j exibe a instruo SQL criada.

Figura 3.0 - Nomeando a consulta criada

Figura 4.0 - O DataSet exibindo a instruo SQL para incluir dados na tabela

Podemos ento partir para o cdigo da classe LocaFilmes.vb:


Public Class LocaFilmes Public Sub alugarFilmes(ByVal codfilme As Integer, ByVal codcliente As

- 49 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Integer, ByVal datalocacao As Date) 'verificando o estoque da locadora 'cria um adatper e um dataset Dim adapterFilmes As New FilmesDSTableAdapters.FilmesTableAdapter Dim filme As New FilmesDS 'filtra os filmes pelo codigo informado usando a consulta SQL criada FillByCodigo adapterFilmes.FillByCodigo(filme.Filmes, codfilme) 'se no encontrou o filme com o codigo informado dispara exceo If filme.Filmes.Count = 0 Then Throw New ArgumentException("No existe o filme informado no acervo.") End If 'se no tem filme no estoque avisa If filme.Filmes(0).Estoque = 0 Then Throw New ArgumentException("No existem unidades cadastradas no acervo.") End If 'se houver filme no estoque tenho que diminuir a unidade locada do estoque filme.Filmes(0).Estoque -= 1 'atualiza o banco de dados adapterFilmes.Update(filme) filme.AcceptChanges() 'registrar a locacao 'cria um adapter e um dataset Dim adapterLocacao As New MovimentoDSTableAdapters.MovimentoTableAdapter Dim movimentoLocacao As New MovimentoDS.MovimentoDataTable 'utiliza a instruo SQL criada para incluir dados na tabela Movimento InsertQueryMovimentoLocacao adapterLocacao.InsertQueryMovimentoLocacao(codcliente, codfilme, datalocacao) adapterLocacao.Update(movimentoLocacao) movimentoLocacao.AcceptChanges() End Sub End Class

No cdigo da classe acima exibido estou realizando as seguintes tarefas: verificando se o filme existe no acervo verificando se existem filmes no estoque atualizando o estoque de filmes atualizando o movimento de locao

Como o cdigo esta comentado vou apenas executar a aplicao e acompanhar de perto o que implementamos para ver se esta tudo funcionando:

- 50 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

- Esta a tela do Menu Principal - Perceba que na opo do Menu Movimento criamos duas opes:

Locao de Filmes para efetuar a locao de filmes Filmes alugados - para exibir os filmes alugados

Nota: Voc dever incluir um novo formulrio chamado FilmesAlugados.vb da mesma forma que fizemos com os demais formulrios e arrastar a tabela Movimento para o formulrio. Aps fazer isto exclua o BindingNavigator que o assistente incluiu no formulrio pois no iremos efetuar manuteno neste formulrio.

Clicando na opo - Locao de Filmes- temos o formulrio onde iremos informar o cdigo do filme e o cdigo do cliente. Lembre que implementamos os formulrio SelecionaFilme.vb e SelecionaCliente.vb para podemos selecionar um cliente pelo nome. Abaixo temos a exibio da tela do formulrio Movimento.vb e de SelecionaFilme.vb aps clicarmos em Procurar:

- 51 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Aps efetuar a seleo do Filme e do Cliente e clicar no boto registra a locao ser efetuada. Podemos ver isto na opo Filmes Alugados:

- 52 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Se consultarmos o estoque de filmes para o filme de cdigo igual a 1 iremos ver que houve uma diminuio de uma unidade do estoque referente a locao efetuada. Quando da devoluo deveremos repor o filme no estoque.

Dica : Sugiro que voc implemente uma transao no cdigo para que se algo der errado durante o processo ele no seja concludo.

- 53 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Parte 6
Neste artigo vou fazer alguns ajustes na interface do usurio j criada, alm de criar mais dois formulrios nos mesmos padres j abordados em artigos anteriores da srie.

Incrementando o formulrio de cadastro de filmes.


Apenas para recordar, o formulrio Filmes.vb possui o seguinte layout:

Vamos incrementar a interface com o usurio do formulrio de cadastro de filmes usando os novos recursos do VB 2005. Como os dados que o usurio deve informar para os campos Genero, Midia e Classificao devem estar pr-cadastrados em suas respectivas tabelas (Com exceo da campo Mdia onde usarei um valor pr-definido) vamos mudar os controles dos campos Genero, Midia e Classificao, do formulrio Filmes.vb, de TextBox para ComboBox e fazer a vinculao com as respectivas tabelas. Alm disto vou passar a exibir o campo status do filme indicando se o mesmo esta disponvel, alugado ou reservado. O novo leiaute dever ficar como na mostrado na figura a seguir:

- 54 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Fig 1.0 : O novo formulrio para cadastro de filmes


O O O O campo campo campo campo genero dever exibir os dados da tabela Categorias Midia dever exibir os valores DVD e Fita VHS Classificao dever exibir os dados da tabela Precos Status dever exibir os dados da tabela Status

Fig 2.0: As tabelas do projeto

A estrutura das novas tabelas Precos e Status mostrada na figura 3.0 abaixo.

Fig 3.0 : Estrutura das tabelas Precos e Status

- 55 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Vejamos como implementar esta funcionalidade no formulrio Filmes.vb:

1- Primeiro remova os campos do formulrio 2- A seguir abra a janela Data Sources; selecione e expanda o DataSet FilmesDS e exiba os campos da tabela Filmes. 2- Selecione o campo que deseja alterar e clique na seta para baixo selecionando a opo ComboBox conforme a figura ao lado, repetindo o processo para os demais campos. 3- Arraste os campos com as novas formataes para o formulrio novamente.

O prximo passo definir o preenchimento da combobox no formulrio; para isto vamos usar o assistente da Smart Tag do controle:

- 56 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

- Selecione o controle e clique


na pequena seta superior direita - Marque a opo : Use data bound items 1- Informe o Data Source , no nosso caso CategoriaBindingSource 2- Informe o que deseja exibir no campo. No nosso caso vamos querer exibir o nome do Genero. 3- Informe o valor do SelectedItem 4- Deixe o ltimo campo como None Repita o procedimento para os campos Classificao e

Status.

No campo Midia no marque a opo - data bound items. Clique em Edit Items e informe os valores na janela - String Collection Editor.

- 57 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Voc percebeu que a medida que voc vai vinculando os controles, as respectivas instncias de cada DataSet so incorporadas na base do formulrio. O resultado obtido exibido na figura abaixo. Alm de facilitarmos a vida do usurio estamos evitando que ocorra um erro na informao manual que anteriormente deveria ser feita via digitao pelo usurio. Tudo isto sem digitar uma nica linha de cdigo.

- 58 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Foram criados tambm os formulrio Status.vb e Precos.vb para permitir o cadastramento dos valores usados na locadora. Ambos herdam a aparncia do nosso formulrio modelo e foram criados como mostrado em artigo anterior. Abaixo temos a figura destes formulrios:

- 59 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Outro ajuste feito foi incorporar ao menu principal - Principal.vb - as novas opes conforme abaixo:

- 60 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Parte 7

Implementando a classe para registrar a devoluo de um filme


A lgica para efetuar a devoluo de um filme alugado vai estar na classe DevolucaoFilmes presente no arquivo DevolucaoFilmes.vb. As tarefas que devero ser efetuadas na devoluo de um filme so: Verificar se o filme indicado existe no estoque da locadora Aumentar uma unidade referente ao filme que esta sendo devolvido ao estoque da locadora Calcular o valor devido pela locao do filme Registrar a devoluo gravando a data de devoluo e o valor devido na tabela Movimento

Tudo comea quando o cliente apresenta o filme para devoluo. O funcionrio acessa o sistema e exibe o formulrio de devoluo de filmes: devoluo.vb mostrado abaixo:

- O funcionrio informe o cdigo do cliente ou efetua a busca acionando o boto procurar. - Aps selecionar o cliente, o DataGridView preenchido com a relao dos filmes que o cliente possui alugados. - O funcionrio seleciona um ou todos os filmes e efetua o registro da devoluo.

O evento Click do boto procurar possui o seguinte cdigo:


Private Sub btnProcuraCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcuraCliente.Click My.Forms.SelecionaCliente.ShowDialog() txtCodigoCliente.Text = My.Forms.SelecionaCliente.codigoCliente lblNomeCliente.Text = My.Forms.SelecionaCliente.nomeCliente Me.MovimentoTableAdapter.FillByCodigoClienteEdevolucaoNull(MovimentoDS.Movimento,

- 61 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

CType(txtCodigoCliente.Text, Integer)) End Sub

O formulrio SelecionaCliente exibido e nele o funcionrio informa o nome do cliente para efetuar a seleo. A seguir o cdigo do cliente exibido na caixa de texto - txtCodigoCliente- e o seu nome no controle Label - lblNomeCliente. O DataGridView ento preenchido pela consulta previamente includa no TableAdapter MovimentoDS chamada FillByCodigoClienteDevoluoNull que possui a seguinte estrutura:
SELECT CodigoLocacao, CodigoCliente, CodigoFilme, Locacao, Devolucao, Valor FROM Movimento WHERE (CodigoCliente = @codigoCliente) AND (Devolucao IS NULL)

A consulta ir exibir os dados da tabela Movimento cujo campo CodigoCliente igual ao cdigo do cliente foi selecionado e cujo campo Devolucao Null. A seguir o funcionrio seleciona o filme que objeto da devoluo e clica no boto Registra Devoluo - cujo cdigo do evento Click exibido a seguir:
Private Sub btnDevolucao_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDevolucao.Click Dim fila As DataGridViewRow Dim selecao As MovimentoDS.MovimentoRow Dim registraDevolucao As New DevolucaoFilmes For Each fila In MovimentoDataGridView.SelectedRows selecao = MovimentoDS.Movimento(fila.Index) registraDevolucao.calcula(selecao.CodigoFilme, selecao.Locacao, Now) registraDevolucao.devolveFilme(selecao.CodigoFilme, selecao.Locacao, Now, registraDevolucao.valorLocacao) Next Me.Validate() Me.MovimentoBindingSource.EndEdit() MsgBox("Devoluo registrada com sucesso...", MsgBoxStyle.Information) Me.MovimentoTableAdapter.Update(MovimentoDS.Movimento) End Sub

Aps declarar uma varivel do tipo DataGridView e outra do tipo MovimentoRow estamos instanciando um objeto da classe DevolucaoFilmes: Dim fila As DataGridViewRow Dim selecao As MovimentoDS.MovimentoRow

- 62 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Dim registraDevolucao As New DevolucaoFilmes A seguir para cada linha do DataGridView selecionada estamos invocando os seguintes mtodos da classe DevolucaoFilmes:

1. registraDevolucao.calcula(selecao.CodigoFilme, selecao.Locacao, Now) - O


mtodo calcula utiliza os parmetros : CodigoFilme, a data de locao (selecao.Locacao) e a data atual (Now) que representa a data da devoluo do filme. registraDevolucao.devolveFilme(selecao.CodigoFilme, selecao.Locacao, Now, registraDevolucao.valorLocacao) : O mtodo devolveFilme usa os parmetros : CodigoFilme, data de locao (selecao.Locacao) , a data atual (Now) e o valor da locao calculada (registraDevolucao.valorLocacao)

2.

Estes mtodos esto implementados na classe DevolucaoFilmes que voc deve incluir no projeto clicando com o boto direito do mouse sobre o nome do projeto e seleciona a opo Add->New Item , e a seguir selecionar o template Class informando o nome da classe. A seguir temos o cdigo da classe DevolucaoFilmes contendo os dois mtodos : calcula e devolveFilme e a propriedade valorLocacao pela qual podemos obter o valor calculado da locao.
Public Class DevolucaoFilmes 'varivel de classe valor_ Private Shared valor_ As Double Public Sub devolveFilme(ByVal codfilme As Integer, ByVal datalocacao As Date, ByVal dataDevolucao As Date, ByVal valor As Double) Dim codLocacao As Integer ''cria um adatper e um dataset Dim adapterMovimento As New MovimentoDSTableAdapters.MovimentoTableAdapter Dim movimento As New MovimentoDS ''filtra os filmes pelo codigo informado adapterMovimento.FillByCodigoFilme(movimento.Movimento, codfilme) codLocacao = movimento.Movimento(0).CodigoLocacao 'registrar a devolucao do filme 'cria um adapter e um dataset Dim adapterDevolucao As New MovimentoDSTableAdapters.MovimentoTableAdapter Dim movimentoDevolucao As New MovimentoDS.MovimentoDataTable 'atualiza a tabela movimento incluindo a data de devoluo e o valor a ser pago adapterDevolucao.UpdateQueryDevolucao(dataDevolucao, valor, codLocacao) adapterDevolucao.Update(movimentoDevolucao) End Sub Mtodo calcula Public Sub calcula(ByVal codfilme As Integer, ByVal datalocacao As Date, ByVal datadevolucao As Date)

- 63 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Dim classificacao As String Dim valor As Double 'verificando o estoque da locadora 'cria um adatper e um dataset Dim adapterFilmes As New FilmesDSTableAdapters.FilmesTableAdapter Dim filme As New FilmesDS 'filtra os filmes pelo codigo informado adapterFilmes.FillByCodigo(filme.Filmes, codfilme) 'se no encontrou o filme com o codigo informado avisa If filme.Filmes.Count = 0 Then Throw New ArgumentException("No existe o filme informado no acervo.") End If 'se no tem filme no estoque avisa If filme.Filmes(0).Estoque = 0 Then Throw New ArgumentException("No existem unidades cadastradas no acervo.") End If 'se houver filme no estoque tenho que aumentar uma unidade que esta sendo devolvida filme.Filmes(0).Estoque += 1 filme.Filmes(0).Status = "Disponvel" ' atualiza o status para codigo 1 - Disponivel classificacao = filme.Filmes(0).Classificacao ' ----verifica o preco do filme para calcular o valor Dim adapterPrecos As New PrecosDSTableAdapters.PrecosTableAdapter Dim preco As New PrecosDS adapterPrecos.FillByClassificacao(preco.Precos, classificacao) valor = preco.Precos(0).Valor Dim dias As Integer = DateDiff("d", datalocacao, datadevolucao) Dim precoPagar As Double = dias * valor valor_ = precoPagar End Sub Propriedade valorLocacao Public Property valorLocacao() As Double Get Return valor_ End Get Set(ByVal valor As Double) valor_ = valor End Set End Property End Class

Perceba que no mtodo calcula estamos incrementando uma unidade, referente ao filme devolvido, ao estoque e alterando o status do filme para "Disponvel": 'se houver filme no estoque tenho que aumentar uma unidade que esta sendo devolvida filme.Filmes(0).Estoque += 1 filme.Filmes(0).Status = "Disponvel" ' atualiza o status para codigo 1 - Disponivel

- 64 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Abaixo temos a janela exibida pela execuo do formulrio devolucao.vb:

Aps efetuar o registro da devoluo podemos verificar os valores atualizados na tabela movimento na opo Movimento-> Filmes Alugados do menu principal:

E com isto fechamos o ciclo desta aplicao de exemplo onde o objetivo foi mostrar alguns dos novos recursos do ADO.NET 2.0 e como voc pode criar uma aplicao Windows Forms de forma rpida usando os novos assistentes para auxili-lo em tarefas que antes exigiriam muito cdigo. No pode ser considerada uma aplicao de produo pois no me preocupei com os requisitos fundamentais que uma locadora real deveria possuir para estar funcionando. Alis, quero chamar a ateno para o fato de que o levantamento dos requisitos uma das fases cruciais e que geralmente determinam o sucesso ou o fracasso de um projeto de software. Nossa aplicao no resistiria a uma crtica a comear pela modelagem de dados. No entanto ela serviu aos meus propsitos que foi poder mostrar o desenvolvimento de uma aplicao windows com alguns recursos no Visual Basic 2005 Express.

- 65 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Parte 8

Instalao da aplicao
A parte final do nosso projeto Locadora de Filmes no Visual Basic 2005 Express Edition justamente montar o pacote de instalao da aplicao. Vamos criar o pacote de instalao usando o Inno Setup, pois um software free e de grande versatilidade e facilidade de utilizao. Se voc no possui o Inno Setup pegue a ltima verso no stio : www.innosetup.com. (A ltima verso estvel era a 5.17) Se voc deseja distribuir a NET framework 2.0 junto com sua instalao vai precisar do arquivo NET framework 2.0 redistributable package que pode ser baixado do stio: http://www.microsoft.com/downloads/details.aspx?FamilyID=9655156b-356b4a2c-857c-e62f50ae9a55&DisplayLang=pt-br (So 22 MB) Antes de iniciar o processo de gerar o pacote de instalao voc precisa localizar a pasta onde sua aplicao foi gerada e criar nela uma pasta chamada Install e outra pasta chamada support subordinada a pasta Install. A seguir copie o arquivo dotnetfx.exe para a pasta support. Para encerrar crie uma pasta chamada OutPut na pasta Support. Obs:O arquivo dotnetfx.exe a NET framework 2.0 redistributable package (22 MB) No esquea de compilar o seu projeto e deix-lo pronto para a instalao. Menu Build - Build seu_projeto.

- 66 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Nota: Se voc esta chegando agora recomendo acompanhe o desenvolvimento da aplicao nos artigos :

1. 2. 3. 4. 5. 6. 7.

VB.NET VB.NET VB.NET VB.NET VB.NET VB.NET VB.NET

2005 2005 2005 2005 2005 2005 2005

Criando Criando Criando Criando Criando Criando Criando

uma uma uma uma uma uma uma

aplicao aplicao aplicao aplicao aplicao aplicao aplicao

completa completa completa completa completa completa completa

: : : : : : :

Locadora Locadora Locadora Locadora Locadora Locadora Locadora

de de de de de de de

Filmes Filmes Filmes Filmes Filmes Filmes Filmes

I II III IV V VI VII

Criando o pacote de instalao usando o Inno Setup


Inicie o Inno Setup e na tela inicial marque a opo - Create a new script using the Script Wizard e clique no boto OK. A seguir, na tela de apresentao do Wizard, deixe a opo - Create a new script file - desmarcada e clique no boto Next>.

A prxima janela de dilogo do assistente solicita algumas informaes bsicas sobre a aplicao:

- 67 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Fornea as informaes necessrias e clique no boto Next>. A prxima janela solicita informaes sobre o local de instalao da aplicao.

- 68 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Geralmente a instalao feita na pasta - Program Files Directory . Informe o nome da pasta e clique no boto Next>. A prxima janela define os arquivos da aplicao:

Selecione o executvel, clicando no boto Browse. Geralmente o arquivo principal executvel fica na pasta bin\release da sua aplicao. A seguir use o boto Add File(s) para incluir o arquivo .config para sua aplicao. Clique no boto Next> Aps definir os arquivos de instalao na prxima janela vamos criar definir o nome inicial e alguns cones para aplicao.

- 69 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

A seguir ser apresentada a tela onde voc pode definir um arquivo de licenciamento para a aplicao. Se voc definir um arquivo de licena o usurio no poder prosseguir com a instalao sem concordar com o contedo do arquivo. A nossa aplicao no possui este arquivo clique em Next>

- 70 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Na prxima janela defina as linguagens para as quais estaro disponveis durante o setup da aplicao.

- 71 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

A ltima janela defina a pasta base de destino da compilao, selecione a pasta OutPut que foi criada no interior da pasta Support.

Clique no boto Next> e a seguir no boto Finish. Na tela final do assistente do Inno Setup ser apresentado o arquivo de Script semelhante ao da figura abaixo:

- 72 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Este o script que esta preparado para realizar uma instalao bsica na mquina de destino. Selecione a opo Save no menu File do Inno Setup e salve o script na pasta Install do projeto. Podemos dar suporte a incluso da .NET Framework na instalao da aplicao. O arquivo dotnetfx.exe que foi baixado e copiado para a pasta Support precisa ser includo no instalador para poder rodar como parte do processo. Isto vai aumentar o tamanho do arquivo de instalao pois o dotnetfx.exe possui 22 MB de tamanho, mas com isto estamos assegurando que se a mquina de destino no possuir o .NET Framework 2.0 instalado o instalador o ir instalar. Para fazer isto precisamos instruir o Inno Setup para incluir o arquivo dotnetfx.exe no instalador pois queremos ter este arquivo disponvel na instalao como um arquivo temporrio que ser deletado no final da instalao. Os arquivos que fazem parte da instalao esto na seo [Files} do script. Ns definimos a fonte e o destino para cada arquivo usando chaves especiais que indicam o comportamento do arquivo. No nosso caso a fonte ser a pasta support/dotnetfx.exe e o destino ser uma pasta especial chamada {tmp} que mapeia para o diretrio temporrio na mquina de destino. Inclua ento a seguinte linha na seo [Files] do arquivo de script:

- 73 -

LOCADORA DE FILMES - VB.NET 2005 - JOS CARLOS MACORATTI

Source: support\dotnetfx.exe; DestDir: {tmp}; Flags: deleteafterinstall


Para completar o processo precisamos incluir uma chamada para o script de instalao para executar o arquivo antes que a instalao se complete. Inclua na seo [Run] do arquivo de script os seguintes parmetros e mensagem que ser exibida :

Filename: {tmp}\dotnetfx.exe; Parameters: /q; WorkingDir: {tmp}; StatusMsg: Instalando DotNET Framework 2.0
O parmetro /q indica que a instalao ser silenciosa e a mensagem ser : Instalando o DotNet Framwork 2.0 Agora que tudo esta pronto podemos proceder a compilao do script que ir gerar o arquivo de Setup na pasta Output. No Menu Build do Inno Setup clique na opo Compile. Agora s testar a instalao da sua aplicao. Com isto terminamos o ciclo de desenvolvimento e instalao de uma aplicao completa no Visual Basic 2005 Express Edition.

- 74 -