MaximoAccess

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

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
    avatar
    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1171
    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: Qui 23 Nov 2017, 15:07