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]Retornar valor de um campo em uma consulta e preencher campo em uma tabela

    avatar
    Disio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 13
    Registrado : 27/08/2013

    [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela Empty [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela

    Mensagem  Disio em 7/8/2019, 23:36

    Olá, estou precisando de uma ajudinha por aqui!
    Tenho uma consulta união que tem os campos Brinco, Data e Evento, classificada por Data.
    Tenho uma tabela com os campos Brinco e UltEve. Preciso buscar o valor do campo Evento, na consulta, no último registro para um determinado Brinco e copiar para o campo UltEve na tabela, para todos os registros da tabela.
    Agradeço desde já a ajuda.
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 834
    Registrado : 22/11/2016

    [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela Empty Re: [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela

    Mensagem  IvanJr. em 8/8/2019, 02:06

    Anexe aqui as tabelas e as consultas envolvidas e diga o passo a passo do que devemos fazer e o que deve acontecer.

    Aguardamos...


    .................................................................................
    Sempre tente entender o código, não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    Disio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 13
    Registrado : 27/08/2013

    [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela Empty Re: [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela

    Mensagem  Disio em 8/8/2019, 15:15

    Obrigado Ivan, pela resposta!
    Eu estava com dificuldade porque o DLookup não permitia a ordenação dos registros da consulta, pra buscar o último.
    Mas pesquisando achei o ELookup, num site em inglês, do Allen Browne, que resolveu meu problema.
    Transcrevo abaixo o código:

    Public Function ELookup(Expr As String, Domain As String, Optional Criteria As Variant, _
    Optional OrderClause As Variant) As Variant
    On Error GoTo Err_ELookup
    'Purpose: Faster and more flexible replacement for DLookup()
    'Arguments: Same as DLookup, with additional Order By option.
    'Return: Value of the Expr if found, else Null.
    ' Delimited list for multi-value field.
    'Author: Allen Browne. allen@allenbrowne.com
    'Updated: December 2006, to handle multi-value fields (Access 2007 and later.)
    'Examples:
    ' 1. To find the last value, include DESC in the OrderClause, e.g.:
    ' ELookup("[Surname] & [FirstName]", "tblClient", , "ClientID DESC")
    ' 2. To find the lowest non-null value of a field, use the Criteria, e.g.:
    ' ELookup("ClientID", "tblClient", "Surname Is Not Null" , "Surname")
    'Note: Requires a reference to the DAO library.
    Dim db As DAO.Database 'This database.
    Dim rs As DAO.Recordset 'To retrieve the value to find.
    Dim rsMVF As DAO.Recordset 'Child recordset to use for multi-value fields.
    Dim varResult As Variant 'Return value for function.
    Dim strSql As String 'SQL statement.
    Dim strOut As String 'Output string to build up (multi-value field.)
    Dim lngLen As Long 'Length of string.
    Const strcSep = "," 'Separator between items in multi-value list.

    'Initialize to null.
    varResult = Null

    'Build the SQL string.
    strSql = "SELECT TOP 1 " & Expr & " FROM " & Domain
    If Not IsMissing(Criteria) Then
    strSql = strSql & " WHERE " & Criteria
    End If
    If Not IsMissing(OrderClause) Then
    strSql = strSql & " ORDER BY " & OrderClause
    End If
    strSql = strSql & ";"

    'Lookup the value.
    Set db = DBEngine(0)(0)
    Set rs = db.OpenRecordset(strSql, dbOpenForwardOnly)
    If rs.RecordCount > 0 Then
    'Will be an object if multi-value field.
    If VarType(rs(0)) = vbObject Then
    Set rsMVF = rs(0).Value
    Do While Not rsMVF.EOF
    If rs(0).Type = 101 Then 'dbAttachment
    strOut = strOut & rsMVF!FileName & strcSep
    Else
    strOut = strOut & rsMVF![Value].Value & strcSep
    End If
    rsMVF.MoveNext
    Loop
    'Remove trailing separator.
    lngLen = Len(strOut) - Len(strcSep)
    If lngLen > 0& Then
    varResult = Left(strOut, lngLen)
    End If
    Set rsMVF = Nothing
    Else
    'Not a multi-value field: just return the value.
    varResult = rs(0)
    End If
    End If
    rs.Close

    'Assign the return value.
    ELookup = varResult

    Exit_ELookup:
    Set rs = Nothing
    Set db = Nothing
    Exit Function

    Err_ELookup:
    MsgBox Err.Description, vbExclamation, "ELookup Error " & Err.Number
    Resume Exit_ELookup
    End Function


    Muito obrigado pela atenção!!!
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 834
    Registrado : 22/11/2016

    [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela Empty Re: [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela

    Mensagem  IvanJr. em 8/8/2019, 23:11

    Enriquecendo o tópico: o Access já possui função nativa para esta finalidade, chama-se DLast (ou DUltimo). Também existe DFirst (ou DPrimeiro).


    .................................................................................
    Sempre tente entender o código, não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    Disio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 13
    Registrado : 27/08/2013

    [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela Empty Re: [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela

    Mensagem  Disio em 9/8/2019, 14:51

    Ivan, tentei usar essa funções mas nenhuma retornava o valor do último registro, acho porque não há índice na consulta.

    Agora tô precisando saber como escrever um critério para retornar o último registro com valor em um determinado campo. Atualmente a ELookup() tá retornando o valor do campo do último registro, classificado pela Data, mas esse valor pode ser vazio, que não me interessa. Preciso q retorne o valor do último registro COM valor em determinado campo.

    Ex: varUltimoEvento3 = ELookup("[Evento Lactação]", "Sequencia", "Brinco = '" & RSAnimais!Brinco & "'", "Data DESC")


    Valeu mesmo pela ajuda!
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 834
    Registrado : 22/11/2016

    [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela Empty Re: [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela

    Mensagem  IvanJr. em 9/8/2019, 22:18

    Seu próprio código postado existe exemplo de como usar a função. Veja isso
    Código:
    ELookup("ClientID", "tblClient", "Surname Is Not Null" , "Surname")

    Basta adaptar
    Código:
    varUltimoEvento3 = ELookup("[Evento Lactação]", "Sequencia", "Brinco = '" & RSAnimais!Brinco & "' and [Evento Lactação] Is Not Null", "Data DESC")


    .................................................................................
    Sempre tente entender o código, não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    Disio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 13
    Registrado : 27/08/2013

    [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela Empty Re: [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela

    Mensagem  Disio em 10/8/2019, 20:54

    Rapaz, já tinha tentado, mas não roda de jeito nenhum. Já mudei as aspas de todo jeito e nada. Só retorna VAZIO o valor do campo.
    Quando escrevo como tá no exemplo, ele não reconhece as palavras Is Not Null nem o And dentro das aspas, só quando tira ele mosttra q reconheceu, ficando azul.
    Se fosse fazer isso com DLookup, DLast ou DMax, como seria?
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 834
    Registrado : 22/11/2016

    [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela Empty Re: [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela

    Mensagem  IvanJr. em 10/8/2019, 22:54

    Por diversas vezes neste fórum muitas dúvidas só puderam ser solucionadas depois que os usuários solicitantes anexaram seus arquivos com os objetos envolvidos para análise da estrutura do banco, e creio que este será mais um caso.

    Aguardamos...


    .................................................................................
    Sempre tente entender o código, não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    Disio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 13
    Registrado : 27/08/2013

    [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela Empty Re: [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela

    Mensagem  Disio em 10/8/2019, 23:49

    Vou seguir seu conselho. Enviei o BD que tô iniciando.
    O objetivo é escrever um código pra "Categorizar" cada animal da tabela ANIMAIS, de acordo com os registros de manejos cadastrados nas diversas tabelas de manejos (DESMAMA, APTIDÂO, etc.). Criei uma consulta SEQUENCIA que lista os manejos por animal, na sequencia fisiológica da vida produtiva e reprodutiva, por data.
    Existem 3 tipos de manejo: Eventos Lineares (que só ocorrem 1 vez na vida do animal, ex. Nascimento, Desmama, Aptidão), Eventos Cíclicos (que podem ocorrer repetidamente durante a vida do animal, ex. Inseminações, Diagnósticos de Gestação) e Eventos Lactação (que são eventos cíclicos específicos, ex. Partos, Secagens).
    Criei uma função Classificar(), que usa mais três funções, uma para cada tipo de evento: Cat() para categorizar pelos Eventos Lineares, Sit() para Eventos Lactação e Stat() para Eventos Cíclicos. Os resultados, para cada animal, são inseridos nos campos Categoria (Eventos Lineares), Situação (Eventos Lactação) e Status (Eventos Cíclicos) na tabela ANIMAIS, formando a categoria do animal. Pelo código vc vai ver os nomes das categorias.
    Lancei alguns dados de um animal. Se quiser dar uma olhada, na tabela ANIMAIS, veja na subfolha os dados do animal, Brinco 1003. O úlimo Evento Linear dela foi Aptidão, mas o ELookup retorna o último campo VAZIO, do último registro.
    Te agradeço muito o apoio e peço desculpas pelo mau jeito.
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 834
    Registrado : 22/11/2016

    [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela Empty Re: [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela

    Mensagem  IvanJr. em 11/8/2019, 02:59

    Obrigado por nos ajudar a resolver seu problema.

    Como os campos de retorno são do tipo texto e permitem comprimento zero, então não armazenam valores nulos, mas textos vazios. Com isso o código deve ser
    Código:
    varUltimoEvento1 = ELookup("[Evento Linear]", "Sequencia", "Brinco = '" & RSAnimais!Brinco & "' and [Evento Linear] <> ''", "Data DESC")
    varUltimoEvento3 = ELookup("[Evento Lactação]", "Sequencia", "Brinco = '" & RSAnimais!Brinco & "' and [Evento Lactação] <> ''", "Data DESC")
    varUltimoEvento2 = ELookup("[Evento Cíclico]", "Sequencia", "Brinco = '" & RSAnimais!Brinco & "' and [Evento Cíclico] <> ''", "Data DESC")

    Faça o teste com
    Código:
    varUltimoEvento1 = ELookup("[Evento Linear]", "Sequencia", "Brinco = '1003' and [Evento Linear] <> ''", "Data DESC")

    Aqui retornou tudo certo


    .................................................................................
    Sempre tente entender o código, não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    Disio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 13
    Registrado : 27/08/2013

    [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela Empty Re: [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela

    Mensagem  Disio em 12/8/2019, 20:32

    Ivan, muito obrigado pelo auxílio. Vc foi em cima! Só precisei adicionar Nz ao ELookup pra tratar o Null inválido das variáveis quando nenhum registro tinha valor nos campos.


    Código:
    varUltimoEvento3 = Nz(ELookup("[Evento Lactação]", "Sequencia", "Brinco = '" & RSAnimais!Brinco & "' And [Evento Lactação]<>''", "Data DESC"), "")

    Agora tá funcionando direitinho.
    Grande abraço.
    IvanJr.
    IvanJr.
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 834
    Registrado : 22/11/2016

    [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela Empty Re: [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela

    Mensagem  IvanJr. em 12/8/2019, 21:46

    O fórum agradece o retorno. Sucesso.


    .................................................................................
    Sempre tente entender o código, não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.

    Conteúdo patrocinado

    [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela Empty Re: [Resolvido]Retornar valor de um campo em uma consulta e preencher campo em uma tabela

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 21/8/2019, 13:04