Você está na página 1de 25

TREINAMENTO

CONSTRUINDO UM APLICATIVO COMPLETO DE ACESSO E MANIPULAÇÃO


DE DADOS COM ADO.NET NO VISUAL STUDIO.NET

OBJETIVO:

O objetivo deste treinamento é demonstrar como desenvolver aplicações de


acesso a base de dados de informações utilizando os recursos existente no Visual
Studio.Net que são inúmeros, assim vamos utilizar desses inúmeros recursos para
desenvolver nosso aplicativo desktop: O Sindico.

INTRODUÇÃO:

Neste treinamento iremos construir um Aplicativo completo e step by step,


para acesso a uma base de dados MSDE, começando pela construção do Banco
de Dados usando a IDE do Visual Studio, passando pela implementação do
aplicativo, com suas classes e o acesso ao Banco de Dados através das
ferramentas disponibilizadas pelo Ado.Net, onde faremos a inclusão de dados, a
Atualização e a Consulta a esses dados.
Para este treinamento, necessitaremos das seguintes ferramentas:

• Visual Studio.Net 2003 ou superior;


• Microsoft SQL Server 2000 (MSDE – versão gratuita do MS SQL
Server 2000, disponível para download no endereço
www.microsoft.com/sql/msde);

Inicialmente é bom ressaltar que todo aplicativo começa por um bom


planejamento, então saiba exatamente tudo sobre o que você deseja construir,
planeje, modele e documente, ai passe para a parte operacional do
desenvolvimento.
PLANEJANDO NOSSA APLICAÇÃO:

Um amigo meu costuma dizer que todo aplicativo tem uma única finalidade,
seja atender as necessidades de um ou mais usuários, vou deixar claro que não
implementaremos o uso da UML (Unified Modeling Language – Linguagem
Unificada de Modelagem) , pois esse não é o nosso objetivo principal, embora seja
extremamente aconselhado a modelagem e o planejamento dos sistemas, o que
certamente deixará seus aplicativos mais profissionais, porém chegaremos bem
perto disso. Identificaremos primeiramente quem serão os atores, então
“perguntaremos” para eles o que querem do nosso sistema.

1. Atores:
a) Usuários;
b) Condomínio;
c) Moradores do Condomínio;
d) Sindico;
e) Outros interessados;
f) Repositório de Informações.

2. Casos de Uso
a) Permitir que os usuários definidos, possam receber reclamações
diversas dos moradores do condomínio e outros;
b) Registrar essas informações como ocorrências;
c) Que de posse dessas informações, possa encaminhá-las ao setor
competente;
d) Que após solucionado o problema, atualizar o sistema explicitando o
fato ocorrido e a solução dada;
e) Permitir que essas ocorrências sejam consultadas posteriormente.

Após identificarmos nossos requisitos, primeiramente daremos atenção ao


Repositório de Informações, o qual poderia ser um banco de dados relacional, um
banco de dados tipo documento do Ms Access, contudo na nossa aplicação
vamos trabalhar com um Banco de Dados, o Microsoft SQL Server 2000 na versão
MSDE (Microsoft Desktop Engine) que na verdade é com todas as letras SQL
Server.

Instalando o Microsoft Desktop Engine (MSDE)

Faça o download do MSDE no site da Microsoft


www.microsoft.com/sql/msde/downloads/download.aspx, acesse o arquivo
MSDE2000A.exe e dê um duplo click nele, assim disparará o processo de
descompactação e extração de todos os arquivos necessários a instalação do
nosso MSDE, em seguida vá até o diretório onde foi descompactado e localize o
arquivo Setup.exe e dando um duplo click nele o processo de instalação do banco
de dados começará, agora é só next... next em seguida reinicie sua máquina.
CRIANDO O BANCO DE DADOS

Vamos criar nosso Banco de Dados, abra o Visual Studio, não abra nenhum
projeto novo antes, abra a janela Server Explore e clique com o botão direito em
“Data Connections” e selecione “Create New SQL Server Databases...”.

No campo Server da janela Create Database, digite (local), o que indicará


que será usado o SQL Server local como servidor de banco de dados e no campo
New Databese Name, digite RegistraOcorrencia, que definirá o nome do nosso
banco de dados.

