CÓDIGO DA
APLICAÇÃO
Objeto Controle de Dados(Data Control)
Lembre-se que você esta usando um banco de dados do Microsoft Access , então:
Para o objeto Data voce deve configurar as propriedades como abaixo:
1- A propriedade Connect deve estar como: Access.
2- A propriedade Name do controle deve ser: DtaCli.
3- O DatabaseName é o nome do seu arquivo de banco de dados, no caso: Controle.mdb
4- O RecordSource poderá ser uma tabela ou uma instrução SQL, no seu caso , é a
tabela Clientes do banco de dados Controle.mdb.
5- A propriedade RecordSetType deve ser definida como 0-Table.
Por isso criamos o índice com o campo código, para utilizar com o método Seek do
Recordset Tabela. Se recordSetType fosse definido como 1-Dynaset> ou 2-Snapshot
não poderiamos usar o método Seek e sim o FindFirst, FindNext, FindLast, etc.
obs-Voce poderia ter incluido o código no evento Load do seu formulário
configurando as propriedades discutidas acima da seguinte forma:
Sub Form_load
dtacli.Databasename="C:\Controle\Controle.mdb"
dtacli.Recordsource="Clientes"
dtacli.RecordSetType= 0
End Sub
Caixas de Texto(TextBox)
Agora para cada Textbox voce deve configurar as propriedades como segue:
1- A propriedade DataSource deve receber o nome do objeto Data: DtaCli
2- A propriedade DataField de cada TextBox deve ser vinculada ao respectivo campo
da tabela Clientes.(Selecione na lista de campos).
Feito isto o Controle de dados, DtaCli fornecerá o vinculo entre o seu formulário e o
banco de dados através da propriedade DataField das Caixas de Texto(TextBox)
e também as ferramentas para a navegação através do banco de dados.
Para movimentar-se pelos registros da tabela Clientes basta clicar nos
botões do objeto DtaCli.
Código associado a cada botão de commando
Dica: - A palavra Recordset pode representar um objeto e uma propriedade.
Desta forma você pode atribuir um Recordset a uma variável
objeto, da seguinte forma:
Set meusdados = Data1.Recordset
A seguir você pode se referir ao seu Recordset usando
a variável objeto.(Não esqueça de definí-la previamente.)
No exemplo a seguir não usaremos esta notação.
|
Para inserir as linhas de código basta clicar duas vezes no botão correspondente
do seu formulário.
1-Código para botão incluir dados:
Private Sub Incluir_Click()
dtacli.Recordset.AddNew 'insere informações no buffer de cópia preparando
para incluir um novo registro no recordset
excluir.Enabled = False 'desabilita o botão excluir
incluir.Enabled = False 'desabilita o botão incluir
localizar.Enabled = False 'desabilita o botão localizar
sair.Caption = "&Cancelar" 'Muda o nome do botão Sair para Cancelar
gravar.Enabled = True 'Habilita o botão gravar
nome.SetFocus 'põe o foco na caixa de texto nome
End Sub
|
Após clicar no botão Incluir, voce pode digitar os dados referentes a
cada cliente e a seguir clicar no botão Gravar para gravar as informações
na sua tabela Clientes ou cancelar o processo de inclusão.
2-Código do botão gravar dados:
Private Sub gravar_Click()
If nome.Text = Empty Then
MsgBox "Informe o nome do Cliente.", vbExclamation, "Gravar Clientes"
nome.SetFocus
Exit Sub
End If
If endereco.Text = Empty Then
MsgBox "Informe o endereco do cliente.", vbExclamation,"Gravar Clientes"
endereco.SetFocus
Exit Sub
End If
If cidade.Text = Empty Then
MsgBox "Informe a cidade do cliente.", vbExclamation,"Gravar Clientes"
cidade.SetFocus
Exit Sub
End If
If uf.Text = Empty Then
MsgBox "Informe a UF do cliente.", vbExclamation, "Gravar Clientes"
uf.SetFocus
Exit Sub
End If
If cep.Text = Empty Then
MsgBox "Informe o Cep do cliente.", vbExclamation, "Gravar Clientes"
cep.SetFocus
Exit Sub
End If
dtacli.UpdateRecord
dtacli.Recordset.Bookmark = dtactl.Recordset.LastModified
sair(4).Caption = "&Sair"
localizar.Enabled = True
End Sub
|
- Na rotina
de gravação verificamos se os dados que são
obrigatórios,no nosso caso só o telefone não é, foram
informados;então nome,endereço,cidade,uf,cep não podem
ser vazios(empty).
- Se qualquer
deles não for informado é exibida a mensagem
respectiva(msgbox), o foco retorna ao campo para
preenchimento(setfocus) e a rotina de gravação
é abandonada.(Exit Sub)
- Se todos os
campos obrigatórios foram informados os sistema
acrescenta fisicamente o registro na tabela, através do
método UpdateRecord.A utilização deste método
, ao invés do método Update,tem a vantagem de
não disparar os eventos Validate e
Reposition do data control
- A
utilização da propriedade BookMark do recordset
apenas posiciona o ponteiro de registro no ultimo
registro que sofreu modificações.
- A seguir
restauramos o nome do botão Sair e habilitamos o botão
localizar.
3-Código do botão Cancelar a inclusão de dados:
Private Sub Sair_Click()
If sair.Caption = "&Cancelar" Then
dtacli.Recordset.CancelUpdate
dtacli.Recordset.MoveLast
incluir.Enabled = True
excluir.Enabled = True
localizar.Enabled = True
sair.Caption = "&Sair"
Else
If MsgBox("Quer sair do sistema ?", vbYesNo,"Sair do Sistema") = vbYes Then
End
Else
Exit Sub
End If
End If
End Sub
|
- Neste
código verificamos se o nome do botão esta como Cancelar,
em caso positivo, cancelamos qualquer atualização
pendente através do metódo CancelUpdate.
- Em seguida
movemos o ponteiro de registros para o último registro.
- Finalmente
habilitamos os botões Incluir, Excluir e Localizar
e mudamos o nome do botão para Sair.
- Agora, se o
nome do botão não for Cancelar solicitamos a
confirmação para sair do Sistema(End) ou
abandonar a rotina(Exit Sub) e retornar ao
sistema.
4-Código para o botão Excluir dados:
Private Sub excluir_Click()
If MsgBox("Confirma Exclusão do cliente -> " & dtactl.Recordset![codigo], vbQuestion + vbYesNo, "Excluir Clientes") = vbYes Then
dtacli.Recordset.Delete
dtacli.Refresh
End If
End Sub
|
- Na rotina
de exclusão, Solicitamos a confirmação da exclusão
,e, em caso afirmativo, usamos o método delete ,
que remove o registro do recordset e estabelece um valor
nulo para o ponteiro de registro.
- A seguir
atualizamos o objeto data control
(Refresh).
5-Código para o botão Localizar dados:
Private Sub localizar_Click()
Dim criterio As long
Dim marcador As variant
marcador = dtacli.Recordset.Bookmark
dtacli.Recordset.Index = "codigo" 'recordset é do tipo Table !!!
criterio = InputBox$("Codigo do cliente a localizar: ", "Localizar Clientes")
If criterio <> Empty Then
dtacli.Recordset.Seek "=", criterio
If dtacli.Recordset.NoMatch Then
MsgBox "Cliente não localizado ! ", vbExclamation, "Localizar Clientes"
dtacli.Recordset.Bookmark = marcador
End If
Else
dtacli.Recordset.Bookmark = marcador
End If
End Sub
|
- Para a
rotina de localização definimos a posição atual do
registro ativo usando a propriedade bookmark
- Definimos o
índice ativo (codigo que foi criando
anteriormente
- Solicitamos
o código do cliente , armazenando o valor na variável
critério.
- Se (If)
criterio for diferente (<>) de vazio (empty),
então um valor foi fornecido e podemos iniciar a
localização usando o método seek. Se não for
informado nenhum valor para a variável criterio
retormamos o ponteiro de registro para a posição
anterior ao inicio da localização.
- Se o valor
não for encontrado (Nomatch=True) o sistema emite
uma mensagem (msgbox), informando ao usuário e
posiciona o ponteiro de registro na posição anterior a
busca.
6-Código do evento Reposition:
Private Sub dtactl_Reposition() 'primeiro evento a ocorrer
If dtacli.Recordset.RecordCount < > 0 Then
incluir(0).Enabled = True
excluir(1).Enabled = True
dtacli.Caption = "Total de Clientes: " & dtactl.Recordset.RecordCount
Else
excluir(1).Enabled = False
incluir(0).Enabled = True
gravar(2).Enabled = False
dtacli.Caption = "O arquivo esta vazio"
End If
End Sub
|
- O evento Reposition
ocorre quando o Data control move-se de um
registro para outro. No código acima cada vez que o o
evento Reposition é disparado atualizamos a
propriedade Caption do controle de dados
atribuando a mesma o número total de registro do arquivo
via propriedade RecordCount. Além disso
habilitamos os botões incluir e excluir se
houver registros no arquivo e desabilitamos os botões excluir
e gravar se o arquivo estiver vazio.
7-Código do evento Validate:
Private Sub dtactl_Validate(Action As Integer, Save As Integer)
If Save Then
Select Case MsgBox("Deseja Salvar Alterações ?", vbQuestion + vbYesNo)
Case vbYes '6
If nome.Text = Empty Then
MsgBox "Nome do Cliente deve ser informado !", , "Gravar Clientes"
nome.SetFocus
Save = False 'nao salva os dados
Action = vbDataActionCancel 'Cancela acao
Exit Sub
ElseIf endereco.Text = Empty Then
MsgBox "Endereco do Cliente deve ser informado !", , "Gravar Clientes"
endereco.SetFocus
Save = False
Action = vbDataActionCancel
Exit Sub
ElseIf cidade.Text = Empty Then
MsgBox "Por favor, informe a cidade do Cliente !", , "Gravar Clientes"
cidade.SetFocus
Save = False
Action = vbDataActionCancel
Exit Sub
ElseIf cep.Text = Empty Then
MsgBox "Cep do Cliente deve ser informado !", , "Gravar Clientes"
cep.SetFocus
Save = False
Action = vbDataActionCancel
Exit Sub
ElseIf uf.Text = Empty Then
MsgBox "Por favor, informe a UF do Cliente !", , "Gravar Clientes"
uf.SetFocus
Save = False
Action = vbDataActionCancel
Exit Sub
End If
Case vbNo '7
Save = False
End Select
End If
End Sub
|
- O evento Validate
é acionado quando o Data Control está para
mover-se de um registro para um novo. Nesse meio tempo
você pode cancelar ou não as mudanças feitas no
registro. A sub rotina do evento Validate possui
dois argumentos:
- Action
- Descreve o evento que causou o evento Validate
- Save
- Assume dois valores
- True - se qualquer dado
for modificado
- False - se não houver
modificação
Utilizamos
o evento para validar os dados , cancelar a ação(vbDataActionCancel)
e mudar o valor de Save quando necessário. 8-Código para
tratamento de erros
Private Sub dtactl_error(dataerr As Integer, response As Integer)
'trata erros quando nenhum código esta sendo executado
Select Case dataerr
Case 3044 'caminho invalido
MsgBox "O caminho informado não é valido, verifique !"
End 'uma maneira muito rude de interromper sua aplicacao, mas...
Case 3024 'nao achou banco de dados
MsgBox "O arquivo definido não foi encontrado !"
End
Case Else
'MsgBox "Erro em : " & Error$(dataerr) 'para mostrar o erro.
response = vbDataErrcontinue 'ou vbdataErrdisplay
End Select
End Sub
|
A rotina
acima é utilizada para interceptar erros que ocorrem
quando nenhum código está sendo executado. Estes erros
podem ocorrer quando a carga do formulário ainda não
estiver completa. Agora basta rodar o projeto.
adios
muchachos...
Retorna