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]Preenchimento de campo com base em um critério

    Compartilhe
    avatar
    blsnogueira
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 21
    Registrado : 16/09/2012

    [Resolvido]Preenchimento de campo com base em um critério

    Mensagem  blsnogueira em Sab 15 Jul 2017, 18:50

    Boa tarde a todos,
    Mais uma vez venho pedir socorro e desde já agradeço muito a ajuda de vcs.

    Estou adaptando uma emissão de fatura automática no sistema que utilizamos aqui na empresa.

    Precisamos, que ao gerar a fatura ele puxe de uma outra tabela as informações referente a descrição dos serviços.

    Limitei a quatro serviços por fatura e para isso em meu formulário de emissão de fatura eu criei os campos:  [OC1], [OC2], [OC3], [OC4], onde será informado a ordem de compra de cada serviço contratado.

    Antes de gerar a fatura, preenchemos os campos [OC1], [OC2], [OC3], [OC4], com os números das ordem de compras, que  servirá de base para o preenchimentos automático do campo [newDescServ] em minha fatura.

    Bem... Para preencher o meu campo [newDescServ] em minha fatura,  usei o seguinte:

    newDescServ = "PRESTAÇÃO DE SERVIÇO, CONFORME ORDEM DE COMPRA(S):" & vbNewLine & _
                     IIf(IsNull(Me.OC1), Empty, Format$(Me.OC1, "00000") & ": " & DLookup("[Descricao]", "Servico", "[Codigo]=" & OC1)) & vbNewLine & _
                     IIf(IsNull(Me.OC2), Empty, Format$(Me.OC2, "00000") & ": " & DLookup("[Descricao]", "Servico", "[Codigo]=" & OC2)) & vbNewLine & _
                     IIf(IsNull(Me.OC3), Empty, Format$(Me.OC3, "00000") & ": " & DLookup("[Descricao]", "Servico", "[Codigo]=" & OC3)) & vbNewLine & _
                     IIf(IsNull(Me.OC4), Empty, Format$(Me.OC4, "00000") & ": " & DLookup("[Descricao]", "Servico", "[Codigo]=" & OC4))

    Se os campos [OC1], [OC2], [OC3], [OC4], estiverem preenchidos o sistema gera a fatura perfeitamente.
    O problema é que nem sempre todos os campos serão preenchidos... já que a fatura pode conter apenas um ordem de compra... e se o campo estiver em branco, ele me apresenta o seguinte erro:
    Erro em tempo de execução ‘3075’
    Erro de sintaxe (operador faltando) na expressão de consulta ‘[Codigo]=’

    Se a expressão diz que é para procurar descrição apenas se o campo [OC1] não for nulo, ele não deveria nem procurar o [Codigo] neste caso.

    Desde já agradeço a ajuda para solucionar esta dúvida.

    Grato,
    Bruno Nogueira

    Phillip_Junior
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 179
    Registrado : 09/12/2016

    Re: [Resolvido]Preenchimento de campo com base em um critério

    Mensagem  Phillip_Junior em Dom 16 Jul 2017, 04:38

    Olá amigo


    Observe:

    Null, como Empty, é tanto uma palavra-chave quanto um valor especial que pode ser contido por um Variant. Indica que a variável não contém dados válidos. Normalmente causa problemas ao ler um campo sem dados de uma tabela. Null não é igual a nada, nem a si mesmo!.
    O VBA tem a função IsNull para dizer se uma variável contém Nulo e a função Nz para devolver um valor esperado (como zero ou “”) se uma variável contiver Nulo. Talvez a melhor forma de pensar sobre Nulo é imaginá-lo como “Desconhecido”.

    Empty (Vazio)
    É tanto uma palavra-chave quanto um valor especial que pode ser contido por um Variant. Ela indica um Variant não inicializado. Não é o mesmo que Null. Empty é raro quando comparado com os outros conceitos discutidos neste artigo e provavelmente não será muito encontrado “na vida real”. O VBA tem a função IsEmpty para dizer se a variável está vazia.


    Tente assim

    IIf(IsNull(OC1) Or Me.OC1.value = "", Format$(Me.OC1, "00000") & ": " & DLookup("[Descricao]", "Servico", "[Codigo]=" & OC1)) & vbNewLine & _

    Se não der certo, poste um pequeno exemplo do seu banco usando o código na apresentação do erro que veremos oq pode ser solucionado.

    Abraços


    .................................................................................
    Phillip_Junior
    Analista de Sistemas
    avatar
    blsnogueira
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 21
    Registrado : 16/09/2012

    Re: [Resolvido]Preenchimento de campo com base em um critério

    Mensagem  blsnogueira em Seg 17 Jul 2017, 20:31

    Obrigado pela ajuda Phillip_Junior.

    Consegui resolver usando um "nz" para todos os OC

    newDescServ = "PRESTAÇÃO DE SERVIÇO, CONFORME ORDEM DE COMPRA(S):" & vbNewLine & _
    IIf(IsNull(Me.OC1), Empty, Format$(Me.OC1, "00000") & ": " & DLookup("[Descricao]", "Servico", "[Codigo]=" & Nz(OC1, 0))) & vbNewLine & _
    IIf(IsNull(Me.OC2), Empty, Format$(Me.OC2, "00000") & ": " & DLookup("[Descricao]", "Servico", "[Codigo]=" & Nz(OC2, 0))) & vbNewLine & _
    IIf(IsNull(Me.OC3), Empty, Format$(Me.OC3, "00000") & ": " & DLookup("[Descricao]", "Servico", "[Codigo]=" & Nz(OC3, 0))) & vbNewLine & _
    IIf(IsNull(Me.OC4), Empty, Format$(Me.OC4, "00000") & ": " & DLookup("[Descricao]", "Servico", "[Codigo]=" & Nz(OC4, 0)))


    Abraços

    Phillip_Junior
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 179
    Registrado : 09/12/2016

    Re: [Resolvido]Preenchimento de campo com base em um critério

    Mensagem  Phillip_Junior em Seg 17 Jul 2017, 20:48

    Olá
    Obrigado pelo retorno. O forum agradece.
    Parabens pelo estudo e solução do problema.
    Melhor que qualquer um de nos sem acesso ao bd, seria vc para encontrar a solução. Sem entender muito bem a ideia e o mecanismo do projeto nem sempre conseguimos ajudar. Mas fica registrado a solução.
    parabens e sucesso

    abracos



    .................................................................................
    Phillip_Junior
    Analista de Sistemas

      Data/hora atual: Sab 18 Nov 2017, 13:31