Para confirmar a criação do banco de dados abra o Server Explore e


expanda a treeview existente em Servers, o banco de dados RegistraOcorrencia
deverá constar da lista de bancos de dados existentes.
Agora vamos adicionar nosso banco de dados nos bancos de dados
conectados, na janela Server Explore clique com o botão direito do em Data
Connections e selecione Add Connection e será exibida a janela Data Link
Properties, no campo Server digite (local) e selecione a opção Use Windows NT
Integrated Security e por fim selecione o Banco de Dados RegistraOcorrencia em
seguida clique no botão Test Connection, se tudo estiver bem, clique no botão Ok.

A conexão criada aparecerá em Server Explore, logo abaixo de Data


Connections, expandindo os nós você poderá ver que toda uma estrutura de
banco de dados já existe , prontos para serem adicionados, Diagramas, Tabelas,
Storede Procedures, Views e Functions, mas todos encontram-se vazios.
Agora vamos criar a base de dados, no nosso aplicativo necessitaremos
apenas de uma tabela, na janela Server Explore clique na treeview do banco de
dados RegistraOcorrencia, clique com o botão direito em Tables e selecione New
Table, adicione os campos um a um como a figura abaixo:

Salve a tabela como “Ocorrencia”, se você expandir o nó, verá todos os


campos criados ou sendo criados. Pronto, nossa base de dados está criada, em
seguida passaremos diretamente para o desenvolvimento de nossa aplicação.
CRIANDO NOSSO APLICATIVO

Abra o Visual Studio.Net, na janela New Project, em Project Types escolha


Visual Basic Projects e em Templates selecione Windows Application e denomine
como Sindico, escolha o local de sua máquina onde irá deixar seu projeto e clique
em Ok.
CRIANDO UMA CLASSE DE MANIPULAÇÃO DE DADOS

Na janela Solution Explorer com o botão direito clique em Sindico, selecione


New e adicione uma nova Class, denomine essa classe como SindicoData, nela
trataremos de nossa conexão com o banco de dados.

Sempre pensaremos que para cada tabela existente em um banco de


dados, devemos escrever uma classe, no nosso caso como só temos uma tabela,
não mistificaremos o uso da classe, mas faremos todos o controle de acesso,
inserção, atualização e consulta através da classe que nós acabamos de criar a
SindicoData, vamos organizadamente dividir nosso código em regiões, criaremos
uma região para os campos, outra as propriedades e uma para as funções, antes
porém declararemos nosso Provider nome do provedor nativo que iremos usar,
como faremos uso do SQL Server, usaremos o provider SQL Server Provider,
conforme abaixo:
CAMPOS

Para criarmos uma Região, basta digitar #Region e entre aspas, o nome
da Região que queremos criar, regiões servem para melhor organizarmos nosso
código. Dentro da Região “Campos” criaremos os campos conforme existem na
nossa tabela, diferenciando-os com um _, antes da denominação de cada um,
criaremos também outros campos que forem necessários ao funcionamento de
nossa conexão, vejamos:
Quero chamar atenção para os campos de Datas e Horas, estes campos
poderiam ser declarados como Date ou DateTime, mas como não trabalharemos
com equações desses campos, achei melhor (opção minha, fique a vontade para
mudá-los conforme seu aprendizado) declará-los como string mesmo.
Observe que declaramos outra string além dos campos da tabela
Ocorrência, _Erro, essa string vai nos servir para receber as exceções que por
ventura (com certeza) ocorrerem e assim com essas informações, teremos como
tratá-las.

PROPRIEDADES

Agora vamos escrever cada uma das nossas propriedades na região das
propriedades, uma tarefa que pode ser cansativa, porém necessária, por isso é
aconselhável a reutilização de código, para evitar as muitas linhas de códigos.

Public ReadOnly Property Numero() As Integer


Get
Return Me._Numero
End Get
End Property

Public Property NaturezaPrimaria() As String


Get
Return Me._NaturezaPrimaria
End Get
Set(ByVal Value As String)
Me._NaturezaPrimaria = Value
End Set
End Property

Public Property Andar() As String


Get
Return Me._Andar
End Get
Set(ByVal Value As String)
Me._Andar = Value
End Set
End Property

Public Property Descricao() As String


