MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    Arrays - veja como utilizá-las para simplificar e automatizar tarefas

    criquio
    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11228
    Registrado : 30/12/2009

    Arrays - veja como utilizá-las para simplificar e automatizar tarefas Empty Arrays - veja como utilizá-las para simplificar e automatizar tarefas

    Mensagem  criquio em 12/5/2012, 18:07

    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:

    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.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    Marcelo David
    Marcelo David
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3212
    Registrado : 21/04/2011

    Arrays - veja como utilizá-las para simplificar e automatizar tarefas Empty Re: Arrays - veja como utilizá-las para simplificar e automatizar tarefas

    Mensagem  Marcelo David em 12/5/2012, 21:27

    A explicação mais clara de Array que eu ja vi!! Parabéns mestre!


    .................................................................................
    Marcelo David | Arrays - veja como utilizá-las para simplificar e automatizar tarefas LinkedIn_Icon.jpg.original LinkedIn
    https://www.freetool.dev
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12227
    Registrado : 01/03/2011

    Arrays - veja como utilizá-las para simplificar e automatizar tarefas Empty Re: Arrays - veja como utilizá-las para simplificar e automatizar tarefas

    Mensagem  HARYSOHN em 17/5/2012, 03:08

    Aproveitando a Deixa, em uma solução no fórum.

    Encontrar o maior valor em uma Variável Array.

    No Click de um Botão....


    Código:

    Private Sub Comando0_Click()
    Dim VarTeste(1 To 10) As Integer
    Dim VarResult As Integer
    Dim X, A As Integer

    VarTeste(1) = 3
    VarTeste(2) = 5
    VarTeste(3) = 10
    VarTeste(4) = 88
    VarTeste(5) = 78
    VarTeste(6) = 14
    VarTeste(7) = 12
    VarTeste(8) = 164
    VarTeste(9) = 45
    VarTeste(10) = 9
    X = 1
    VarResult = 0
    For X = 1 To 10
    A = VarTeste(X)

        If VarResult < A Then
        VarResult = A
        End If
    Next X
       
        MsgBox VarResult
    End Sub

    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12227
    Registrado : 01/03/2011

    Arrays - veja como utilizá-las para simplificar e automatizar tarefas Empty Re: Arrays - veja como utilizá-las para simplificar e automatizar tarefas

    Mensagem  HARYSOHN em 20/5/2012, 22:13

    Amigão aproveitando o assunto, uma solução que fiz em um form utilizando uma Array.

    Eu tenho um form de pesquisa onde capturo informações da colula da listbox e lançar em caixas texto no form, para posteriormente incluir em uma outra tabela de Detalhes do Pedido.

    A solução anterior era essa:
    Código:

            Forms!frm_Pedido.txtFornecedor.Value = Me.ltxListaProdutos.Column(2, Linha)
            Forms!frm_Pedido.txtFabricante.Value = Me.ltxListaProdutos.Column(3, Linha)
            Forms!frm_Pedido.txtLargura.Value = Me.ltxListaProdutos.Column(4, Linha)
            Forms!frm_Pedido.txtAltura.Value = Me.ltxListaProdutos.Column(5, Linha)
            Forms!frm_Pedido.txtGramatura.Value = Me.ltxListaProdutos.Column(6, Linha)
            Forms!frm_Pedido.txtFolhas.Value = Me.ltxListaProdutos.Column(7, Linha)

    ============================
    E para a instrução SQL:
    ============================

        DoCmd.RunSQL "INSERT INTO tbl_DetalhePedido (ID_Pedido, Mercadoria, Fabricante, Fornecedor," _
                & " TamLargura, TamAltura, Gramatura, QtdFolhas, Peso, quantidade, Desconto," _
                & " ValorUnitario, ValorVenda, IDproduto) Values ('" & Me.txtPedido.Value & "' , '" & Me.txtDescricao & "' , " _
                & " '" & Me.txtFabricante & "' , '" & Me.txtFornecedor & "' , '" & Me.txtLargura.Value & "' , '" & Me.txtAltura & "' ," _
                & " '" & Me.txtGramatura & "' ,'" & Me.txtFolhas & "' , '" & Me.txtPeso & "' , '" & Me.txtQtde & "'," _
                & " '" & Me.txtDesconto & "' , '" & Me.txtPrecoUnitario & "' , '" & Me.txtSubTotal & "' , '" & Me.txtID & "')"


    Vejamos então a solução utilizando uma Array:


    Criei uma Variável Publica em um módulo que intitulei: VariaveisPublicas
    Option Compare Database
    Public VarPedido As String



    No Form de Pesquisa onde antes refernciava caixas texto no segundo form carreguei a variável concatenando as colunas da list:

    Código:

            VarPedido = Me.ltxListaProdutos.Column(2, Linha) & ":" & Me.ltxListaProdutos.Column(3, Linha) _
            & ":" & Me.ltxListaProdutos.Column(4, Linha) & ":" & Me.ltxListaProdutos.Column(5, Linha) _
            & ":" & Me.ltxListaProdutos.Column(6, Linha) & ":" & Me.ltxListaProdutos.Column(7, Linha) _
            & ":" & Me.ltxListaProdutos.Column(11, Linha)

    No Segundo form que irá trabalha com as variáveis utilizei o comando Split para dividir as informações
    Observe que concatenei as colunas com ":"

    Código:

        StrPedido = Split("" & VarPedido & "", ":")

    =======================================
    E na SQL utilizo a variável já separada
    =======================================

                DoCmd.RunSQL "INSERT INTO tbl_DetalhePedido (ID_Pedido, Mercadoria, Fabricante, Fornecedor," _
                & " TamLargura, TamAltura, Gramatura, QtdFolhas, Peso, quantidade, Desconto," _
                & " ValorUnitario, ValorVenda, IDproduto) Values ('" & Me.txtPedido.Value & "' , '" & Me.txtDescricao & "' , " _
                & " '" & StrPedido(0) & "' ,  '" & StrPedido(1) & "' , '" & StrPedido(2) & "' , '" & StrPedido(3) & "' ," _
                & " '" & StrPedido(4) & "' ,'" & StrPedido(5) & "' , '" & StrPedido(6) & "' , '" & Me.txtQtde & "'," _
                & " '" & Me.txtDesconto & "' , '" & Me.txtPrecoUnitario & "' , '" & Me.txtSubTotal & "' , '" & Me.txtID & "')"

    Conclusão: Desta Maneira evitamos trabalho no form na criação de caixas texto para receber este valores, tornando o form mais limpo e economizando algumas linhas e poupando trabalho na criação de caixas texto.Cumprimentos.
    Luiz Carlos Junior
    Luiz Carlos Junior
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 473
    Registrado : 21/08/2012

    Arrays - veja como utilizá-las para simplificar e automatizar tarefas Empty Re: Arrays - veja como utilizá-las para simplificar e automatizar tarefas

    Mensagem  Luiz Carlos Junior em 7/10/2013, 19:44

    Um dos melhores tópicos do fórum.

    Não utilizava array, pois, não tinha ideia de como utilizá-la.

    Parabéns e obrigado pelas aulas!

    Abrasss!!!
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12227
    Registrado : 01/03/2011

    Arrays - veja como utilizá-las para simplificar e automatizar tarefas Empty Re: Arrays - veja como utilizá-las para simplificar e automatizar tarefas

    Mensagem  HARYSOHN em 14/11/2013, 17:47

    Mais sobre Array:
    Um comentário em um código que fiz que explica algumas funções de uma Array:


    '                 Neste ponto eu crio uma Matriz temporária para conter os valores do registro
    '                 no recodset e redimensiono a matriz VarRsUndo para lhe aumentar 1 registro
    '                 Observe a instrução que utilizo para isso:
    '                 ________________________________________________________________
    '                 >>>>> ReDim Preseve VarRsUndo(NumeroColunas,NumeroRegistro) <<<<
    '                 ================================================================
    '                 A instrução ReDim Redimensiona a Matriz em número de colunas e linhas e
    '                 a instrução Preserve mantém os valores anteriores que estão na matriz
    '                 seguidamente realizo um loop na Matriz temporária em suas colunas e a
    '                 cada loop vou adicionando os valores na respectiva coluna e na nova linha
    '                 inserida no comando ReDim


    Cumprimentos.
    ahteixeira
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 6957
    Registrado : 15/03/2013

    Arrays - veja como utilizá-las para simplificar e automatizar tarefas Empty Re: Arrays - veja como utilizá-las para simplificar e automatizar tarefas

    Mensagem  ahteixeira em 11/8/2014, 22:02

    Excelente contribuição e forma como está a explicado. Parabéns  cheers 

      Data/hora atual: 4/12/2020, 13:56