MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    Localizar um registro com a função dlookup

    Ney Santos
    Ney Santos
    Avançado
    Avançado

    Respeito às Regras 75%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 262
    Registrado : 23/05/2011

    Localizar um registro com a função dlookup Empty Localizar um registro com a função dlookup

    Mensagem  Ney Santos em 22/10/2020, 13:59

    Bom dia!
    Preciso dajuda na seguinte questão:
    tenho os eguinte código na funçaõ apos atualizar de um campo:


    If DCount("*", "Item", "CodBarras  = """ & Me!TxCdbarras2 & """") >= 1 Then
    MsgBox " Produto já cadastrado" & vbNewLine & "Cód. Barras " & Me.TxCdbarras2, vbInformation, "Cadastrado" <==== Ate´funcionando
    Me.TxIdItem = DLookup("[CodBarras]", "Item", "[CodBarras] =" & TxCdbarras2)
    A linha de cima é que não estou conseguindo fazer funcionar..
    a Ideia é preecher o campo(IdItem) com e entao executar a função abaixo:
    TxIdItem_AfterUpdate, ( essa função preenceria os dados do cadastro)
    Porem não está executando.
    Onde estou errando?


    Última edição por Alexandre Neves em 22/10/2020, 16:12, editado 1 vez(es) (Razão : Título alterado: de 'Localisar um registro com a função dlookup' para 'Localizar um registro com a função dlookup')
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7781
    Registrado : 05/11/2009

    Localizar um registro com a função dlookup Empty Re: Localizar um registro com a função dlookup

    Mensagem  Alexandre Neves em 22/10/2020, 16:14

    Boa tarde
    Será
    DLookup("CodBarras", "Item", "CodBarras ='" & TxCdbarras2 & "'")


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    Ney Santos
    Ney Santos
    Avançado
    Avançado

    Respeito às Regras 75%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 262
    Registrado : 23/05/2011

    Localizar um registro com a função dlookup Empty Re: Localizar um registro com a função dlookup

    Mensagem  Ney Santos em 22/10/2020, 18:45

    Boa tarde Sr Alexandre..
    Desculep ter escrito errado o texto, vi que o Sr corrigiu.
    da maneira como o Sr colocou tambem nao deu certo , acabou que o Cod. barras foi parar no lugar do codigo do pedido.
    Tenho uma função ==> TxIdItem_AfterUpdate, ( essa função preencheria os dados do cadastro)
    Que é executada quando se digita o código do produto:
    Segue a função:
    Private Sub TxIdItem_AfterUpdate()
    Dim Db As DAO.Database
    Dim Rs As Recordset
    Dim Y
    Set Db = CurrentDb
    Set Rs = OpenForSeek("Item")
    Rs.Index = "IdItem"
    Rs.Seek "=", [TxIdItem]
    Y = DMax("[CodigoItem]", "Item")
    If IsNull(Y) = True Then
    Y = 0
    End If
    idv = DLookup("CodigoItem", "Item", "CodigoItem = TxIdItem")
    With Rs
    If IsNull(idv) Then
    msg = "Deseja Adicionar um novo produto?" & vbCrLf & "Não exite nenhum produto,com o código " & [TxIdItem]
    If MsgBox(msg, vbQuestion + vbYesNo, "Confirma Adição de um novo Produto") = vbYes Then
    .AddNew
    Me.TxCdBarra.SetFocus
    Me.TxIdItem = Null
    !CodigoItem = Y + 1
    Me.TxIdItem = !CodigoItem
    .Update
    Else
    DoCmd.CancelEvent
    MsgBox "Informe o código que deseja alterar", vbInformation, "Aguardando novo Código"
    Me.Undo
    Me.TxCdBarra.SetFocus
    Me.TxIdItem = Null
    Me.TxIdItem.SetFocus
    End If

    Else
    .Edit
    !CodigoItem = Me.TxIdItem
    Me.TxIdItem = !CodigoItem
    Me.TxDescricao = !Descricao
    Me.TxCdBarra = !CodBarras
    Me.TxEspecifica = !Especificacoes
    Me.TxAtivo_SN = !Visivel
    Me.TxProd_CS = !PComposto
    Me.TxPrecProd = !Preco
    Me.ImagePath = !Foto
    End If
    TxProd_CS_AfterUpdate
    .Update
    End With
    Me.Cbprod.RowSource = ""
    Me.Requery
    Me.Cbprod.Visible = False
    End Sub
    +++++============
    Oque não estou sabendo fazer é um dlookup que traga o Id do produto pesquisandpo pelo Cod. de barras.

    Att
    Ney Santos
    Silvio
    Silvio
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4634
    Registrado : 20/04/2011

    Localizar um registro com a função dlookup Empty Re: Localizar um registro com a função dlookup

    Mensagem  Silvio em 22/10/2020, 19:34

    DIM Y não seria uma string ?

    dim y as string


    .................................................................................
    Caso tenha resolvido a tua duvida, coloque o tópico como resolvido.
    www.maximoaccess.com/t860-resolucao-de-topicos

    "Quase tudo é possível quando se tem determinação e força de vontade. Não desista tão rápido."
    Ney Santos
    Ney Santos
    Avançado
    Avançado

    Respeito às Regras 75%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 262
    Registrado : 23/05/2011

    Localizar um registro com a função dlookup Empty Re: Localizar um registro com a função dlookup

    Mensagem  Ney Santos em 22/10/2020, 20:02

    Ola Silvio ,
    Y e uma variavel que é utilizada quando se trata do 1º registro a ser lançado, visto que se a tabela estiver vazia
    o campo CodigoItem recebe O(Zero) para que seja implementada a numeração seuquencial.
    Como gostode trabalhar com forms desvinculados, eu não utilizo campo AutoNumeração, prefiro criar o Id.
    Att
    Ney
    Silvio
    Silvio
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4634
    Registrado : 20/04/2011

    Localizar um registro com a função dlookup Empty Re: Localizar um registro com a função dlookup

    Mensagem  Silvio em 22/10/2020, 21:04

    Só um pitaco...

    essa linha abaixo....não está faltando algo ?

    idv = DLookup("CodigoItem", "Item", "CodigoItem = TxIdItem")


    .................................................................................
    Caso tenha resolvido a tua duvida, coloque o tópico como resolvido.
    www.maximoaccess.com/t860-resolucao-de-topicos

    "Quase tudo é possível quando se tem determinação e força de vontade. Não desista tão rápido."
    Ney Santos
    Ney Santos
    Avançado
    Avançado

    Respeito às Regras 75%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 262
    Registrado : 23/05/2011

    Localizar um registro com a função dlookup Empty Re: Localizar um registro com a função dlookup

    Mensagem  Ney Santos em 22/10/2020, 21:37

    ess alinmha esta correta , ela faz a seguinte função :
    Se o usuario digitar um codigo existente ela tras o produto cadastrad com esse codigo, caso nao encontre o o codigo o sistema informa que o codigo não existe e pergunta se o usuario deseja cadastrar um novo produto?
    Ai ao inves de usar o "código" nãoi encomntyrado el busca o ultimo código e acrescenta mais 1 fazendo com que a numeraçao seja sequencial.
    Exemplo : ultimo código cadastrado e 20 o usuario digita 30. o sistema nao encontra, da a msg. em caso de confirmaçaod e cadastro ele gerao codigo 21.
    Pode paarecer meio maluco mas foi uma maneira que invente pra que a numeração ficasse sequencial.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7781
    Registrado : 05/11/2009

    Localizar um registro com a função dlookup Empty Re: Localizar um registro com a função dlookup

    Mensagem  Alexandre Neves em 23/10/2020, 10:48

    Bom dia
    Poderá ser
    DLookup("CodItem", "Item", "CodBarras ='" & TxCdbarras2 & "'")


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    Ney Santos
    Ney Santos
    Avançado
    Avançado

    Respeito às Regras 75%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 262
    Registrado : 23/05/2011

    Localizar um registro com a função dlookup Empty Re: Localizar um registro com a função dlookup

    Mensagem  Ney Santos em 24/10/2020, 05:22

    infelismente tambem nao funcionou
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3685
    Registrado : 04/04/2010

    Localizar um registro com a função dlookup Empty Re: Localizar um registro com a função dlookup

    Mensagem  Avelino Sampaio em 24/10/2020, 10:11

    Olá!

    Nesta sua parte:

    If DCount("*", "Item", "CodBarras  = """ & Me!TxCdbarras2 & """") >= 1 Then
    MsgBox " Produto já cadastrado" & vbNewLine & "Cód. Barras " & Me.TxCdbarras2, vbInformation, "Cadastrado" <==== Ate´funcionando
    Me.TxIdItem = DLookup("[CodBarras]", "Item", "[CodBarras] =" & TxCdbarras2)

    Por que o senhor não utilizou exatamente o mesmo critério de filtragem da função DCount() ?  Acrescente caixas de mensagens para observar os valores, conforme descrito abaixo:

    If DCount("*", "Item", "CodBarras  = """ & Me!TxCdbarras2 & """") >= 1 Then
     MsgBox " Produto já cadastrado" & vbNewLine & "Cód. Barras " & Me.TxCdbarras2, vbInformation, "Cadastrado"
     Msgbox DLookup("[CodBarras]", "Item", "CodBarras  = """ & Me!TxCdbarras2 & """")
    else
      Msgbox "Sem produto"
    end if


    Aguardamos


    .................................................................................
    Quer aprender a montar ribbons ?  
    Clique AQUI e conheça o meu aplicativo.
    Ney Santos
    Ney Santos
    Avançado
    Avançado

    Respeito às Regras 75%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 262
    Registrado : 23/05/2011

    Localizar um registro com a função dlookup Empty Re: Localizar um registro com a função dlookup

    Mensagem  Ney Santos em 24/10/2020, 13:22

    Bom dia mestre Avelino...
    ( O mago das consultas e do Monta RIBBONNS) rss
    Muito obrigado pela dica, funcionou parcialmente..
    Pois oque eu gostaria e que a caixa de texto"TxIdItem" recebesse o id do produto.(quando o Cod. barras ja existir).
    è que nessa caixa d eetxto existe uma função após atualizar que tars os dados do produto.
    Com isso o usuário verificaria se as informções no cadastreo batem com o produto que está a ser lançado.
    Para explicar minha idéia, o campo TxCdbarras2 eu criei apenas para receber o valor do campo TxCdbarras assim que ele prernchido, não sei se isso se fazia nescessario, mas como não sou muito bom com essa coisa delloukp foi amneira que eu encontrei para executar a função.
    ==>> Acho que na verdade não estou sabendo fazer a consulta , pois eu precisava que ela comparasse o codigo de barras e localizasse o Id do produto,
    mas isso eu nãos ei fazer e nem sei se é possivel.
    Já li e reli seus artigos soibre isso no seu site , vi as dicas do mestre Damsceno, mas confesso que fico mais perdido que cachoro quando cai da mudança.
    No aguardo.

    Att
    Ney Santos
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3685
    Registrado : 04/04/2010

    Localizar um registro com a função dlookup Empty Re: Localizar um registro com a função dlookup

    Mensagem  Avelino Sampaio em 26/10/2020, 09:48

    Ney

    Analisando melhor o seu código, não faz o menor sentido utilizar o Dlookup(), já que o senhor está utilizando o método Seek para realizar a busca.  Utilizamos o método NoMatch para verificar se o seek encontrou o registro desejado.  Teste o código modificado abaixo:

    Nota:  O campo indicado na propriedade INDEX está me gerando uma dúvida.   Confirme se o campo a ser pesquisado na tabela é o IdItem ou se é o campo CodigoItem

    Private Sub TxIdItem_AfterUpdate()
    Dim Db As DAO.Database
    Dim Rs As Recordset
    Dim Y

    Set Db = CurrentDb
    Set Rs = OpenForSeek("Item")

    Rs.Index = "IdItem" 'Ou altere aqui para Rs.Index = "CodigoItem"
    Rs.Seek "=", Me!TxIdItem

    Y = DMax("[CodigoItem]", "Item")
    If IsNull(Y) = True Then Y = 0

    With Rs
    If .NoMatch Then
       msg = "Deseja Adicionar um novo produto?" & vbCrLf & "Não exite nenhum produto,com o código " & Me!TxIdItem
       If MsgBox(msg, vbQuestion + vbYesNo, "Confirma Adição de um novo Produto") = vbYes Then
           .AddNew
           Me.TxCdBarra.SetFocus
           Me.TxIdItem = Null
           !CodigoItem = Y + 1
           Me.TxIdItem = !CodigoItem
           .Update
       Else
           DoCmd.CancelEvent
           MsgBox "Informe o código que deseja alterar", vbInformation, "Aguardando novo Código"
           Me.Undo
           Me.TxCdBarra.SetFocus
           Me.TxIdItem = Null
           Me.TxIdItem.SetFocus
       End If
    Else
       .Edit
       !CodigoItem = Me.TxIdItem
       Me.TxIdItem = !CodigoItem
       Me.TxDescricao = !Descricao
       Me.TxCdBarra = !CodBarras
       Me.TxEspecifica = !Especificacoes
       Me.TxAtivo_SN = !Visivel
       Me.TxProd_CS = !PComposto
       Me.TxPrecProd = !Preco
       Me.ImagePath = !Foto
    End If
    TxProd_CS_AfterUpdate
    .Update
    End With
    Me.Cbprod.RowSource = ""
    Me.Requery
    Me.Cbprod.Visible = False
    End Sub
     

    Aguardamos


    .................................................................................
    Quer aprender a montar ribbons ?  
    Clique AQUI e conheça o meu aplicativo.
    Ney Santos
    Ney Santos
    Avançado
    Avançado

    Respeito às Regras 75%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 262
    Registrado : 23/05/2011

    Localizar um registro com a função dlookup Empty Re: Localizar um registro com a função dlookup

    Mensagem  Ney Santos em 26/10/2020, 15:26

    Bom dia Sr Avelino!
    obrigado pela dica eu não sabia desse detalhe sobre estar usando o metdo seek.
    Analisei código e realmente ele me aparece bem mais limpo que o meu.
    Tanto que vou estudalo, para coloca-lo em outros forms de cadastro.
    Minha dúdiva e se vai rodar quando eu for inseir um novo regitro, em vez pesquisar se ele ja existe, visto que o campo TxtIdIem ainda estará nulo.
    Mas voltando ao assunto desse tópico, a funçaõq ue equeria utilizar seria no csmpo do código de barras, pois ele tamebm é um campo unico que não aceiat duplicação.
    Para explicar o porque disso:
    se mais de uam pessoa executa a função de cadastrar um produto,pode acontecer de que elas peguem um produto que já esteja cadastrado.Nãoo queria que depois de tudo lançado, na em que o usuario for gravar o produto venha a mesnsagem de arquivo duplicaodo e impossibilitando a gravaçao do no produto ja que aquele codigo de barras ja consta no cadastro.
    Imagine a seguinte situação:
    A pessoa pega o calçado começao a digitar as informações, no final ele vai ter de clicar no botão Gravar , é ai que ira acontecer o erro pois o sistema ira ver que o codigo de barras está duplicado.
    Se nescessario eu posto essa parte do bd para que o sr, possa analisar melhor.
    Obriagado pela sua atenção.

    Att ney santos

      Data/hora atual: 1/12/2020, 18:35