Get
Return Me._Descricao
End Get
Set(ByVal Value As String)
Me._Descricao = Value
End Set
End Property

Public Property Solicitante() As String


Get
Return Me._Solicitante
End Get
Set(ByVal Value As String)
Me._Solicitante = Value
End Set
End Property

Public Property Fone() As String


Get
Return Me._Fone
End Get
Set(ByVal Value As String)
Me._Fone = Value
End Set
End Property

Public Property Data() As String


Get
Return Me._Data
End Get
Set(ByVal Value As String)
Me._Data = Value
End Set
End Property
Public Property Hora() As String
Get
Return Me._Hora
End Get
Set(ByVal Value As String)
Me._Hora = Value
End Set
End Property

Public Property Encaminhado() As String


Get
Return Me._Encaminhado
End Get
Set(ByVal Value As String)
Me._Encaminhado = Value
End Set
End Property

Public Property Historico() As String


Get
Return Me._Historico
End Get
Set(ByVal Value As String)
Me._Historico = Value
End Set
End Property

Public Property NaturezaDefinitiva() As String


Get
Return Me._NaturezaDefinitiva
End Get
Set(ByVal Value As String)
Me._NaturezaDefinitiva = Value
End Set
End Property

Public Property DataEncerramento() As String


Get
Return Me._DataEncerramento
End Get
Set(ByVal Value As String)
Me._DataEncerramento = Value
End Set
End Property

Public Property HoraEncerramento() As String


Get
Return Me._HoraEncerramento
End Get
Set(ByVal Value As String)
Me._HoraEncerramento = Value
End Set
End Property
Public Property Situacao() As Boolean
Get
Return Me._Situacao
End Get
Set(ByVal Value As Boolean)
Me._Situacao = Value
End Set
End Property

Public Property Erro() As String


Get
Return Me._Erro
End Get
Set(ByVal Value As String)
Me._Erro = Value
End Set
End Property

FUNÇÕES

A partir de agora, passaremos a escrever nossas funções, necessárias a


manipulação dos dados, primeiro vamos escrever a função Salvar, que na
verdade poderia ser chamada de Inserir, porque sua finalidade é inserir novos
dados na tabela.

‘Declare um a função pública Salvar com os valores entre parênteses


Public Function Salvar(ByVal NaturezaPrimaria As String, ByVal
Andar As String, ByVal Descricao As String, _
ByVal Solicitante As String, ByVal Fone As String, ByVal Data
As String, ByVal Hora As String, _
ByVal Encaminhado As String, ByVal Historico As String, ByVal
NaturezaDefinitiva As String, _
ByVal DataEncerramento As String, ByVal HoraEncerramento As
String, ByVal Situacao As Boolean)

‘Conexão com a base de dados String de conexão


Dim cnn As SqlConnection = New SqlConnection
cnn.ConnectionString = "Initial
Catalog=RegistraOcorrencia;Data
Source=Euclides;Trusted_Connection=True"

‘Command
Dim cmd As New SqlCommand
Dim myString As String

‘String de sentença SQL para o Command


myString = "INSERT INTO Ocorrencia(NaturezaPrimaria,
Andar, Descricao, Solicitante, Fone, Data, Hora, Encaminhado,
Historico, NaturezaDefinitiva, DataEncerramento, HoraEncerramento,
Situacao)VALUES(@NaturezaPrimaria, @Andar, @Descricao,
@Solicitante, @Fone, @Data, @Hora, @Encaminhado, @Historico,
@NaturezaDefinitiva, @DataEncerramento, @HoraEncerramento,
@Situacao)"
Try
‘Abre a Conexão
cnn.Open()

With cmd
.Connection = cnn
.CommandTimeout = 0
.CommandText = myString
.CommandType = CommandType.Text
End With

‘ Criação dos Parâmetros para cada campo da tabela que você vai
inserir um dado
Dim ParNaturezaPrimaria As New
SqlParameter("@NaturezaPrimaria", SqlDbType.NVarChar, 50)
ParNaturezaPrimaria.Value = NaturezaPrimaria
cmd.Parameters.Add(ParNaturezaPrimaria)

Dim ParAndar As New SqlParameter("@Andar",


SqlDbType.NVarChar, 50)
ParAndar.Value = Andar
cmd.Parameters.Add(ParAndar)

