- Utilizando a SQL
Utilização da SQL - Structured Query Language. |
|
Veja também o curso de SQL neste link :
Vamos definir uma tabela com o nome de agenda que estará armazenada no banco de dados Controle.mdb e que possuirá a seguinte estrutura:
------------------------------------------------------------------------------------------------------------ nome do campo Tipo de Dados Tamanho do Campo --------------------------------------------------------- sobrenome Caracter 30 nome Caracter 30 telefone Caracter 13 nascimento date -- endereco Caracter 30 cep Caracter 10 uf Caracter 02 e_mail Caracter 80 pais Caracter 20 obs Caracter 100 foto Caracter 50 --------------------------------------------------------- 1-Os campos Sobrenome, nome e nascimento não podem ser Nulos, ou seja são de preenchimento obrigatório. 2-Defina um índice para o campo sobrenome desativando as opções: Unique, Primary index. e ativando a opção Requerid 3-Você deve criar e armazenar no banco de dados Controle.mdb as seguintes consultas SQL: (Para isso utilize o Microsoft Access ou o Data Manager) 1-Consulta Inclusão : INSERT INTO agenda ( sobrenome, nome, telefone, nascimento, endereco, cep, uf, e_mail, pais, obs, foto ) SELECT parsobrenome AS Expr1, parnome AS Expr2, partelefone AS Expr3, parnascimento AS Expr4, parendereco AS Expr5, parcep AS Expr6, paruf AS Expr7, pare_mail AS Expr8, parpais AS Expr9, parobs AS Expr10, parfoto AS Expr11; 2-Consulta Atualização: UPDATE Agenda SET Agenda.sobrenome = parsobrenome, Agenda.nome = parnome, Agenda.telefone = partelefone, Agenda.nascimento = parnascimento, Agenda.endereco = parendereco, Agenda.cep = parcep, Agenda.uf = paruf, Agenda.e_mail = pare_mail, Agenda.pais = parpais, Agenda.obs = parobs, Agenda.foto = parfoto WHERE ((Agenda.sobrenome=[parsobrenome])); 3-Consulta Exclusão: DELETE * FROM agenda WHERE sobrenome=parsobrenome; Conteúdo Desenhando a interface com o usuário.
Temos abaixo (figura 1.0) a tela principal de nossa aplicação em tempo de projeto:
figura 1.0 |
Observe o uso dos Controles: -Image -CommomDialog -CrystalReport -ComboBox -Picture |
Para montar o formulário acima descrito observe os seguintes passos: 1-Inicie um novo projeto no Visual Basic.Grave o formulário Form1 como Agenda. 2-Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0 abaixo : Tabela 1.0 - Objetos e propriedades do formulário Agenda ---------------------------------------------------------------------------- Objeto Propriedade Configuração ---------------------------------------------------------------------------- Form Name Agenda Caption "Agenda" ---------------------------------------------------------------------------- TextBox Name Sobrenome Maxlength 30 ---------------------------------------------------------------------------- textBox Name Nome Maxlength 30 ---------------------------------------------------------------------------- TextBox Name Telefone Maxlength 15 ---------------------------------------------------------------------------- TextBox Name Nascimento ---------------------------------------------------------------------------- TextBox Name Endereco MaxLength 30 ---------------------------------------------------------------------------- TextBox Name Cep MaxLength 10 ---------------------------------------------------------------------------- ComboBox Name cmbestados ---------------------------------------------------------------------------- TextBox Name e_mail MaxLength 80 ---------------------------------------------------------------------------- ComboBox Name cmbpaises ---------------------------------------------------------------------------- TextBox Name foto MaxLength 80 ---------------------------------------------------------------------------- TextBox Name obs Multiline true ---------------------------------------------------------------------------- CommandButton Name Incluir Caption "&Incluir" --------------------------------------------------------------------------- CommandButton Name Alterar Caption "&Alterar" --------------------------------------------------------------------------- CommandButton Name Excluir Caption "&Excluir" --------------------------------------------------------------------------- CommandButton Name Imprime Caption "Im&prime" --------------------------------------------------------------------------- CommandButton(#) Name Gravar Caption "&Gravar" --------------------------------------------------------------------------- CommandButton(#) Name Cancelar Caption "&Cancelar" --------------------------------------------------------------------------- CommonDialog Name CommonDialog1 --------------------------------------------------------------------------- CrystalReport Name CrystalReport1 --------------------------------------------------------------------------- Picture Name Picture1 Visible True BackColor azul --------------------------------------------------------------------------- Picture Name Picture2 Visible False BackColor azul --------------------------------------------------------------------------- Image Name Image1 Stretch True --------------------------------------------------------------------------- CommandButton Name foto Caption Inclui foto --------------------------------------------------------------------------- CommandButton Name primeiro Caption "|<" --------------------------------------------------------------------------- CommandButton Name ultimo Caption ">|" --------------------------------------------------------------------------- (**)Label Caption ** AutoSize ** --------------------------------------------------------------------------- (**)Todos os controles Label possuem a propriedade AutoSize=True e Caption sendo igual ao nome do respectivo controle TextBox,MaskEdbox ou CommandButton. (#)Estes botões de comando são colocados no controle picture2 e os demais no controle picture1.
Para inserir as linhas de código basta clicar duas vezes no controle correspondente do formulário.
1-Código da seção General Declarations do formulário
Option Explicit Public banco As Database Public area As Workspace Public tabela As Recordset Public consulta As QueryDef Public atualiza As Boolean Public alterar As Boolean Public fotos As String Public marca As Variant
Define as variáveis que serão visíveis em todo o formulário.
2-Código do evento Load do formulário.
Private Sub Form_Load() Set area = DBEngine.Workspaces(0) Set banco = area.OpenDatabase("C:\vb16\CONTROLE.MDB") Set tabela = banco.OpenRecordset("Agenda", dbOpenTable) tabela.Index = "sobrenome" enche_combo cmbestados, "estados", "uf" enche_combo cmbpaises, "paises", "pais" If tabela.RecordCount = 0 Then MsgBox "O arquivo esta vazio ... vamos comecar a trabalhar..." Else tabela.MoveFirst End If mostra_reg End Sub
3-Código da procedure para mostrar os registros.
Public Sub mostra_reg() Dim nomefoto As String If Not IsNull(tabela![sobrenome]) Then sobrenome = tabela![sobrenome] Else sobrenome = "" End If If Not IsNull(tabela![nome]) Then nome = tabela![nome] Else nome = "" End If If Not IsNull(tabela![endereco]) Then endereco = tabela![endereco] Else endereco = "" End If If Not IsNull(tabela![cep]) Then cep = tabela![cep] Else cep = "" End If If Not IsNull(tabela![uf]) Then cmbestados.Text = tabela![uf] Else cmbestados.Text = "" End If If Not IsNull(tabela![nascimento]) Then nascimento = tabela![nascimento] Else nascimento = "" End If If Not IsNull(tabela![telefone]) Then telefone = tabela![telefone] Else telefone = "" End If If Not IsNull(tabela![pais]) Then cmbpaises.Text = tabela![pais] Else cmbpaises.Text = "" End If If Not IsNull(tabela![e_mail]) Then e_mail = tabela![e_mail] Else e_mail = "" End If If Not IsNull(tabela![obs]) Then obs = tabela![obs] Else obs = "" End If If Not IsNull(tabela![foto]) Then nomefoto = Trim(tabela![foto]) Image1.Picture = LoadPicture(nomefoto) Else nomefoto = "" Image1.Picture = LoadPicture("") End If Label11.Caption = "Reg.: " & tabela.RecordCount End Sub
4-Código da procedure para preencher as caixas de combinação.
Private Sub enche_combo(combo As Control, data As String, campo As String) Dim arqtemp As Recordset combo.Clear Set arqtemp = banco.OpenRecordset(data, dbOpenSnapshot) Do Until arqtemp.EOF combo.AddItem arqtemp(campo) arqtemp.MoveNext Loop arqtemp.Close combo.ListIndex = 0 End Sub
5-Código da procedure para limpar as caixas de texto.
Sub limpa_reg(janela As Form) Dim i As Integer For i = 0 To janela.Controls.Count - 1 If TypeOf janela.Controls(i) Is TextBox Then janela.Controls(i).Text = "" End If Next i End Sub
6-Código associado ao botão Incluir.
Private Sub inclui_Click() alterar = False marca = tabela.Bookmark limpa_reg frmagenda foto.Visible = True Picture1.Visible = False Picture2.Visible = True Image1.Picture = LoadPicture("") sobrenome.SetFocus End Sub
7-Código associado ao botão Alterar.
Private Sub altera_Click() alterar = True sobrenome.Enabled = False nome.SetFocus foto.Visible = True Picture2.Visible = True Picture1.Visible = False End Sub
8-Código associado ao botão Excluir.
Private Sub exclui_Click() If MsgBox("Confirma Exclusao ", vbYesNo, tabela![nome]) = vbYes Then tabela.Delete If Not tabela.EOF Then tabela.MoveNext ElseIf Not tabela.BOF Then tabela.MovePrevious End If mostra_reg End If End Sub
9-Código associado ao botão Gravar.
Private Sub grava_Click() atualiza = True If alterar Then grava_reg 2 alterar = False sobrenome.Enabled = True Else grava_reg 1 End If If atualiza Then foto.Visible = False Picture1.Visible = True Picture2.Visible = False End If End Sub
10-Código associado ao botão Cancelar.
Private Sub cancela_Click() tabela.Bookmark = marca mostra_reg foto.Visible = False Picture1.Visible = True Picture2.Visible = False sobrenome.Enabled = True End Sub
11-Código associado ao botão Imprime.
Private Sub imprime_Click() CrystalReport1.Destination = 0 CrystalReport1.ReportFileName = "c:\Controle\agenda.rpt" CrystalReport1.Action = 1 End Sub
12-Código associado ao botão Inclui Foto.
Você pode armazenar as imagens no seu banco de dados mas isto pode lhe trazer problemas futuros. Se sua base de dados aumentar muito , as imagens armazenadas irão impactar o velocidade do seu projeto.( Lembre-se também que o tamanho máximo para um mdb é de 1 Gigabyte)(se não me engano!) |
Private Sub foto_Click() Dim filter As String fotos = "" filter = "Arquivos BMP (*.BMP)|*.bmp|Todos os arqs.|*.*" CommonDialog1.filter = filter CommonDialog1.DefaultExt = "BMP" CommonDialog1.ShowOpen fotos = CommonDialog1.filename If Not fotos = Empty Then Image1.Picture = LoadPicture(fotos) Else Image1.Picture = LoadPicture("") End If End Sub
13-Código associado ao botão primeiro(|<)
Private Sub primeiro_Click() tabela.MoveFirst mostra_reg End Sub
14-Código associado ao botão anterior(<).
Private Sub anterior_click() tabela.MovePrevious If tabela.BOF Then tabela.MoveFirst End If mostra_reg End Sub
15-Código associado ao botão proximo(>).
Private Sub proximo_click() tabela.MoveNext If tabela.EOF Then tabela.MoveLast End If mostra_reg End Sub
16-Código associado ao botão ultimo(>|).
Private Sub ultimo_click() tabela.MoveLast mostra_reg End Sub
17-Código da procedure para gravar os dados nos arquivos.
Public Sub grava_reg(operacao As Integer) If sobrenome = Empty Then MsgBox "O sobrenome/Apelido é obrigatorio ! " sobrenome.SetFocus atualiza = False Exit Sub End If If nome = Empty Then MsgBox "O nome tambem é obrigatorio ! " nome.SetFocus atualiza = False Exit Sub End If If endereco = Empty Then MsgBox "O endereco é obrigatorio " endereco.SetFocus atualiza = False Exit Sub End If If nascimento = Empty Then MsgBox "A data de nascimento é obrigatória " nascimento.SetFocus atualiza = False Exit Sub End If If operacao = 1 Then Set consulta = banco.QueryDefs("insagenda") Else Set consulta = banco.QueryDefs("upagenda") End If area.BeginTrans consulta("parsobrenome") = sobrenome consulta("parnome") = nome consulta("parendereco") = endereco consulta("parnascimento") = CDate(Format(nascimento, "d-m-yy")) consulta("parcep") = IIf(IsNull(cep), "", cep) consulta("paruf") = IIf(IsNull(cmbestados.Text), "", cmbestados.Text) consulta("parpais") = IIf(IsNull(cmbpaises.Text), "", cmbpaises.Text) consulta("partelefone") = IIf(IsNull(telefone), "", telefone) consulta("pare_mail") = IIf(IsNull(e_mail), "", e_mail) consulta("parobs") = IIf(IsNull(obs), "", obs) consulta("parfoto") = IIf(IsNull(fotos), "", fotos) consulta.Execute area.CommitTrans End Sub
17-Código associado a opção sair do menu.
Private Sub mnusair_Click() End End Sub
18-Código associado ao evento pressionar tecla da caixa de texto e_mail.
Private Sub e_mail_KeyPress(KeyAscii As Integer) KeyAscii = Asc(LCase(Chr(KeyAscii))) End Sub
19-Código associado ao evento perder o foco da caixa de texto sobrenome.
Private Sub sobrenome_LostFocus() 'If sobrenome = Empty Then ' Exit Sub 'End If tabela.Seek "=", sobrenome If tabela.NoMatch Then Exit Sub End If mostra_reg foto.Visible = False Picture2.Visible = False Picture1.Visible = True End Sub
20-Código associado ao evento perder o foco da caixa de texto nascimento.
O evento Lostfocus deve ser usado com muito cuidado para não se ter dores de cabeça!!
Private Sub nascimento_LostFocus() If Not IsDate(Format(nascimento, "dd-mm-yy")) Then MsgBox "Data invalida, formato deve ser dd-mm-yy - Ex: 02-07-78 " nascimento.SetFocus Else nascimento.Text = Format(nascimento, "dd-mm-yy") End If End Sub
Adios, ...