Amigos.. Quando me cadastrei no Fórum foi o meu início no mundo da programação e de imediato comecei em um programa para uma instituição governamental a qual exigia um sistema robusto e livre de erros, justamente por se tratar de algo sério.
Pois bem.. fiz o sistema e até hoje funcionou muito bem... No entanto como logo terei que me mudar de localidade não teria como estar presente caso o sistema apresentasse alguma falha, por este motivo estou fazendo uma revisão completa neste sistema com o intuito de deixá-lo auto instalável (com instalador) compilado, para adicionar referências automaticamente, bem como prever possíveis erros e tratá-los.
O sistema já tinha sistema de tratamento de erros e outras facilidades...Mas na revisão que estou fazendo agora encontrei diversos erros que hoje no nível que me encontro não os cometo.
Por isso no fórum sempre exortamos aos usuários a padronizarem:
>> Nome da campo
>> Nome de tabela
>> nome de objeto
>> cuidado com palavras reservadas
>> tratamento de erros
>> Padronização na escrita de códigos e aplicar as suas devidas explicações.
Certo dia atrás vi um post de um colega falando como ao trabalhar em um projeto antigo que tinha feito, seus próprios códigos lhe pareciam hieroglífos
pois como não havia adicionado comentários precisava perder tempo importante para entender seus próprios códigos.
E assim está sendo a situação que estou passando neste projeto primeiro meu tendo que revisá-lo.
Então darei uma dica para que possam padronizar a sua escrita de códigos
Postarei aqui um pequeno exemplo de um código escrito que a meu ver está de fácil compreensão na leitura
Declare no módulo sempre:
Option Explicit
Suponha que não tenha feito isto e declare uma variável e depois irá carregá-la com alguma informção:
Dim strVariável as string
strVariavel = "Informação"
Observe que se não estiver declarado a expressão Option Explicit.. ao depurar seu aplicativo não exibirá o erro. Qual erro?
veja que na declaração da variável a mesma tem acento enquanto que no carregamento a mesma não o possui.
Se declarar a expressão Option Explicit este erro será exibido. Porque?
Porque você declarou uma variável e não a utilizou pois está a declarando diretamente no carregamento.
>>> Procure declara a variável de acordo com o seu tipo, Integer, Long, String, Boolean, Double etc.. (temos no fórum material sobre isto)
>>> Procure tabular o seu código corretamente, assim terá fácil entendimento sequencial na execução do seu código sabendo
para que cláusula o mesmo é direcionado, qual End If, qual Exit Sub, qual exit Function, qual If, qual Else
Exemplo de uma tabulação correta:
If X > 1 Then
If X = 2 Then
Select Case XXX
Case A
Seu código
Case B
Seu código
End Select
End If
End If
Exemplo de código com cabeçalho, comentários e tabulação conforme.
'---------------------------------------------------------------------------------------
' Procedure : Aplica Filtro
' Author : Harysohn P. Pina (PILOTO) - Harysohn@hotmail.com
' Fórum : Fórum Máximo Access - http://maximoaccess.forumeiros.com/
' Date : 17/09/2013
' Comentários : Este código percorre todos as caixas texto do formulário checando:
' Se a mesma está vazia ou nula, se o foco está no controle
' A verificação do foco no controle é necessário pois se estiver o foco
' no controle utilizamos a expressão .Text que pega imediatamente a
' palavra digitada ou parte após a digitação. Caso não seja utilizada
' esta propriedade o filtro pegará apenas a parte digitada excetuando
' a última letra digitada na caixa texto
' > Observe que carrega 6 controles para filtro sendo que no controle
' em que o foco está ativo carrega na variável ColunaList o número
' da coluna correspondete para utilizar na função que seleciona o
' registro na listbox
'---------------------------------------------------------------------------------------
Function AplicaFiltro()
Dim strSql As String
Dim ColunaList As Integer
Call PercorreControl
'---------------------------------------------------
'Parte inicial da SQL com a tabela e a claúsula WHRE
'para o primeiro campo não checamos o comprimento
'pois ele é necessário para a composição da SQL
'---------------------------------------------------
strSql = "SELECT * FROM dbo_Clientes WHERE "
'--------------------------------------
'verifica se o controle está com o foco
'--------------------------------------
If Me.ActiveControl.Name = "txt_Nome" Then
'---------------------------------------------------------------------------------
'Concatena a SQL na variável com a expressão .Text pois o controle está com o foco
'---------------------------------------------------------------------------------
strSql = strSql & "Nome Like '*" & Me.txt_nome.text & "*'"
'----------------------------------------------------------------------------
'Se o controle tem o foco aplica na variável ColunaList o número da coluna da
'listBox correspondente ao controle
'----------------------------------------------------------------------------
ColunaList = 2
Else
'--------------------------------------------------------
'Concatena a SQL na variável sem com o filtro respectivo
'--------------------------------------------------------
strSql = strSql & "Nome Like '*" & Filtro1 & "*'"
End If
'-------------------------------------------------------------------------------------------
'Checagem do segundo campo do filtro, verificando se a caixa texto é nula ou está em branco
'-------------------------------------------------------------------------------------------
If Len("" & Filtro2) > 0 Then
'--------------------------------------
'verifica se o controle está com o foco
'--------------------------------------
If Me.ActiveControl.Name = "Morada" Then
'---------------------------------------------------------------------------------
'Concatena a SQL na variável com a expressão .Text pois o controle está com o foco
'---------------------------------------------------------------------------------
strSql = strSql & " And Fac_Mor Like '*" & Me.MORADA.text & "*'"
'----------------------------------------------------------------------------
'Se o controle tem o foco aplica na variável ColunaList o número da coluna da
'listBox correspondente ao controle
'----------------------------------------------------------------------------
ColunaList = 3
Else
'--------------------------------------------------------
'Concatena a SQL na variável sem com o filtro respectivo
'--------------------------------------------------------
strSql = strSql & " And Fac_Mor Like '*" & Filtro2 & "*'"
End If
End If
'-------------------------------------------------------------------------------------------
'Checagem do terceiro campo do filtro, verificando se a caixa texto é nula ou está em branco
'-------------------------------------------------------------------------------------------
If Len("" & Filtro3) > 0 Then
'--------------------------------------
'verifica se o controle está com o foco
'--------------------------------------
If Me.ActiveControl.Name = "Localidade" Then
'---------------------------------------------------------------------------------
'Concatena a SQL na variável com a expressão .Text pois o controle está com o foco
'---------------------------------------------------------------------------------
strSql = strSql & " And Fac_Local Like '*" & Me.localidade.text & "*'"
'----------------------------------------------------------------------------
'Se o controle tem o foco aplica na variável ColunaList o número da coluna da
'listBox correspondente ao controle
'----------------------------------------------------------------------------
ColunaList = 4
Else
'--------------------------------------------------------
'Concatena a SQL na variável sem com o filtro respectivo
'--------------------------------------------------------
strSql = strSql & " And Fac_Local Like '*" & Filtro3 & "*'"
End If
End If
'-------------------------------------------------------------------------------------------
'Checagem do quarto campo do filtro, verificando se a caixa texto é nula ou está em branco
'-------------------------------------------------------------------------------------------
If Len("" & Filtro4) > 0 Then
'--------------------------------------
'verifica se o controle está com o foco
'--------------------------------------
If Me.ActiveControl.Name = "Telefone" Then
'---------------------------------------------------------------------------------
'Concatena a SQL na variável com a expressão .Text pois o controle está com o foco
'---------------------------------------------------------------------------------
strSql = strSql & " And Fac_Tel Like '*" & Me.telefone.text & "*'"
'----------------------------------------------------------------------------
'Se o controle tem o foco aplica na variável ColunaList o número da coluna da
'listBox correspondente ao controle
'----------------------------------------------------------------------------
ColunaList = 5
Else
'--------------------------------------------------------
'Concatena a SQL na variável sem com o filtro respectivo
'--------------------------------------------------------
strSql = strSql & " And Fac_Tel Like '*" & Filtro4 & "*'"
End If
End If
'-------------------------------------------------------------------------------------------
'Checagem do quinto campo do filtro, verificando se a caixa texto é nula ou está em branco
'-------------------------------------------------------------------------------------------
If Len("" & Filtro5) > 0 Then
'--------------------------------------
'verifica se o controle está com o foco
'--------------------------------------
If Me.ActiveControl.Name = "Telefone2" Then
'---------------------------------------------------------------------------------
'Concatena a SQL na variável com a expressão .Text pois o controle está com o foco
'---------------------------------------------------------------------------------
strSql = strSql & " And Telefone2 Like '*" & Me.telefone2.text & "*'"
'----------------------------------------------------------------------------
'Se o controle tem o foco aplica na variável ColunaList o número da coluna da
'listBox correspondente ao controle
'----------------------------------------------------------------------------
ColunaList = 6
Else
'--------------------------------------------------------
'Concatena a SQL na variável sem com o filtro respectivo
'--------------------------------------------------------
strSql = strSql & " And Telefone2 '*" & Filtro5 & "*'"
End If
End If
'-------------------------------------------------------------------------------------------
'Checagem do sexto campo do filtro, verificando se a caixa texto é nula ou está em branco
'-------------------------------------------------------------------------------------------
If Len("" & Filtro6) > 0 Then
'--------------------------------------
'verifica se o controle está com o foco
'--------------------------------------
If Me.ActiveControl.Name = "Contribuinte" Then
'---------------------------------------------------------------------------------
'Concatena a SQL na variável com a expressão .Text pois o controle está com o foco
'---------------------------------------------------------------------------------
strSql = strSql & " And NumContrib Like '*" & Me.contribuinte.text & "*'"
'----------------------------------------------------------------------------
'Se o controle tem o foco aplica na variável ColunaList o número da coluna da
'listBox correspondente ao controle
'----------------------------------------------------------------------------
ColunaList = 7
Else
'--------------------------------------------------------
'Concatena a SQL na variável sem com o filtro respectivo
'--------------------------------------------------------
strSql = strSql & " And NumContrib '*" & Filtro6 & "*'"
End If
End If
'---------------------------------------------------------------------------
'Concatena a SQL para adiciona o ordenamento pelo nome do Cliente na ListBox
'---------------------------------------------------------------------------
strSql = strSql & " ORDER BY Nome"
'---------------------------
'Carrega a ListBox com a SQL
'---------------------------
Me.lst_1.RowSource = strSql
'-----------------------------------------------------
'Chama a função para selecionar o registro na lista
'Observe que aplica o nome do controle que tem o foco
'e a coluna correspondete à caixa texto da digitação
'-----------------------------------------------------
Call SelecionaRegistro(Me.ActiveControl.Name, ColunaList)
End Function
Sucesso!
Pois bem.. fiz o sistema e até hoje funcionou muito bem... No entanto como logo terei que me mudar de localidade não teria como estar presente caso o sistema apresentasse alguma falha, por este motivo estou fazendo uma revisão completa neste sistema com o intuito de deixá-lo auto instalável (com instalador) compilado, para adicionar referências automaticamente, bem como prever possíveis erros e tratá-los.
O sistema já tinha sistema de tratamento de erros e outras facilidades...Mas na revisão que estou fazendo agora encontrei diversos erros que hoje no nível que me encontro não os cometo.
Por isso no fórum sempre exortamos aos usuários a padronizarem:
>> Nome da campo
>> Nome de tabela
>> nome de objeto
>> cuidado com palavras reservadas
>> tratamento de erros
>> Padronização na escrita de códigos e aplicar as suas devidas explicações.
Certo dia atrás vi um post de um colega falando como ao trabalhar em um projeto antigo que tinha feito, seus próprios códigos lhe pareciam hieroglífos
pois como não havia adicionado comentários precisava perder tempo importante para entender seus próprios códigos.
E assim está sendo a situação que estou passando neste projeto primeiro meu tendo que revisá-lo.
Então darei uma dica para que possam padronizar a sua escrita de códigos
Postarei aqui um pequeno exemplo de um código escrito que a meu ver está de fácil compreensão na leitura
Declare no módulo sempre:
Option Explicit
Suponha que não tenha feito isto e declare uma variável e depois irá carregá-la com alguma informção:
Dim strVariável as string
strVariavel = "Informação"
Observe que se não estiver declarado a expressão Option Explicit.. ao depurar seu aplicativo não exibirá o erro. Qual erro?
veja que na declaração da variável a mesma tem acento enquanto que no carregamento a mesma não o possui.
Se declarar a expressão Option Explicit este erro será exibido. Porque?
Porque você declarou uma variável e não a utilizou pois está a declarando diretamente no carregamento.
>>> Procure declara a variável de acordo com o seu tipo, Integer, Long, String, Boolean, Double etc.. (temos no fórum material sobre isto)
>>> Procure tabular o seu código corretamente, assim terá fácil entendimento sequencial na execução do seu código sabendo
para que cláusula o mesmo é direcionado, qual End If, qual Exit Sub, qual exit Function, qual If, qual Else
Exemplo de uma tabulação correta:
If X > 1 Then
If X = 2 Then
Select Case XXX
Case A
Seu código
Case B
Seu código
End Select
End If
End If
Exemplo de código com cabeçalho, comentários e tabulação conforme.
'---------------------------------------------------------------------------------------
' Procedure : Aplica Filtro
' Author : Harysohn P. Pina (PILOTO) - Harysohn@hotmail.com
' Fórum : Fórum Máximo Access - http://maximoaccess.forumeiros.com/
' Date : 17/09/2013
' Comentários : Este código percorre todos as caixas texto do formulário checando:
' Se a mesma está vazia ou nula, se o foco está no controle
' A verificação do foco no controle é necessário pois se estiver o foco
' no controle utilizamos a expressão .Text que pega imediatamente a
' palavra digitada ou parte após a digitação. Caso não seja utilizada
' esta propriedade o filtro pegará apenas a parte digitada excetuando
' a última letra digitada na caixa texto
' > Observe que carrega 6 controles para filtro sendo que no controle
' em que o foco está ativo carrega na variável ColunaList o número
' da coluna correspondete para utilizar na função que seleciona o
' registro na listbox
'---------------------------------------------------------------------------------------
Function AplicaFiltro()
Dim strSql As String
Dim ColunaList As Integer
Call PercorreControl
'---------------------------------------------------
'Parte inicial da SQL com a tabela e a claúsula WHRE
'para o primeiro campo não checamos o comprimento
'pois ele é necessário para a composição da SQL
'---------------------------------------------------
strSql = "SELECT * FROM dbo_Clientes WHERE "
'--------------------------------------
'verifica se o controle está com o foco
'--------------------------------------
If Me.ActiveControl.Name = "txt_Nome" Then
'---------------------------------------------------------------------------------
'Concatena a SQL na variável com a expressão .Text pois o controle está com o foco
'---------------------------------------------------------------------------------
strSql = strSql & "Nome Like '*" & Me.txt_nome.text & "*'"
'----------------------------------------------------------------------------
'Se o controle tem o foco aplica na variável ColunaList o número da coluna da
'listBox correspondente ao controle
'----------------------------------------------------------------------------
ColunaList = 2
Else
'--------------------------------------------------------
'Concatena a SQL na variável sem com o filtro respectivo
'--------------------------------------------------------
strSql = strSql & "Nome Like '*" & Filtro1 & "*'"
End If
'-------------------------------------------------------------------------------------------
'Checagem do segundo campo do filtro, verificando se a caixa texto é nula ou está em branco
'-------------------------------------------------------------------------------------------
If Len("" & Filtro2) > 0 Then
'--------------------------------------
'verifica se o controle está com o foco
'--------------------------------------
If Me.ActiveControl.Name = "Morada" Then
'---------------------------------------------------------------------------------
'Concatena a SQL na variável com a expressão .Text pois o controle está com o foco
'---------------------------------------------------------------------------------
strSql = strSql & " And Fac_Mor Like '*" & Me.MORADA.text & "*'"
'----------------------------------------------------------------------------
'Se o controle tem o foco aplica na variável ColunaList o número da coluna da
'listBox correspondente ao controle
'----------------------------------------------------------------------------
ColunaList = 3
Else
'--------------------------------------------------------
'Concatena a SQL na variável sem com o filtro respectivo
'--------------------------------------------------------
strSql = strSql & " And Fac_Mor Like '*" & Filtro2 & "*'"
End If
End If
'-------------------------------------------------------------------------------------------
'Checagem do terceiro campo do filtro, verificando se a caixa texto é nula ou está em branco
'-------------------------------------------------------------------------------------------
If Len("" & Filtro3) > 0 Then
'--------------------------------------
'verifica se o controle está com o foco
'--------------------------------------
If Me.ActiveControl.Name = "Localidade" Then
'---------------------------------------------------------------------------------
'Concatena a SQL na variável com a expressão .Text pois o controle está com o foco
'---------------------------------------------------------------------------------
strSql = strSql & " And Fac_Local Like '*" & Me.localidade.text & "*'"
'----------------------------------------------------------------------------
'Se o controle tem o foco aplica na variável ColunaList o número da coluna da
'listBox correspondente ao controle
'----------------------------------------------------------------------------
ColunaList = 4
Else
'--------------------------------------------------------
'Concatena a SQL na variável sem com o filtro respectivo
'--------------------------------------------------------
strSql = strSql & " And Fac_Local Like '*" & Filtro3 & "*'"
End If
End If
'-------------------------------------------------------------------------------------------
'Checagem do quarto campo do filtro, verificando se a caixa texto é nula ou está em branco
'-------------------------------------------------------------------------------------------
If Len("" & Filtro4) > 0 Then
'--------------------------------------
'verifica se o controle está com o foco
'--------------------------------------
If Me.ActiveControl.Name = "Telefone" Then
'---------------------------------------------------------------------------------
'Concatena a SQL na variável com a expressão .Text pois o controle está com o foco
'---------------------------------------------------------------------------------
strSql = strSql & " And Fac_Tel Like '*" & Me.telefone.text & "*'"
'----------------------------------------------------------------------------
'Se o controle tem o foco aplica na variável ColunaList o número da coluna da
'listBox correspondente ao controle
'----------------------------------------------------------------------------
ColunaList = 5
Else
'--------------------------------------------------------
'Concatena a SQL na variável sem com o filtro respectivo
'--------------------------------------------------------
strSql = strSql & " And Fac_Tel Like '*" & Filtro4 & "*'"
End If
End If
'-------------------------------------------------------------------------------------------
'Checagem do quinto campo do filtro, verificando se a caixa texto é nula ou está em branco
'-------------------------------------------------------------------------------------------
If Len("" & Filtro5) > 0 Then
'--------------------------------------
'verifica se o controle está com o foco
'--------------------------------------
If Me.ActiveControl.Name = "Telefone2" Then
'---------------------------------------------------------------------------------
'Concatena a SQL na variável com a expressão .Text pois o controle está com o foco
'---------------------------------------------------------------------------------
strSql = strSql & " And Telefone2 Like '*" & Me.telefone2.text & "*'"
'----------------------------------------------------------------------------
'Se o controle tem o foco aplica na variável ColunaList o número da coluna da
'listBox correspondente ao controle
'----------------------------------------------------------------------------
ColunaList = 6
Else
'--------------------------------------------------------
'Concatena a SQL na variável sem com o filtro respectivo
'--------------------------------------------------------
strSql = strSql & " And Telefone2 '*" & Filtro5 & "*'"
End If
End If
'-------------------------------------------------------------------------------------------
'Checagem do sexto campo do filtro, verificando se a caixa texto é nula ou está em branco
'-------------------------------------------------------------------------------------------
If Len("" & Filtro6) > 0 Then
'--------------------------------------
'verifica se o controle está com o foco
'--------------------------------------
If Me.ActiveControl.Name = "Contribuinte" Then
'---------------------------------------------------------------------------------
'Concatena a SQL na variável com a expressão .Text pois o controle está com o foco
'---------------------------------------------------------------------------------
strSql = strSql & " And NumContrib Like '*" & Me.contribuinte.text & "*'"
'----------------------------------------------------------------------------
'Se o controle tem o foco aplica na variável ColunaList o número da coluna da
'listBox correspondente ao controle
'----------------------------------------------------------------------------
ColunaList = 7
Else
'--------------------------------------------------------
'Concatena a SQL na variável sem com o filtro respectivo
'--------------------------------------------------------
strSql = strSql & " And NumContrib '*" & Filtro6 & "*'"
End If
End If
'---------------------------------------------------------------------------
'Concatena a SQL para adiciona o ordenamento pelo nome do Cliente na ListBox
'---------------------------------------------------------------------------
strSql = strSql & " ORDER BY Nome"
'---------------------------
'Carrega a ListBox com a SQL
'---------------------------
Me.lst_1.RowSource = strSql
'-----------------------------------------------------
'Chama a função para selecionar o registro na lista
'Observe que aplica o nome do controle que tem o foco
'e a coluna correspondete à caixa texto da digitação
'-----------------------------------------------------
Call SelecionaRegistro(Me.ActiveControl.Name, ColunaList)
End Function
Sucesso!