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

    Ultimo registro (DLast)

    Compartilhe
    APJesus
    APJesus
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 358
    Registrado : 21/09/2010

    Ultimo registro (DLast)

    Mensagem  APJesus em 15/11/2018, 14:13

    Pessoal, Boa Tarde!
    Estou com um problema no meu bd que está me tirando o sono e já tem uma semana, revisando os códigos, tabelas, estruturas e etc... mas não consegui resolver até o momento em duas situações.

    No sistema que tenho de controle de acesso (Portaria), inclusive disponível no repositório de exemplos aqui no fórum.

    Tenho um Form chamado fm_ZZMovimentos com diversos campos e pesquisas em outras tabelas, onde no momento que insiro a matricula do funcionário na portaria ele busca o último registro deste funcionário baseado no status dele E- Entrada ou S-Saída, na qual se for entrada ele assume S e se for saída ele assume E, uso o código abaixo para buscar o último registro:

    Me.ID_Pessoa = DLookup("ID_Pessoa", "ZZ19_Pessoas", "Pessoa='" & Me!N_Documento & "'")
    Me.ID_TipoPessoa = DLookup("ID_TipoPessoa", "ZZ19_Pessoas", "ID_Pessoa=" & Me!ID_Pessoa)

    If Me.ID_TipoPessoa.Value = 1 And DLast("[ID_Status]", "qry_MOVIMENTOS", "[ID_Pessoa]=" & Me!ID_Pessoa) = 1 Then
    Me.ID_Status.Value = 2
    Me.Hora_Saida = Now
    Me.Hora_Entrada = Null
    ElseIf Me.ID_TipoPessoa.Value = 1 And DLast("[ID_Status]", "qry_MOVIMENTOS", "[ID_Pessoa]=" & Me!ID_Pessoa) = 2 Then
    Me.ID_Status.Value = 1
    Me.Hora_Entrada = Now
    Me.Hora_Saida = Null
    ElseIf Me.ID_TipoPessoa.Value <> 1 Then
    Me.ID_Status.Value = 1
    Me.Hora_Entrada = Now
    End If

    e diversas outras pesquisas que não coloquei aqui, mas o problema é este aqui acima.
    Lembrando: Que as tabelas estão relacionadas, os campos que vão as pesquisas estão indexados, e a tabela ou consulta que busca a pesquisa estão ordenadas pelo ID_Pessoa que seria a busca.

    o que ocorre que as vezes ele se perde na informação ( Era para buscar a Saida e Busca a entrada) e a partir daí o funcionário específico e outros ficam somente assumindo e registrando a entrada que foi a informação errada trazida. aí o que tenho que fazer compactar e reparar para voltar ao normal. mas logo em seguida ocorre novamente. abaixo deste tópico vou colocar todo o código do form para se alguem puder analisar e me dá uma luz. ou até mesmo incompatibilidade de run Time.


    Quando o executo com o access instalado na minha máquina raramente ocorre o problema como mencionado acima, mas já aconteceu também ( Uso o access 2016 )

    Quando executo na máquina do cliente (RunTime 2007) logo ocorre o erro mencionado


    Abaixo segue o código completo do formZZMOVIMENTO que mencionei:

    Private Sub N_Documento_AfterUpdate()

    Me.Compara_Pessoa = DLookup("Pessoa", "ZZ19_Pessoas", "Pessoa='" & Me!N_Documento & "'") ' Busca na tabela Pessoas o registro, caso existente

    If IsNull(Me.N_Documento <> Me.Compara_Pessoa) Then
    Me.DocNovo = Me.N_Documento
    Me.Undo
    DoCmd.OpenForm "frm_ZZAtencaoFuncionarioNulo1"
    Forms!frm_ZZAtencaoFuncionarioNulo1!CopiaID = Me.DocNovo
    Cancel = True ' Verifica se o número digitado no campo N_Documento é existente
    Else
    Me.ID_Pessoa = DLookup("ID_Pessoa", "ZZ19_Pessoas", "Pessoa='" & Me!N_Documento & "'") 'Pesquisa o ID_Pessoa na tabela pessoas onde é igual ao N_Documento digitado
    Me.Data_Movimento = Date ' Insere a data atual no campo Data_Movimento
    Me.ID_TipoDoc = DLookup("ID_TipoDoc", "ZZ19_Pessoas", "ID_Pessoa=" & Me!ID_Pessoa) ' Pesquisa na Tab Pessoas o tipo do documento
    Me.ID_TipoPessoa = DLookup("ID_TipoPessoa", "ZZ19_Pessoas", "ID_Pessoa=" & Me!ID_Pessoa)' Pesquisa na Tab Pessoas o tipo de pessoa (Funcionario, Visitante, etc...)
    Me.Func_Bloqueado = DLookup("Pessoa_Ativo", "ZZ19_Pessoas", "ID_Pessoa=" & Me!ID_Pessoa) ' Pesquisa na Tab Pessoas se a pessoa está bloqueada
    Me.ID_DepartFunc = DLookup("ID_Departamento", "ZZ19_Pessoas", "ID_Pessoa=" & Me!ID_Pessoa) ' Pesquisa na Tab Pessoas o departamento da pessoa
    Me.ID_Veiculo = DLookup("ID_DetTipoVeiculo", "qry_ZZ19PESSOASXVEICULOS1", "ID_Pessoa=" & Me!ID_Pessoa) ' Pesquisa na Tab Pessoas o veículo da pessoa
    Me.ID_Empresa_Fornec = DLookup("Empresa_Fornec", "ZZ19_Pessoas", "ID_Pessoa=" & Me!ID_Pessoa) ' Pesquisa na Tab Pessoas a empresa do visitante
    Me.Caminho_Foto = DLookup("Caminho", "ZZ19_Pessoas", "ID_Pessoa=" & Me!ID_Pessoa) ' Pesquisa na Tab Pessoas o caminho da foto do visitante
    On Error Resume Next
    Forms!frm_ZZMOVIMENTOS![Reg_Por] = Forms!FormMenuPrincipal![ID_Pessoa] ' Pesquisa no Form Principal quem efetuou o registro
    End If

    'O código mencionado acima'
    If Me.ID_TipoPessoa.Value = 1 And DLast("[ID_Status]", "qry_MOVIMENTOS", "[ID_Pessoa]=" & Me!ID_Pessoa) = 1 Then
    Me.ID_Status.Value = 2 ' Pesquisa na Consulta o último registro se a pessoa for 1 e status for 1, assume o campo como status 2
    Me.Hora_Saida = Now
    Me.Hora_Entrada = Null
    ElseIf Me.ID_TipoPessoa.Value = 1 And DLast("[ID_Status]", "qry_MOVIMENTOS", "[ID_Pessoa]=" & Me!ID_Pessoa) = 2 Then
    Me.ID_Status.Value = 1 ' Pesquisa na Consulta o último registro se a pessoa for 1 e status for 2, assume o campo como status 1
    Me.Hora_Entrada = Now
    Me.Hora_Saida = Null
    ElseIf Me.ID_TipoPessoa.Value <> 1 Then ' Se a pessoa for diferente de 1 ele assume o status como 1
    Me.ID_Status.Value = 1
    Me.Hora_Entrada = Now

    End If


    Bem é ISSo aí, caso alguem possa me dar uma luz.
    Lembro que no repositório tem o banco de exemplo,
    FAVOR testarem no runtime também
    formiga10x
    formiga10x
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 784
    Registrado : 11/09/2013

    Re: Ultimo registro (DLast)

    Mensagem  formiga10x em 16/11/2018, 02:09

    Certa vez tive um problema com a função Dlast que deveria trazer o último registro no entanto o infeliz estava a trazer o informação errada. Dai notei que o Dlast trazia o último registro do bd que foi alterado mas, eu precisava do último então troquei o dlast pelo Dmax e resolveu e até hoje está rodando sem problemas.

    Boa sorte.


    .................................................................................
    Abraço
    Formiga10x

    Sempre que possível poste o bd ou parte dele, com uma explicação bem clara e objetiva do que quer.
    “Um homem não está acabado quando enfrenta a derrota. Ele está acabado quando desiste - Richard Nixon”
    Formiga10x

    "Lembro do exato momento em que me dei conta que boa parte de minha vida foi dedicada a localizar erros em meus próprios programas."
    - Maurice Vicent Wilkes
    APJesus
    APJesus
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 358
    Registrado : 21/09/2010

    Re: Ultimo registro (DLast)

    Mensagem  APJesus em 16/11/2018, 11:25

    Valeu Formiga, Vou testar aqui.
    Re-ordenei (Classifiquei as tabelas e consultas A-Z) que fazem as pesquisas para ver se ocorre novamente.
    Se falhar vou colocar o DMax.
    Obrigado

      Data/hora atual: 26/3/2019, 14:59