Dim ParDescricao As New SqlParameter("@Descricao",


SqlDbType.NVarChar, 500)
ParDescricao.Value = Descricao
cmd.Parameters.Add(ParDescricao)

Dim ParSolicitante As New SqlParameter("@Solicitante",


SqlDbType.NVarChar, 50)
ParSolicitante.Value = Solicitante
cmd.Parameters.Add(ParSolicitante)

Dim ParFone As New SqlParameter("@Fone",


SqlDbType.NVarChar, 20)
ParFone.Value = Fone
cmd.Parameters.Add(ParFone)

Dim ParData As New SqlParameter("@Data",


SqlDbType.VarChar, 20)
ParData.Value = Data
cmd.Parameters.Add(ParData)
Dim ParHora As New SqlParameter("@Hora",
SqlDbType.VarChar, 20)
ParHora.Value = Hora
cmd.Parameters.Add(ParHora)

Dim ParEncaminhado As New SqlParameter("@Encaminhado",


SqlDbType.NVarChar, 50)
ParEncaminhado.Value = Encaminhado
cmd.Parameters.Add(ParEncaminhado)

Dim ParHistorico As New SqlParameter("@Historico",


SqlDbType.NVarChar, 500)
ParHistorico.Value = Historico
cmd.Parameters.Add(ParHistorico)

Dim ParNaturezaDefinitiva As New


SqlParameter("@NaturezaDefinitiva", SqlDbType.NVarChar, 50)
ParNaturezaDefinitiva.Value = NaturezaDefinitiva
cmd.Parameters.Add(ParNaturezaDefinitiva)

Dim ParDataEncerramento As New


SqlParameter("@DataEncerramento", SqlDbType.VarChar, 20)
ParDataEncerramento.Value = DataEncerramento
cmd.Parameters.Add(ParDataEncerramento)

Dim ParHoraEncerramento As New


SqlParameter("@HoraEncerramento", SqlDbType.VarChar, 20)
ParHoraEncerramento.Value = HoraEncerramento
cmd.Parameters.Add(ParHoraEncerramento)

Dim ParSituacao As New SqlParameter("@Situacao",


SqlDbType.VarChar, 10)
ParSituacao.Value = Situacao
cmd.Parameters.Add(ParSituacao)

cmd.ExecuteNonQuery()
cnn.Close()

Catch ex As Exception
Erro.ToString()
End Try

End Function

Essa função tem como finalidade editar os dados, ou seja após


consultados, o usuário verificará através do campo booleano que retornará falso
ou verdadeiro informando assim, que a ocorrência ainda não foi finalizada, e
precisará de mais dados para completá-la, assim o usuário completará as
informações sobre a ocorrência aberta e em seguida a finalizará apenas com a
edição de dados.

‘Declare um a função pública Ediar com os valores entre parênteses


Public Function Editar(ByVal Numero As Integer, ByVal
NaturezaPrimaria As String, ByVal Andar As String, ByVal Descricao
As String, _
ByVal Solicitante As String, ByVal Fone As String, ByVal Data
As String, ByVal Hora As String, _
ByVal Encaminhado As String, ByVal Historico As String, ByVal
NaturezaDefinitiva As String, ByVal DataEncerramento As String, _
ByVal HoraEncerramento As String, ByVal Situacao As Boolean)

‘Conexão com a base de dados String de conexão


Dim cnn As SqlConnection = New SqlConnection
cnn.ConnectionString = "Initial
Catalog=RegistraOcorrencia;Data
Source=Euclides;Trusted_Connection=True"

Dim cmd As New SqlCommand

Dim myString As String

‘String de sentença SQL para o Command


myString = "UPDATE Ocorrencia SET NaturezaPrimaria='" &
NaturezaPrimaria & "', Andar='" & _
Andar & "', Descricao='" & Descricao & "', Solicitante='"
& Solicitante & "', Fone='" & _
Fone & "', Data='" & Data & "', Hora='" & Hora & "',
Encaminhado='" & _
Encaminhado & "', Historico='" & Historico & "',
NaturezaDefinitiva='" & _
NaturezaDefinitiva & "', DataEncerramento='" &
DataEncerramento & "', Situacao='" & Situacao & "'"

