A poucos dias atrás peguei um aplicativo desenvolvido por uma outra pessoa para fazer a manutenção e uma das coisas que me chamou a atenção foi a forma utilizada por essa pessoa para colocar o mês com as iniciais do nome em inglês. A ideia inicial seria que o mês fosse exibido sempre da mesma forma, independente das configurações regionais do computador em que o aplicativo estivesse rodando. Para isso, o programador utilizou algo como abaixo descrito:
A ideia seria exibir a data no formato MAY/12/2012. Funciona corretamente. O problema é que após verificar todos os módulos de formulários e relatórios, me deparei com 24 blocos desses, sendo que em alguns tinham até 3 com variáveis nomeadas como mes1, mes2 e mes3, sendo cada uma dedicada a um campo diferente do formulário ou relatório.
Se cada bloco contem 25 linhas de código, multiplicando por 24 chegamos ao total de 600 linhas. Imagina o tempo gasto no processo, mesmo copiando e colando, pois tem que alterar nomes de campos e de variáveis. Tudo isso poderia ser simplificado utilizando uma função pública, na qual seria utilizado apenas um bloco:
Public Funtion Meses(Mes As String) As String
Dessa forma, tudo seria reduzido à apenas um bloco com 25 linhas. Mas, pensando bem, podemos reduzir ainda mais se utilizarmos Arrays em uma função pública.
O que é uma Array?
Na programação, Array pode ser definido como uma variável que armazena dados de um mesmo tipo. No exemplo acima, armazenaria a inicial dos nomes dos meses em inglês.
Quando colocamos os dados que queremos em um conjunto de dados dentro de uma Array, cada um desses dados recebe um índice que, por padrão, começa no índice 0(zero) igual às coluna de uma combobox ou listbox ou mesmo os índices dos campos de uma tabela. Para utilizarmos um determinado dado do conjunto, basta passar o número do índice. Para o caso dos meses, teríamos índices de 0 a 11.
Como utilizar a Array para capturar o número do mês?
Como dito acima, cada dado de um conjunto de dados de uma Array, possui um número que o identifica, assim como os meses podem ser numerados de 1 a 12. Como a Array, na sua forma padrão, inicia no zero, podemos pegar o número do mês menos 1 para compatibilizar com o número do mês na Array.
Para facilitar o processo e deixar a função disponível para qualquer formulário, relatório ou consulta, criaremos um módulo e, dentro desse módulo, criaremos uma função pública:
Pronto, agora basta utilizar a função Meses aonde precisarmos formatar a data. Ainda utilizando o exemplo que deu origem a esse artigo, podemos fazer assim:
Me.datacadastro = Meses(Format(rs!Data, "m") - 1) & Format(rs!Data, "/dd/yyyy")
Nesse caso, o Format(rs!Data, "m") captura o número do mês no campo rs!Data de um determinado registro. Se o mês em questão for maio, o número "m" será 5. Na nossa Array, o índice, ou seja, o número de "MAY" é 4, pois a Array começa no 0. Por isso utilizamo o - 1 para subtrair 1 número para fazer a equivalência entre o mês do registro e a Array.
Veja que utilizando Array, o número de linhas de código caiu de 600 para apenas 3, ou seja, 0,5% do total de linhas inicial. Não é uma maravilha?
Aqui finalizamos nosso artigo referente à esse assunto. Espero que possa ser útil.
Dim mes As String
If Format(rs!Data, "m") = 1 Then
mes = "JAN"
ElseIf Format(rs!Data, "m") = 2 Then
mes = "FEB"
ElseIf Format(rs!Data, "m") = 3 Then
mes = "MAR"
ElseIf Format(rs!Data, "m") = 4 Then
mes = "APR"
ElseIf Format(rs!Data, "m") = 5 Then
mes = "MAY"
ElseIf Format(rs!Data, "m") = 6 Then
mes = "JUN"
ElseIf Format(rs!Data, "m") = 7 Then
mes = "JUL"
ElseIf Format(rs!Data, "m") = 8 Then
mes = "AUG"
ElseIf Format(rs!Data, "m") = 9 Then
mes = "SEP"
ElseIf Format(rs!Data, "m") = 10 Then
mes = "OCT"
ElseIf Format(rs!Data, "m") = 11 Then
mes = "NOV"
ElseIf Format(rs!Data, "m") = 12 Then
mes = "DEC"
End If
Me.datacadastro = mes & Format(rs!Data, "/dd/yyyy")
A ideia seria exibir a data no formato MAY/12/2012. Funciona corretamente. O problema é que após verificar todos os módulos de formulários e relatórios, me deparei com 24 blocos desses, sendo que em alguns tinham até 3 com variáveis nomeadas como mes1, mes2 e mes3, sendo cada uma dedicada a um campo diferente do formulário ou relatório.
Se cada bloco contem 25 linhas de código, multiplicando por 24 chegamos ao total de 600 linhas. Imagina o tempo gasto no processo, mesmo copiando e colando, pois tem que alterar nomes de campos e de variáveis. Tudo isso poderia ser simplificado utilizando uma função pública, na qual seria utilizado apenas um bloco:
Public Funtion Meses(Mes As String) As String
Dessa forma, tudo seria reduzido à apenas um bloco com 25 linhas. Mas, pensando bem, podemos reduzir ainda mais se utilizarmos Arrays em uma função pública.
O que é uma Array?
Na programação, Array pode ser definido como uma variável que armazena dados de um mesmo tipo. No exemplo acima, armazenaria a inicial dos nomes dos meses em inglês.
Quando colocamos os dados que queremos em um conjunto de dados dentro de uma Array, cada um desses dados recebe um índice que, por padrão, começa no índice 0(zero) igual às coluna de uma combobox ou listbox ou mesmo os índices dos campos de uma tabela. Para utilizarmos um determinado dado do conjunto, basta passar o número do índice. Para o caso dos meses, teríamos índices de 0 a 11.
Como utilizar a Array para capturar o número do mês?
Como dito acima, cada dado de um conjunto de dados de uma Array, possui um número que o identifica, assim como os meses podem ser numerados de 1 a 12. Como a Array, na sua forma padrão, inicia no zero, podemos pegar o número do mês menos 1 para compatibilizar com o número do mês na Array.
Para facilitar o processo e deixar a função disponível para qualquer formulário, relatório ou consulta, criaremos um módulo e, dentro desse módulo, criaremos uma função pública:
- Código:
Public Function Meses() As Variant
Meses = Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC")
End Function
Pronto, agora basta utilizar a função Meses aonde precisarmos formatar a data. Ainda utilizando o exemplo que deu origem a esse artigo, podemos fazer assim:
Me.datacadastro = Meses(Format(rs!Data, "m") - 1) & Format(rs!Data, "/dd/yyyy")
Nesse caso, o Format(rs!Data, "m") captura o número do mês no campo rs!Data de um determinado registro. Se o mês em questão for maio, o número "m" será 5. Na nossa Array, o índice, ou seja, o número de "MAY" é 4, pois a Array começa no 0. Por isso utilizamo o - 1 para subtrair 1 número para fazer a equivalência entre o mês do registro e a Array.
Veja que utilizando Array, o número de linhas de código caiu de 600 para apenas 3, ou seja, 0,5% do total de linhas inicial. Não é uma maravilha?
Aqui finalizamos nosso artigo referente à esse assunto. Espero que possa ser útil.