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]Variaveis com valores nulos

    Compartilhe

    wilflx2
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 28
    Registrado : 31/01/2014

    [Resolvido]Variaveis com valores nulos

    Mensagem  wilflx2 em 24/8/2018, 18:24

    Boa tarde a todos!

    Preciso de ajuda quanto a variáveis. Seguinte, tenho um formulário onde cadastro pedidos de exames, inseri um botão onde ele copia o cabeçalho do pedido, Paciente, DataNasc, Prontuario e Nome do médico para as variáveis, após esse processo ele salva o registro na tabela, limpa os campos e insere os valores do cabeçalho de novo nos devidos campos. Fiz isso para que não tenha que digitar tudo de novo. Detalhe, uso formulário desvinculado. Até ai tudo bem, meu problema começa quando um desses campos do cabeçalho está vazio, um exemplo a Data de Nascimento, ai aparece erro de depuração 96, "Uso de Null invalido", acredito que é porque uso um modulo global que limpa todos os campos do formulário usando o Null, porem já tentei alterar para "" e Empty mas não deu certo.
    Acontece pelo que entendi que não consigo gravar na variável um valor de um campo em branco, ou quando  coloco "on error resume Next" ele usa a ultima data de nascimento gravada na variável. Tentei de varias formas e foram todas sem sucesso, peço uma luz quanto a isso, só falta este problema para terminar o BD.

    Dados do BD

    Tabela: tabPEItem
    Nome formulario: frmPECadastro

    Segue o código do botão:

    Código:
    Private Sub btSalvarConti_Click()

        If IsNull(Me.IdPedido) Then 'Se o campo IdPedido estiver nulo, segue o codigo abaixo...

    '=======================================================
    '                    CADASTRO NA TABELA
    '=======================================================

    '======================== VALIDA OS CAMPOS =====================
        If IsNull(DataPedido) Then
            MsgBox ("O campo Data Pedido é obrigatório")
            Me.DataPedido.SetFocus
            'Me.Nome.BackColor = vbYellow
            DoCmd.CancelEvent
            Exit Sub
            End
        End If
        
        If IsNull(PedidoParaMes) Then
            MsgBox ("O campo Pedido p/ Mês é obrigatório")
            Me.PedidoParaMes.SetFocus
            'Me.Nome.BackColor = vbYellow
            DoCmd.CancelEvent
            Exit Sub
            End
        End If
        
        If IsNull(Paciente) Then
            MsgBox ("O campo Paciente é obrigatório")
            Me.Paciente.SetFocus
            'Me.Nome.BackColor = vbYellow
            DoCmd.CancelEvent
            Exit Sub
            End
        End If
        
        If IsNull(TipoExame) Then
            MsgBox ("O campo Tipo de Exame é obrigatório")
            Me.TipoExame.SetFocus
            'Me.Nome.BackColor = vbYellow
            DoCmd.CancelEvent
            Exit Sub
            End
        End If
        
        If IsNull(MedicoSolic) Then
            MsgBox ("O campo Médico Solicitante é obrigatório")
            Me.MedicoSolic.SetFocus
            'Me.Nome.BackColor = vbYellow
            DoCmd.CancelEvent
            Exit Sub
            End
        End If
        
    '========= Variaveis p/ salvar os dados para o proximo registro =================
        
        'On Error Resume Next
        Dim fPaciente As String
        Dim fAno As String
        Dim fDataNasc As Date
        Dim fTipoEx As String
        Dim fMedico As String
        Dim fdataPedi As Date
        Dim fPedidoMes As String
        Dim fNControle As String
        Dim fProntu As String
        
        fPaciente = Me.Paciente
        fAno = Me.Ano
        fDataNasc = Me.DataNasc
        fTipoEx = Me.TipoExame
        fMedico = Me.MedicoSolic
        fdataPedi = Me.DataPedido
        fPedidoMes = Me.PedidoParaMes
        fNControle = Me.Ncontrole
        fProntu = Me.Prontuario
        
    '====================== CADASTRA NA TABELA ======================
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
        Set db = CurrentDb()
        Set rs = db.OpenRecordset("tabPEItem", dbOpenDynaset)

        With rs
            .AddNew
                !Ncontrole = Ncontrole 'O primeiro campo é o da tabela, o segundo é o do formulario
                !DataPedido = DataPedido
                !Ano = Ano
                !PedidoParaMes = PedidoParaMes
                !Paciente = Paciente
                !DataNasc = DataNasc
                !Prontuario = Prontuario
                !TipoExame = TipoExame
                !MedicoSolic = MedicoSolic
                !StatusPend = StatusPend
                !StatusAuto = StatusAuto
                !StatusNaoAuto = StatusNaoAuto
                !DataAutorizacao = DataAutorizacao
                !Status = Status
                !Selecionar = Selecionar
                !Faturado = Faturado
                !Impresso = Impresso
                !Lote = Lote
                !Item = Item
                !ValorItem = ValorItem
                !Qtda = Qtda
                !ValorTotalItem = ValorTotalItem
                !Prestador = Prestador
                !IdPrestador = IdPrestador
                !Realizado = Realizado
                !DataRealizacao = DataRealizacao
                !DataFaturamento = DataFaturamento
                            
            .Update
        .Close
        End With
        Set rs = Nothing
        
    '===================== CODIGOS POS CADASTRO ======================
        Call LimpaGeral(Me) 'Macro que limpa tudo (veja no repositório)
        Me.DataPedido.SetFocus 'foca o campo desejado, pode ser qualquer um
        MsgBox "Registro salvo com sucesso!", 64, "Salvar"
        
        'Insere as variaveis do cabeçalho nos campos
        Me.Paciente = fPaciente
        Me.Ano = fAno
        Me.DataNasc = fDataNasc
        Me.TipoExame = fTipoEx
        Me.MedicoSolic = fMedico
        Me.DataPedido = fdataPedi
        Me.PedidoParaMes = fPedidoMes
        Me.Ncontrole = fNControle
        Me.Prontuario = fProntu
        Me.StatusPend.Value = 1

        'esvazia as variaveis do cabeçalho
        


    '=======================================================
    '                           FIM
    '=======================================================
        
    Else

    '=======================================================
    '                   ALTERAÇÃO NA TABELA
    '=======================================================

        If MsgBox("Deseja realmente alterar o cadastro?", vbYesNo + vbInformation, "Alteração de cadastro") = vbYes Then
            Dim ISQL As String
            Set db = CurrentDb()
            ISQL = "SELECT * FROM tabPEPedido WHERE IdPedido = " & Me.IdPedido & ""
            Set rs = CurrentDb.OpenRecordset(ISQL)
        
            With rs
            Do While Not rs.EOF
                .Edit
                !Ncontrole = Ncontrole 'O primeiro campo é o da tabela, o segundo é o do formulario
                !DataPedido = DataPedido
                !Ano = Ano
                !PedidoParaMes = PedidoParaMes
                !Paciente = Paciente
                !DataNasc = DataNasc
                !Prontuario = Prontuario
                !TipoExame = TipoExame
                !MedicoSolic = MedicoSolic
                !StatusPend = StatusPend
                !StatusAuto = StatusAuto
                !StatusNaoAuto = StatusNaoAuto
                !DataAutorizacao = DataAutorizacao
                !Status = Status
                !Selecionar = Selecionar
                !Faturado = Faturado
                !Impresso = Impresso
                !Lote = Lote
                !ValorTotalPedido = ValorTotalPedido
                !Item = Item
                !ValorItem = ValorItem
                !Qtda = Qtda
                !ValorTotalItem = ValorTotalItem
                !Prestador = Prestador
                !IdPrestador = IdPrestador
                !Realizado = Realizado
                !DataRealizacao = DataRealizacao
                !DataFaturamento = DataFaturamento
                .Update
                .MoveNext
                Loop
                .Close
            End With
            Set rs = Nothing
            MsgBox "Registro alterado com sucesso!", 64, "Salvar"
            DoCmd.Close
        Else
            Exit Sub
        End If
    End If

    '=======================================================
    '                           FIM
    '=======================================================
        
        
    End Sub

    Código que uso para salvar os dados do cabeçalho nas variáveis:
    Código:
    'On Error Resume Next
        Dim fPaciente As String
        Dim fAno As String
        Dim fDataNasc As Date
        Dim fTipoEx As String
        Dim fMedico As String
        Dim fdataPedi As Date
        Dim fPedidoMes As String
        Dim fNControle As String
        Dim fProntu As String
        
        fPaciente = Me.Paciente
        fAno = Me.Ano
        fDataNasc = Me.DataNasc
        fTipoEx = Me.TipoExame
        fMedico = Me.MedicoSolic
        fdataPedi = Me.DataPedido
        fPedidoMes = Me.PedidoParaMes
        fNControle = Me.Ncontrole
        fProntu = Me.Prontuario

    Agradeço desde já!
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5550
    Registrado : 15/03/2013

    Re: [Resolvido]Variaveis com valores nulos

    Mensagem  ahteixeira em 25/8/2018, 15:31

    Olá Willian Ferreira,

    Será mais fácil para se ajudar e testar se postar a base de dados com os objectos envolvidos da questão.

    Abraço

    vaddico
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2
    Registrado : 04/11/2015

    Resp. campo nulo

    Mensagem  vaddico em 13/9/2018, 12:56

    Bom dia.

    Olha, eu sou bem inexperiente (autodidata) mas talvez possa acrescentar algo.

    Tinha o mesmo problema com o campo data quando replicava o registro para outros vencimentos, no meu caso.

    Consegui contornar da seguinte forma:

    Código:
    rs.AddNew
                        
                        rs("Cod_Conta_TC") = Me.ComboContaPg
                        rs("Cod_Rubrica") = Me.cmb_Rubrica
                        rs("Data_cadastramento") = Me.DataCadastramento
                        rs("Cod_Conta_TC") = Me.ComboContaPg
                        rs("Cod_Categoria_TP") = Me.Categoria
                        rs("Cod_Subcategoria_TP") = Me.cmbbox_Subcategoria
                        rs("Cod_Tipo_documento_TP") = Me.Tipo
                        rs("Num_Documento") = Me.Num_Documento
                        rs("Data_Origem") = Me.txt_Data_Origem

                        'Trata data nula
                        If IsNull(DataVencimento) Or DataVencimento = "" Then
                            '
                        Else
                            ctl_Vencimento = DateAdd("m", i, Me.DataVencimento)
                            rs("Data_vencimento") = ctl_Vencimento
                        End If

                        rs("Valor_Principal") = Me.Valor
                        rs("Valor_desconto") = Me.Desconto
                        rs("Valor_acrescimo") = Me.Acréscimo
                        rs("Valor_total") = Me.ValorTotal
                        rs("Valor_Total_real") = Me.Valor_Total_real
                        rs("Nome_favorecido") = Me.Favorecido
                        rs("Desc_pagamento") = Me.Descrição
                        rs("Nome_Banco") = Me.Banco
                        rs("Num_Conta_favorecido") = Me.CredConta
                        rs("Observações") = Me.Observações
                        rs("Desc_Categoria_TP") = Me.txt_Desc_Categoria
                        rs("Desc_Subcategoria_TP") = Me.txt_Desc_Subcategoria
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10171
    Registrado : 04/11/2009

    Re: [Resolvido]Variaveis com valores nulos

    Mensagem  JPaulo em 13/9/2018, 13:21

    Use a função NZ para tratar os nulos nas suas variaveis;

    Código:
    fPaciente = Nz(Me.Paciente)
    fAno = Nz(Me.Ano)
    fDataNasc = Nz(Me.DataNasc)
    fTipoEx = Nz(Me.TipoExame)
    fMedico = Nz(Me.MedicoSolic)
    fdataPedi = Nz(Me.DataPedido)
    fPedidoMes = Nz(Me.PedidoParaMes)
    fNControle = Nz(Me.Ncontrole)
    fProntu = Nz(Me.Prontuario)

    Ainda pode enviar um valor para os nulos, com essa função interna NZ;

    Exemplo:
    Se DataNasc é nula, envia a data atual;
    Código:
    fDataNasc = Nz(Me.DataNasc,Date())



    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

    wilflx2
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 28
    Registrado : 31/01/2014

    Re: [Resolvido]Variaveis com valores nulos

    Mensagem  wilflx2 em 24/9/2018, 16:37


    Perfeito! Muito obrigado a todos, deu certo!
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10171
    Registrado : 04/11/2009

    Re: [Resolvido]Variaveis com valores nulos

    Mensagem  JPaulo em 24/9/2018, 16:38

    Fico feliz.

    Obrigado pelo retorno o forum agradece.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

      Data/hora atual: 22/10/2018, 11:27