Try

With cmd
.Connection = cnn
.CommandTimeout = 0
.CommandText = myString
.CommandType = CommandType.Text
End With
cnn.Open()
cmd.ExecuteNonQuery()
cnn.Close()

Catch mUpdate As System.Exception


Erro = mUpdate.ToString
End Try

End Function

A finalidade de nossa ultima função, embora aqui eu usei uma Sub (não há
problema) é a de Carregar, ou seja trazer os dados para consulta. A partir dessa
consulta é que os dados poderão ser atualizados, como aqui vamos fazer apenas
consulta, usaremos o DataReader, que é muito eficiente para este tipo de
consulta.

Public Sub Carregar(ByVal Numero As Integer)

‘Conexão com a base de dados String de conexão


Dim Cnn As SqlConnection = New SqlConnection
Cnn.ConnectionString = "Initial
Catalog=RegistraOcorrencia;Data
Source=Euclides;Trusted_Connection=True"

Dim Cmd As New SqlCommand


‘DataReader
Dim Dre As SqlDataReader

‘String de sentença SQL para o Command


Dim myString = "SELECT * FROM Ocorrencia WHERE Numero='"
& Numero & "'"

With Cmd
.Connection = Cnn
.CommandTimeout = 0
.CommandText = myString
.CommandType = CommandType.Text
End With

Try
Cnn.Open()
Dre = Cmd.ExecuteReader

‘Leitor de Dados em ação, igualando os campos criados da classe


com os dados que ele está lendo
While Dre.Read
Me._Numero = Dre!Numero
Me._NaturezaPrimaria = Dre!NaturezaPrimaria
Me._Andar = Dre!Andar
Me._Descricao = Dre!Descricao
Me._Solicitante = Dre!Solicitante
Me._Fone = Dre!Fone
Me._Data = Dre!data
Me._Hora = Dre!hora
Me._Encaminhado = Dre!Encaminhado
Me._Historico = Dre!Historico
Me._NaturezaDefinitiva = Dre!NaturezaDefinitiva
Me._DataEncerramento = Dre!DataEncerramento
Me._HoraEncerramento = Dre!HoraEncerramento
Me._Situacao = Dre!Situacao

End While

Catch mErro As System.Exception


Erro = mErro.ToString
If Cnn.State.Open Then
Cnn.Close()
End If
End Try
End Sub
End Class

Aqui termina nossa classe.

CONSTRUINDO O FORMULÁRIO

Em Solution Explorer com o botão direito no form1 mude o nome dele para
FrmSindico.vb e clique duas vezes nele para abri-lo.

Agora coloque os controles no formulário, conforme as principais


especificações que coloquei abaixo, esteja a vontade para mudá-las:

CONTROLE NOME PROPRIEDADES VALORES


Label LblNumero BackColor - Fonte Azul- Branca
Label LblData BackColor- Fonte Azul- Branca
Label LblHora BackColor- Fonte Azul- Branca
Label LblDataAtual BackColor- Fonte Azul- Branca
Label LblHoraAtual BackColor- Fonte Azul- Branca
Label LblSituacao BackColor- Fonte Azul- Branca
Label - Text Hora:
Label - Text Data:
Label - Text Reclamações
Label - Text Solicitente
Label - Text Andar
Label - Text Fone
Label - Text Local Específico
Label - Text Encaminhado Para:
Labe - Text Natureza:
Labe - Text Histórico:
Labe - Tex Ocorrência:
TextBox TxtNaturezaPrimaria Multiline True
TextBox TxtSolicitante - -
TextBox TxtFone - -
TextBox TxtEncaminhado - -
TextBox TxtNaturezaDefinitiva - -
TextBox TxtHistorico Multiline True
ComboBox CmbAndar - -
Button BtnSalvar Text &Salvar
Button BtnConsultar Text &Consultar
Button BtnLimpar Text &Limpar
Button BtnSair Text Sa&ir
Controle de
Form FormSindico Text Ocorrências do
Síndico
Timer - Interval – Enabled 1000 - True

Disponha no formulário conforme abaixo:


