MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Comparar array e recordset

    Compartilhe

    mrjoneskod
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 17/09/2013

    [Resolvido]Comparar array e recordset

    Mensagem  mrjoneskod em Ter 15 Mar 2016, 01:13

    Olá amigos. Estou fazendo uma função para escolher uma posição de chave entre 36. A questão é de acordo com a entrada e saída de registro a menor posição livre da chave pode estar desordenada, por exemplo pode estar ocupado de 1 a 4 e também de 6 a 23, logo a menor posição livre seria 5.

    Fiz um código que compara uma array e um recordset que é descarregado em outra array ambas ordenadas.
    Assim se o numero está na primeira que tem todas as posições, mas não está na segunda significa que a posição está livre.

    Porém, estou apanhando... já tentei de tudo... o código funciona bem até 2... depois fica repetindo o numero 2 e não escolhe posições acima de 2.

    peço ajuda porque não consigo mais prosseguir.


    segue o código!

    Obrigado a todos.
    Código:

        Dim pChave As Integer
            pChave = Nz(DMax("chave", "movimento", "isNull(horaSaída)"), 0)
           
        If pChave = 0 Then
            Me.chave = 1
       
       
        Else
           
       

       
            Dim dbs As DAO.Database
        Dim rst As DAO.Recordset
        Dim avarRecords As Variant
        Dim intRecord As Integer

        Set dbs = CurrentDb
        Set rst = dbs.OpenRecordset("Select chave From movimento Where IsNull([horaSaída]) and [chave] >= 1 Group by chave Order by chave;", dbOpenSnapshot)
           
           
            Dim contchave As Integer
            contchave = DCount("chave", "movimento", IsNull([horaSaída]) And Not IsNull(chave))
           
            Dim i As Long
            Dim p As Long

            Dim v1() As Variant
            Dim v2 As Variant
            Dim v3 As Integer
           
            If IsNull(rst1) Then
                MsgBox "null"
            Else
                MsgBox "NAO NULO"
            End If

            v1 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36)
            v2(i) = rst.GetRows(countchave)
           
            Debug.Print UBound(v2) + 1 & " records retrieved."
           
            rst.Close
            dbs.Close
           
            Dim str1 As String
           
            For i = LBound(v2) To UBound(v2)
                str1 = str1 & ", " & v2(i)
            Next i
         
           
            p = 0
           
            On Error Resume Next
           
            Do While p < 36
               
                    If (v1(i) <> v2(i)) Then
                        v3 = v1(i)
                        p = 36
                    End If
            Loop
           
            Me.chave = v3
           
           
        End If

    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1097
    Registrado : 21/01/2012

    Re: [Resolvido]Comparar array e recordset

    Mensagem  Cláudio Más em Seg 21 Mar 2016, 13:30

    Olá,

    Não entendi muito bem, mas o problema pode estar no trecho abaixo:

    Código:
    p = 0
            
    On Error Resume Next
            
    Do While p < 36
                
        If (v1(i) <> v2(i)) Then
            v3 = v1(i)
            p = 36
        End If

    Loop

    p inicia em zero, portanto o loop é executado.
    Porém dentro do "Do...While" a variável "i" não é atualizada.
    "i" está sempre com o valor fixo de UBound(v2).
    A condição do "If" deve estar sendo atendida logo na primeira iteração, "p" torna-se 36 e o loop termina.
    Em alguma parte dentro do loop, "i" deveria estar sendo incrementado ou decrementado, não?
    Provavelmente dentro do "Else", a ser implementado.

    mrjoneskod
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 17/09/2013

    Re: [Resolvido]Comparar array e recordset

    Mensagem  mrjoneskod em Qua 23 Mar 2016, 13:34

    Olá Cláudio obrigado pelo retorno.

    Acabei desistindo de fazer assim e fiz usando SQL.
    Eu tentei a sua solução o que alterou o resultado, mas mesmo assim dava erro pq o getrow sempre retornava 0.

    Obrigado pela sua resposta mesmo assim!

    Grande abraço.

      Data/hora atual: Sab 10 Dez 2016, 12:37