MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

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

    [Resolvido]Acrescentar dados em uma matriz bidimensional

    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Acrescentar dados em uma matriz bidimensional Empty Acrescentar dados em uma matriz bidimensional

    Mensagem  HARYSOHN 3/7/2013, 06:12

    Amigos, criei esta funcão que pelo método GetRows adiciona um registro de uma tabela em uma matriz bidimensional..
    O que pretendo é a cada clique de um botão va acrescentando registros na matriz.. porém ao ser executado o clique, ela não adiciona os dados.. apenas os substitui. O que fazer:


    Function CarregaUndo(RstUndo As DAO.Recordset)
    On Error Resume Next
    If nCountUndo > 0 Then GoTo continuar
    nCountUndo = 0
    continuar:
    ReDim varRsUndo(12, nCountUndo)
    varRsUndo = RstUndo.GetRows(nCountUndo): nCountUndo = nCountUndo + 1 'passa o recordset para a variável varRsUndo
    MsgBox varRsUndo(4, 0)
    MsgBox varRsUndo(4, 1)
    MsgBox varRsUndo(4, 2)


    cumprimentos.
    Marco Messa
    Marco Messa
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 291
    Registrado : 28/06/2010

    [Resolvido]Acrescentar dados em uma matriz bidimensional Empty Re: [Resolvido]Acrescentar dados em uma matriz bidimensional

    Mensagem  Marco Messa 3/7/2013, 16:53

    Já tentou não passar o parâmetro do método GetRows? Ele é opcional, nele você define a quantidade de linhas que quer retornar do recordset.

    Só pra deixar mais claro, você quer que a cada vez que passar um recordset pra essa função ele acrescente no mesmo array ou apenas carregar todos os dados do recordset passado?


    Abs Cool 


    .................................................................................
    Tea with me that I book your face Cool
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Acrescentar dados em uma matriz bidimensional Empty Re: [Resolvido]Acrescentar dados em uma matriz bidimensional

    Mensagem  HARYSOHN 3/7/2013, 19:17

    Boas Marco, ja consegui aqui.. logo mais posto o código.

    Obrigado pela atenção.
    Marco Messa
    Marco Messa
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 291
    Registrado : 28/06/2010

    [Resolvido]Acrescentar dados em uma matriz bidimensional Empty Re: [Resolvido]Acrescentar dados em uma matriz bidimensional

    Mensagem  Marco Messa 3/7/2013, 19:23

    De nada.

    Pra quem precisar saber mais sobre o método que está sendo abordado:

    http://msdn.microsoft.com/en-us/library/office/bb221041(v=office.12).aspx


    .................................................................................
    Tea with me that I book your face Cool
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Acrescentar dados em uma matriz bidimensional Empty Re: [Resolvido]Acrescentar dados em uma matriz bidimensional

    Mensagem  HARYSOHN 3/7/2013, 20:58

    Realmente.. eu pretendia a cada vez que executar a função passar à Matriz (Acrescentar) registros na mesma.

    Segue código completo funcionando:



    '------------------------------------------------------------------------------------------
    ' Procedure     : UndoDeleteRecord
    ' Author        : Harysohn P. Pina (PILOTO) - Harysohn@hotmail.com
    ' Fórum         : Fórum Máximo Access -  http://maximoaccess.forumeiros.com/
    ' Date          : 02/07/2013
    ' Comentários   : Adiciona a uma matriz pública (VarRsUndo) os registros de um recordset
    '                 Neste caso a variável RstDel conterá um único registro. no subform ao
    '                 clique do botão "Excluir Registro", antes da exclusão este registrro
    '                 será repassado a esta função que por sua vez adiciona o mesmo na Matriz
    '                 Ao ser executada a primeira vez a variável nCount terá valor nulo e o
    '                 códgo será direcionado à cláusula Else, assim após a primeira inserção
    '                 de registros na matriz a mesma assumira o número de colunas e linha
    '                 do recordset tornando-se uma matriz bidimensional, neste caso como meu
    '                 recordset contém apenas 1 registros e 9 colunas a matriz terá a seguinte
    '                 configuração: VarRsUndo(8,0) >> 9 colunas e 1 registro
    '                 Após a primeira execução do código a variável nCountUndo será incrementada
    '                 em 1 e na próxima execução correrá a primeira parte do códugo.
    '                 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
    '------------------------------------------------------------------------------------------

    Function UndoDeleteRecord(RstDel As DAO.Recordset)
    If nCountUndo > 0 Then
        Dim VarRsUndoTMP
        Dim X As Integer
        'Redimensiona a matriz apra aumentar uma linha preservando os registros anteriores
        ReDim Preserve VarRsUndo(0 To 9, nCountUndo)
        'Adiciono a matriz VarRsUndoTEMP os valores contidos no recordset
        VarRsUndoTMP = RstDel.GetRows
            'Faço um loop pelos campo da matriz temporária, observe que especifico o loop iniciando do 0 para o maior
            'valor de coluna, a instrução Ubound(Matriz,1 ou 2) retorna a maior coluna ou linha(2)
            For X = 0 To UBound(VarRsUndoTMP, 1)
                'Adicio à Matriz VarRsUndo os respectivos valores da matriz temporária
                VarRsUndo(X, nCountUndo) = VarRsUndoTMP(X, 0)
            'Vai para a próxima coluna
            Next X
            'Incremento a variável
            nCountUndo = nCountUndo + 1
    Else
        'Adiciono à variável o valor 0
        nCountUndo = 0
        'Adiciono a primeira coleção de campos no registro de número 0 na matriz
        VarRsUndo = RstDel.GetRows
        'Incremento a variável em 1
        nCountUndo = nCountUndo + 1
    End If
    End Function




    Foi um bom exercício!

    Cumprimentos.
    Marco Messa
    Marco Messa
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 291
    Registrado : 28/06/2010

    [Resolvido]Acrescentar dados em uma matriz bidimensional Empty Re: [Resolvido]Acrescentar dados em uma matriz bidimensional

    Mensagem  Marco Messa 3/7/2013, 21:02

    Tópico resolvido!

    (sempre quis falar isso Laughing )


    .................................................................................
    Tea with me that I book your face Cool
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Acrescentar dados em uma matriz bidimensional Empty Re: [Resolvido]Acrescentar dados em uma matriz bidimensional

    Mensagem  HARYSOHN 3/7/2013, 21:05

    Sobre Matrizes...

    http://msdn.microsoft.com/pt-br/library/vstudio/wak0wfyt.aspx

    Cumprimentos.
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Acrescentar dados em uma matriz bidimensional Empty Re: [Resolvido]Acrescentar dados em uma matriz bidimensional

    Mensagem  HARYSOHN 3/7/2013, 21:50

    Aproveitando o tópico função que restaura os arquivos deletados:


    '---------------------------------------------------------------------------------------
    ' Procedure     : RestauraRegDel
    ' Author        : Harysohn P. Pina (PILOTO) - Harysohn@hotmail.com
    ' Fórum         : Fórum Máximo Access -  http://maximoaccess.forumeiros.com/
    ' Date          : 03/07/2013
    ' Comentários   : Restaura os arquivos gravados na Matriz VarRsUndo adicionando regostros
    '                 no recordset especificando a quantidade de registros restaurados
    '---------------------------------------------------------------------------------------

    Function RestauraRegDel(RstRest As DAO.Recordset)
    Dim X, Y
    Dim nCount As Integer
    'Crio um novo registro
    RstRest.AddNew
    'Executo loop na matriz em seus registros
    For Y = 0 To UBound(VarRsUndo, 2)
          'Faço loop nos campos da matriz, observe que começo em 1 pois o campo 0 é o da chave primária e não
          'poder ser aplicado na tabela, da mesma forma inicio a edição do recordset no campo x = 1
          For X = 1 To UBound(VarRsUndo, 1)
                'Adiciono ao Recordset VarRsUndo os respectivos valores de coluna e linha da matriz temporária
                RstRest(X) = Nz(VarRsUndo(X, Y), "")
            'Vai para a próxima coluna
            Next X
    'Incremento a variável em 1
    nCount = nCount + 1
    MsgBox "Foram restaurados " & nCount & " Registros", vbInformation, "RESTAURAÇÃO EFETUADA"
    'Movo para a próxima linha da matriz
    Next Y
    'Atualizo o Recordset
    RstRest.Update
    'Redimensiono a matriz a seus valores originais
    ReDim VarRsUndo(0, 0)
    End Function
    HARYSOHN
    HARYSOHN
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Acrescentar dados em uma matriz bidimensional Empty Re: [Resolvido]Acrescentar dados em uma matriz bidimensional

    Mensagem  HARYSOHN 3/7/2013, 22:41

     Com uma pequena alteação na possição do AddNew e Update:


    '---------------------------------------------------------------------------------------
    ' Procedure     : RestauraRegDel
    ' Author        : Harysohn P. Pina (PILOTO) - Harysohn@hotmail.com
    ' Fórum         : Fórum Máximo Access -  http://maximoaccess.forumeiros.com/
    ' Date          : 03/07/2013
    ' Comentários   : Restaura os arquivos gravados na Matriz VarRsUndo adicionando regostros
    '                 no recordset especificando a quantidade de registros restaurados
    '---------------------------------------------------------------------------------------

    Function RestauraRegDel(RstRest As DAO.Recordset)
    Dim X, Y
    Dim nCount As Integer
    'Executo loop na matriz em seus registros
    For Y = 0 To UBound(VarRsUndo, 2)
            'Crio um novo registro
            RstRest.AddNew
            'Faço loop nos campos da matriz, observe que começo em 1 pois o campo 0 é o da chave primária e não
            'poder ser aplicado na tabela, da mesma forma inicio a edição do recordset no campo x = 1
            For X = 1 To UBound(VarRsUndo, 1)
                'Adicio ao Recordset VarRsUndo os respectivos valores de coluna e linha da matriz temporária
                RstRest(X) = Nz(VarRsUndo(X, Y), "")
            'Vai para a próxima coluna
            Next X
    'Incremento a variável em 1
    nCount = nCount + 1
    'Atualizo o Recordset
    RstRest.Update
    'Movo para a próxima linha da matriz
    Next Y
    MsgBox "Foram restaurados " & nCount & " Registros", vbInformation, "RESTAURAÇÃO EFETUADA"
    'Redimensiono a matriz a seus valores originais
    ReDim VarRsUndo(0, 0)
    nCountUndo = Empty
    'Limpo as Matrizes
    varRsNew = Empty
    VarRsUndo = Empty
    VarRsUndoTMP = Empty
    End Function

      Data/hora atual: 12/4/2021, 22:43