Da mesma maneira como fizemos com a classe de dados a SindicoData,
vamos organizar nossa parte de código em regiões:
Agora vamos começar a escrever nosso código, primeiro vamos
definir uma variável para saber se o registro que está sendo inserido no banco de
dados é um novo registro ou é uma registro que está sendo editado, para isso
usaremos uma variável e denominaremos ela de OcNewOrEdit e declararemos
ela como Private e do tipo Integer, afinal ela verificará a existência de ocorrências
que estão sendo inseridas ou editadas através do seu número.

Abra a treeview do Windows Form Designer generated code e digite


o código abaixo, para que quando você abrir o seu aplicativo, de imediato ele
retornará no label designado data atual:

Dim DataAtual As Date = Date.Now


Me.LblDataAtual.Text = Format(DataAtual.Date,
"dd/MM/yyyy")

Agora na região dos botões, no evento click do botão BtnSalvar, inclua o


seguinte código:

Private Sub BtnSalvar_Click(ByVal sender As System.Object, ByVal e


As System.EventArgs) Handles BtnSalvar.Click

‘Verifica se o registro é novo ou já existe,


If OcNewOrEdit <> 0 Then
Dim ObjSalva As New SindicoData
‘Se o registro já existir, então edita o registro existente
ObjSalva.Editar(TxtNumero.Text,
TxtNaturezaPrimaria.Text, CmbAndar.Text, TxtDescricao.Text,
TxtSolicitante.Text, _
TxtFone.Text, LblData.Text, LblHora.Text,
TxtEncaminhado.Text, TxtHistorico.Text,
TxtNaturezaDefinitiva.Text, _
LblDataAtual.Text, LblHoraAtual.Text, False) ‘O Valor de
Situação é alterado para false, assim saberemos que a já foi fechada e
solucionada.

If ObjSalva.Erro = "" Then


MsgBox("Ocorrência Atualizada com Sucesso!",
MsgBoxStyle.Information, "Síndico")
LimpaCampos()
Exit Sub
Else
MsgBox("Ocorreu um Erro ao Atualizar Ocorrência",
MsgBoxStyle.Exclamation, "Síndico")
LimpaCampos()
Exit Sub
End If

‘Se o registro não existir, então adiciona um novo registro.


Else
Dim ObjGrava As New SindicoData
ObjGrava.Salvar(TxtNaturezaPrimaria.Text,
CmbAndar.Text, TxtDescricao.Text, TxtSolicitante.Text, _
TxtFone.Text, LblDataAtual.Text,
LblHoraAtual.Text, TxtEncaminhado.Text, TxtHistorico.Text,
TxtNaturezaDefinitiva.Text, _
LblDataAtual.Text,
LblHoraAtual.Text, True) ‘O Valor de Situação é adicionado como
True, assim saberemos se a ocorrência ainda está em aberto

If ObjGrava.Erro = "" Then


