Beruflich Dokumente
Kultur Dokumente
1. 2. 3. 4. 5. 6.
Criar o banco de dados e a tabela; Definir a interface com o usurio; Definir a conexo com o banco de dados; Definir a carga dos dado s; Definir a navegao pelos registros; Definir as operaes de manuteno de dados;
Vou criar uma pequena aplicao para cadastrar alunos usando o banco de dados Microsoft Access. O banco de dados Alunos.mdb ir conter uma tabela chamada Alunos que tem a seguinte estrutura:
Obs: Eu escolhi criar uma estrutura bem simples para no complicar o tutorial. Alm disso , nesta primeira etapa eu no vou u tilizar camadas pois tutorial para iniciantes.
Criar banco de dados via Cdigo - Access , SQL Server Criando banco de dados e tabelas com o Access Tabelas: Trabalhando com tabelas
Nota:No VB5/VB6 tambm podamos criar banco de dados Access usando o VISDATA como Add-In no IDE do VB. Lembra ? Para lembrar leia o artigo :
y y SQL revisitado- Conceitos bsicos sobre SQL com exemplos prticos no Visdata. Criando um Banco de dados com o VisData,
Para saber como criar banco de dados usando o Microsoft Access ou o SQL Server 2000 leia os artigos: y y y Criando banco de dados no SQL Server 2000 Criando banco de dados e tabelas com o Access Criando Banco de Dados e Tabelas.
Para criar via cdigo leia o artigo: Criando seus arquivos - Veja como criar seu banco de dados e suas tabelas no Visual Basic usando o DAO.
Com o banco de dados e a tabela criada j podemos definir a interface com o usurio. Nossa aplicao ter apenas um nico for mulrio chamado Alunos.vbque usar o seguinte leiaute:
Os controles usados neste formulrio so: - Label - Usadas para identificao; - TextBox - Exibe os campos : nome, endereo e nascimento; - RadioButton - Usados como opes para Sexo e Ano; - Button - botes de comando; - PictureBox - Exibir a imagem do aluno;
Agora uma viso mostrando a utilizao do recurso de imprimir um relatrio no modo de visualizao:
Para obter os valores armazenados basta usar o recurso My.Settings da seguinte forma: - DimlocalfotosAsString = My.Settings.Fotos - Dim escola as String = My.Settings.Escola.ToString E a string de conexo com o banco de dados como ser definida. Tudo depende de onde o banco de dados estar localizado. Neste exemplo o banco de dados estar na pasta da aplicao em C:\vbn\Cadastro\ , ento podemos definir a string de conexo da seguinte forma:
Nota: Para saber mais leia meu artigo : VB 2005 - Objeto Application
ImportsSystem.Data ImportsSystem.Data.OleDb
Eles sero usados para acessar as classes e os provedores para acessar o banco de dados Microsoft Access Alunos.mdb. Quando a aplicao for executada o evento Load do formulrio frmCadastroAlunos ser usado para carregar os dados da tabela e preencher os controles do formulrio com os dados. No prximo artigo irei mostrar o cdigo necessrio para efetuar a conexo com o banco de dados , selecionar os dados da tabel a e exibir no formulrio. Veja a continuao do artigo em : VB .NET 2008 - Criando um Cadastro de Alunos - Parte 2
PropertyManager - Usado para fazer a vinculao de controles simples no sendo possvel usar com controles ListBox, ComboBox ou DataGridView; CurrencyManager - Usado para fazer a vinculao de controles simples e complexos que suportam a interface IList co mo : DataView, Array, ArrayList e objetos Collection.
Voc pode conhecer mais sobre cada um dos itens citados lendo os meus artigos:
y y y y y y y
Esta rotina atribui valores aos controles RadioButton usados para definir o Sexo e Ano/Grau que o aluno esta cursando. Note que o cdigo usa dois controles Label: lblSexo e lblGrau, que no so visveis em tempo de execuo, para verificar qual o valor obtido da tabela e exibir a informao no RadioButton equivalente.
PrivateSubExibirFoto() IflblFoto.Text<>""Then Try picItem.Image = Image.FromFile(localfotos&lblFoto.Text) Catch ex As Exception picItem.Image = Nothing MessageBox.Show(ex.Message, "Erro ao carregar Foto.", MessageBoxButtons.OK, MessageBoxIcon.Error) EndTry Else picItem.Image = Nothing EndIf EndSub
O cdigo verifica se a Label: lblFoto esta vazia ( Poderamos ter usado tambm: IflblFoto.TextIsNotString.EmptyThen ) Se for verdadeiro carregamos a imagem no controle picItem, cujo caminho foi definido na varivel localfotos, usando o nome da imagem carregado em lblFoto.text, caso contrrio atribumos um Nothing ao controle. Lembre que ainda estamos executando o cdigo no evento Load e a ltima rotina chamada : definirEstado():
PrivateSubdefinirEstado(ByValAppEstadoAsString) mEstado = AppEstado SelectCaseAppEstado Case"Ver" btnPrimeiro.Enabled = True btnAnterior.Enabled = True btnProximo.Enabled = True btnUltimo.Enabled = True
btnEdita.Enabled = True btnSalva.Enabled = False btnCancela.Enabled = False btnInclui.Enabled = True btnDeletar.Enabled = True btnImprimir.Enabled = True btnSair.Enabled = True txtNome.ReadOnly = True txEndereco.ReadOnly = True dtpNascimento.Enabled = False btnCarregaFoto.Enabled = False grpSexo.Enabled = False grpGrau.Enabled = False Case"Editar", "Incluir" btnPrimeiro.Enabled = False btnAnterior.Enabled = False btnProximo.Enabled = False btnUltimo.Enabled = False btnEdita.Enabled = False btnSalva.Enabled = True btnCancela.Enabled = True btnInclui.Enabled = False btnDeletar.Enabled = False btnImprimir.Enabled = False btnSair.Enabled = False txtNome.ReadOnly = False txEndereco.ReadOnly = False dtpNascimento.Enabled = True btnCarregaFoto.Enabled = True grpSexo.Enabled = True grpGrau.Enabled = True EndSelect txtNome.Focus() EndSub
Neste cdigo verificamos se o estado igual a Ver , para visualizar os dados apenas, ou Editar/Incluir usados para edio e incluso de dados. Conforme o caso as propriedades Enabled e ReadOnly dos controles so alteradas e o foco colocado no controle txtNome. Ao terminar a execuo do cdigo ser apresentado o seguinte formulrio:
PrivateSubbtnUltimo_Click(ByVal sender AsSystem.Object, ByVal e AsSystem.EventArgs) HandlesbtnUltimo.Click AlunosCManager.Position = AlunosCManager.Count - 1 CallExibirDados() EndSub
Em cada um dos botes , quando o usurio clicar, o objeto CurrencyManager - AlunosCManager - ir permitir a navegao pelos registros chamado a rotina ExibirDados para que os controles sejam preenchidos com os dados atualizados. Diferente do objetoRecordset da ADO , a interface IList no mantm o controle sobre o registro atual , no possuindo assim os mtodos MoveFirst, MoveNext , MovePrevious e MoveLast da ADO. Ao invs disso o CurrencyManager usa a propriedade Position para manter o controle sobre os registros; incrementando e decrementando esta propriedade permite a navegao pelos registros da tabela.
Note que os botes de comando para navegao , edio , incluso(Novo) , impresso, deleo e Sair foram desabilitados. Os botes Salvar, Cancelar e Carregar Fotoforam habilitados; O acesso para alterar o Sexo e o Ano foram tambm habilitados; Isso permite a alterao dos dados do formulrio com opo para Salvar o Cancelar a operao.
O cdigo apenas chama a rotina definirEstado() passando o parmetro "Editar" para indicar que estamos no estado de edio dos dados. Abaixo temos um exemplo de tela mostrando a edio sendo realizada com alterao da data de nascimento atravs do controle DateTimePicker - dtpNascimento, e da caixa de dilogo OpenFileDialog - dlgAbrir - exibindo uma relao de imagens:
O cdigo para Salvar os dados associado ao evento Click do boto - Salvar - dado a seguir:
PrivateSubbtnSalva_Click(ByVal sender AsSystem.Object, ByVal e AsSystem.EventArgs) HandlesbtnSalva.Click 'verifica o item Endereo IftxEndereco.Text.Trim = "" Then MessageBox.Show("Informe o endereo.", "Erro Entrada", MessageBoxButtons.OK, MessageBoxIcon.Information) txEndereco.Focus() ExitSub
EndIf DimitemSalvoAsString = txEndereco.Text DimlinhaSalvaAsInteger 'encerra edio do CurrencyManager AlunosCManager.EndCurrentEdit() 'define o modo de exibio ordenado por Nome AlunosTabela.DefaultView.Sort = "Nome" 'obtem o id da linha Salva linhaSalva = AlunosTabela.DefaultView.Find(itemSalvo) 'atribui a posio da linha em edio ao CurrencyManager AlunosCManager.Position = linhaSalva CallExibirDados() CalldefinirEstado("Ver") EndSub
O cdigo verifica se foi informado um valor para o endereo do aluno para prosseguir; em seguida armazena o valor na varivel itemSalvo e encerra a edio do CurrencyManager salvando os dados. Aps definir a ordenao pelo nome procura -se o item salvo atribuindo o seu valor a propriedade Position do CurrencyManager para em seguida exibir os dados e definir o estado como visualizao. O boto Cancelar possui o cdigo abaixo:
PrivateSubbtnCancela_Click(ByVal sender AsSystem.Object, ByVal e AsSystem.EventArgs) HandlesbtnCancela.Click AlunosCManager.CancelCurrentEdit() IfmEstado = "Incluir"Then AlunosCManager.Position = mMarcador EndIf CallExibirDados() CalldefinirEstado("Ver") EndSub
O cdigo usa o mtodo CancelCurrentEdit() para cancelar a edio desfazendo qualquer alterao e verifica se o estado igual a " Incluir" para atribuir o valor da varivel mMarcador a propriedade Position. Esta varivel a iniciada quando o processo de incluso comea , desta forma podemos voltar a exibir os registros na posio anterior ao incio da operao de incluso. O boto Novo usado para incluir um registro da tabela e tem o seguinte cdigo:
PrivateSubbtnInclui_Click(ByVal sender AsSystem.Object, ByVal e AsSystem.EventArgs) HandlesbtnInclui.Click 'define a posicao atual do currencyManager mMarcador = AlunosCManager.Position 'define o estado no modo incluso CalldefinirEstado("Incluir") 'inclui um novo registro no currenymanager AlunosCManager.AddNew() 'define as propriedades rdoMasculino.Checked = True : lblSexo.Text = "M" rdoPrimeiro.Checked = True : lblGrau.Text = "1" picItem.Image = Nothing lblFoto.Text = "" EndSub
Ao iniciar a incluso obtemos a posio atual do CurrencyManager e atribumos a varivel mMarcador. Fazemos isso para poder retornar a posio atual dos registros se a incluso for cancelada. Em seguida definimos o modo como 'Incluir' e inclumos um novo registro no CurrencyManager definindo em seguidas as propriedades padro para Sexo e Ano e Foto. Na ltima parte deste artigo vou mostrar o cdigo dos botes :Imprimir, Deletar, Sair e Carregar Foto.
Lembrando que a aplicao possui somente um formulrio chamado Alunos.vb e que estamos usando o Visual Basic 2008 Express Edition.
Definindo a impresso
A seguir eu vou mostrar o cdigo usado para imprimir os dados , inclusive a foto do cadastro de alunos. Em meu artigo Impresso e Visualizao. O que h de novo ? eu apresento o namespaceSystem.Drawing.Printing e a classe PrintDocument e o componente PrintPreviewDialog. Eles so os pilares da impresso no VB .NET. No artigo Criando um editor de textos no VB .NET eu mostro como voc pode criar um editor de textos com recursos de impresso usando as classes e em meu artigo Imprimindo no VB 2005 a eu volto ao assunto descrevendo o processo usado para imprimir no VB. Ento repetindo o que eu j disse: Para imprimir no VB.NET temos a seqncia que deve ser seguida: 1- Primeiro, voc deve instanciar um objetoPrintDocument 2- A seguir voc tem que criar uma instncia de um objeto PrintDialog e definir a referncia para o objeto PrintDocument:
Dimdoc As PrintDocument = New PrintDocument Dimprinter As PrintDialog = New PrintDialog printer.Document = doc
3- Em seguida voc deve mostrar a caixa de dilogo onde o usurio pode selecionar a impressora e suas propriedades: printer.ShowDialog() 4- Agora voc precisa subscrever o evento PrintDocument.PringPage o qual ser disparado para cada nova pgina: AddHandlerdoc.PrintPage, AddressOfPrintPageHandler 5- Chamar o mtodo Print; 6- Implementar o tratamento de evento para o evento PrintDocument.PrintPage onde nos desejamos imprimir o texto. Ento inclua no formulrio o componente PrintPreviewDialog alterando o seu nome para dlgVisualiza. Agora no evento Click do boto Imprimir inclua o cdigo:
PrivateSubbtnImprimir_Click(ByVal sender AsSystem.Object, ByVal e AsSystem.EventArgs)
HandlesbtnImprimir.Click 'Declara o printdocument DimAlunosDocumentAsDrawing.Printing.PrintDocument 'Cria o documento e da nome ao mesmo AlunosDocument = NewDrawing.Printing.PrintDocument() AlunosDocument.DocumentName = "Alunos" 'incluir o manipulador de eventos
AddHandlerAlunosDocument.PrintPage, AddressOfMe.ImprimirAlunos
'Imprime no modo de visualizao DimSavedPositionAsInteger = AlunosCManager.Position dlgVisualiza.Document = AlunosDocument dlgVisualiza.ShowDialog() 'libera o documento apos imprimir AlunosDocument.Dispose() AlunosCManager.Position = SavedPosition EndSub
Agora temos que codificar a rotina ImprimirAlunos que ir realizar o trabalho de impresso. O cdigo o seguinte:
PrivateSubImprimirAlunos(ByValsenderAsObject, ByVal e AsDrawing.Printing.PrintPageEventArgs) 'desenha a bordar DimMyPenAs Pen = New Pen(Color.Black, 3) e.Graphics.DrawRectangle(MyPen, e.MarginBounds.X, e.MarginBounds.Y, 450, 480) DimMyFontAs Font = New Font("Arial", 12, FontStyle.Bold) Dim S AsString = My.Settings.Escola.ToString DimSSizeAsSizeF = e.Graphics.MeasureString(S, MyFont) e.Graphics.DrawString(S, MyFont, Brushes.Black, e.MarginBounds.X + CInt(0.5 * (250 - SSize.Width)), e.MarginBounds.Y + 15) 'posiciona a imagem e.Graphics.DrawImage(picItem.Image, e.MarginBounds.X + 25, e.MarginBounds.Y + 50, 400, 300) e.HasMorePages = False 'define os campos a serem impressos MyFont = New Font("Arial", 14)
Dim Y AsInteger = e.MarginBounds.Y + 400 S = txtNome.Text + " " + txEndereco.Text SSize = e.Graphics.MeasureString(S, MyFont) e.Graphics.DrawString(S, MyFont, Brushes.Black, e.MarginBounds.X + CInt(0.5 * (300 - SSize.Width)), Y) Y += CInt(MyFont.GetHeight(e.Graphics)) 'S = txtLastName.Text 'SSize = e.Graphics.MeasureString(S, MyFont) ' e.Graphics.DrawString(S, MyFont, Brushes.Black, e.MarginBounds.X + CInt(0.5 * (300 - SSize.Width)), Y) 'Y += CInt(MyFont.GetHeight(e.Graphics)) S = lblGrau.Text + "o Grau " SSize = e.Graphics.MeasureString(S, MyFont) e.Graphics.DrawString(S, MyFont, Brushes.Black, e.MarginBounds.X + CInt(0.5 * (300 - SSize.Width)), Y) EndSub
Excluindo dados
O cdigo do boto Deletar exibido a seguir. Aps confirmao usamos o mtodo RemoveAt do CurrencyManager e em seguida chamamos a rotina ExibirDados().
PrivateSubbtnDeletar_Click(ByVal sender AsSystem.Object, ByVal e AsSystem.EventArgs) HandlesbtnDeletar.Click IfMessageBox.Show("Confirma e excluso deste registro ? ", "Deletar", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.YesThen
Carregando a foto
Quando clica no boto Carregar Foto aberto uma janela de dilogo Abrir para que um arquivo de foto seja selecionado. Aps selecionar uma imagem clique no boto Salvar. O cdigo que faz tudo isso dado abaixo:
PrivateSubbtnCarregaFoto_Click(ByValsenderAsSystem.Object, ByVal e AsSystem.EventArgs) HandlesbtnCarregaFoto.Click DimnomeImagemAsString dlgAbrir.InitialDirectory = localfotos Try IfdlgAbrir.ShowDialog = Windows.Forms.DialogResult.OKThen 'obtem o caminho e nome da imagem nomeImagem = dlgAbrir.FileName 'obtem a posio da / na string DimposicaoBarraAsInteger = nomeImagem.LastIndexOf("\") 'extrai somente o nome do arquivo da string e atribui a lblFoto lblFoto.Text = nomeImagem.Substring(posicaoBarra + 1) 'chama a rotina para exibir a foto CallExibirFoto() EndIf Catch ex As Exception MessageBox.Show(ex.Message, "Erro ao abrir Foto.", MessageBoxButtons.OK, MessageBoxIcon.Error) EndTry EndSub
Para encerrar o programa temos o cdigo abaixo associado ao evento Click do boto Sair:
PrivateSubbtnSair_Click(ByVal sender AsSystem.Object, ByVal e AsSystem.EventArgs) HandlesbtnSair.Click If (MessageBox.Show("Desejasair ?", "Sair", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes) Then
Com isso terminei a apresentao da aplicao Cadastro de Alunos usando todos os recursos de manuteno de dados e navegao pelos registros. Tudo isso com exibio de imagens e impresso tambm. Para encerrar com chave de ouro o ltimo captulo da srie ir mostrar como gerar o pacote para instalao.