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


2 participantes

    Ultimo registro (DLast)

    APJesus
    APJesus
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

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

    Ultimo registro (DLast) Empty Ultimo registro (DLast)

    Mensagem  APJesus 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 : Respeito às Regras 100%

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

    Ultimo registro (DLast) Empty Re: Ultimo registro (DLast)

    Mensagem  formiga10x 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 : Respeito às Regras 100%

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

    Ultimo registro (DLast) Empty Re: Ultimo registro (DLast)

    Mensagem  APJesus 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

    Conteúdo patrocinado


    Ultimo registro (DLast) Empty Re: Ultimo registro (DLast)

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 27/4/2024, 04:47