MsgBox("Nova Ocorrência Gravada Com Sucesso!",
MsgBoxStyle.Information, "Síndico")
LimpaCampos()
Exit Sub
Else
MsgBox("Ocorreu um Erro ao Gravar Nova
Ocorrência!", MsgBoxStyle.Exclamation, "Síndico")
LimpaCampos()
Exit Sub
End If
End If
End Sub

O código abaixo realiza a consulta no evento click do botão BtnConsultar,


usamos aqui um InputBox, que faz uma pergunta ao usuário, que responde com o
número de uma ocorrência que deseja consultar, e o sistema retorna a consulta:

Private Sub BtnConsultar_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles BtnConsultar.Click

‘Cria um objeto para fazer a consulta na classe SindicoData


Dim ObjConsulta As New SindicoData

‘Cria um InputBox, com a pergunta e os dados necessários ao bom entendimento


da questão
Dim myPergunta As String
myPergunta = InputBox("Informe o Número da Ocorrência",
"Síndico", "Número")

If myPergunta <> "" Then


LimpaCampos()
ObjConsulta.Carregar(myPergunta)
Else
MsgBox("Favor Fornecer um Número Para Consulta!",
MsgBoxStyle.Exclamation, "Síndico")
Me.TxtNaturezaPrimaria.Focus()
Exit Sub
End If

If ObjConsulta.Numero = 0 Then
MsgBox("Ocorrência Não Encontrada!",
MsgBoxStyle.Exclamation, "Síndico")
Me.TxtNaturezaPrimaria.Focus()
Exit Sub
End If

If ObjConsulta.Erro = "" Then

‘Conforme as informações do usuário, faz a consulta e iguala os


campos dos controles do formulário a consulta.
With Me

Me.OcNewOrEdit = ObjConsulta.Numero
Me.TxtNumero.Text = Format(OcNewOrEdit, "00000")
Me.TxtNaturezaPrimaria.Text =
ObjConsulta.NaturezaPrimaria
Me.TxtSolicitante.Text = ObjConsulta.Solicitante
Me.CmbAndar.Text = ObjConsulta.Andar
Me.TxtDescricao.Text = ObjConsulta.Descricao
Me.TxtFone.Text = ObjConsulta.Fone
Me.LblData.Text = ObjConsulta.Data
Me.LblHora.Text = ObjConsulta.Hora
Me.TxtEncaminhado.Text = ObjConsulta.Encaminhado
Me.TxtHistorico.Text = ObjConsulta.Historico
Me.TxtNaturezaDefinitiva.Text =
ObjConsulta.NaturezaDefinitiva
If ObjConsulta.Situacao = True Then
‘Se a ocorrência ainda não foi alterada o valor é True então a
ocorrência estará em aberto
Me.LblSituacao.Text = "OCORRÊNCIA EM ABERTO"
Me.TxtNaturezaDefinitiva.Enabled = True
Me.TxtHistorico.Enabled = True

TxtNaturezaDefinitiva.Focus()

‘Caso contrário a ocorrência foi finalizada


Else
Me.LblSituacao.Text = "OCORRÊNCIA FINALIZADA"
End If
OcNewOrEdit = 1
End With
End If

End Sub
No botão BtnLimpar apenas colocaremos a referência a Sub LimpaCampos
que nós criaremos mais abaixo:

Private Sub BtnLimpar_Click(ByVal sender As System.Object, ByVal e


As System.EventArgs) Handles BtnLimpar.Click
LimpaCampos()
End Sub

Botão BtnSair, para encerrar o aplicativo.

Private Sub BtnSair_Click(ByVal sender As System.Object, ByVal


e As System.EventArgs) Handles BtnSair.Click
Me.Close()
End Sub

Função para limpar os campos do formulário.

Sub LimpaCampos()
Me.TxtNumero.Text = ""
Me.TxtNaturezaPrimaria.Text = ""
Me.TxtSolicitante.Text = ""
Me.TxtFone.Text = ""
Me.CmbAndar.Text = ""
Me.TxtDescricao.Text = ""
Me.LblSituacao.Text = ""
Me.TxtEncaminhado.Text = ""
Me.TxtHistorico.Text = ""
Me.TxtNaturezaDefinitiva.Text = ""
Me.LblData.Text = ""
Me.LblHora.Text = ""
Me.TxtNaturezaDefinitiva.Enabled = False
Me.TxtHistorico.Enabled = False
End Sub

Aqui colocaremos o Label HoraAtual para continuamente atualizar a hora


para isso usamos o controle timer e no evento tick o seguinte código:

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Timer1.Tick
LblHoraAtual.Text = TimeString
End Sub

CONCLUSÃO

Por fim, vamos executar o aplicativo:


Agora que todas as questões do nosso planejamento foram solucionadas,
nosso cliente ficará satisfeito com o registro das ocorrências do seu edifício, claro
que este dispositivo é apenas uma aplicação para uso em treinamento, talvez as
necessidades do Sindico sejam muito maiores que estas, mas se as necessidades
das nossas questões iniciais como Atores e Uso de Casos foram satisfeitas, então
o nosso aplicativo é um sucesso.
Espero que tenha contribuído para o crescimento da nossa comunidade, e
esclarecido algumas dúvidas, claro que, como vimos, os métodos usados aqui
foram os mais simples e fáceis possíveis, mas o aprimoramento depende do
esforço e do estudo de cada um, de qualquer forma me coloco a disposição para
esclarecimentos e outras questões que nossos usuários possam ter. Bom
proveito, estudem e até a próxima!!

Euclides Britto
euclidesbritto@vbnetgyn.com
www.vbnetgyn.com

Você também pode gostar