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] Regra de validação para inserir dados em tabela a partir de botão em formulário

    Compartilhe

    bellaF
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 35
    Registrado : 05/04/2017

    [Resolvido] Regra de validação para inserir dados em tabela a partir de botão em formulário

    Mensagem  bellaF em Qua 05 Abr 2017, 18:44

    Olá pessoal do fórum!
    Sou nova aqui, então em caso de erro, por favor me avisem.

    Meu problema é o seguinte: estou criando um BD para controle de pedidos. Eu tenho uma tabela base com todos os meus pedidos criados. E já tenho um formulário que eu entro com o número desse pedido e ele me atualiza com as informações dele: quantidade de peças, data de criação, cliente, etc.

    Eu preciso então, que ao fazer essa busca, eu também tenha a opção de clicar em um botão (dentre vários) que diga que o pedido foi empacotado/faturado/enviado/recebido/etc.
    Eu já criei esses botões, e eles funcionam bem, adicionando em uma tabela nova o número do pedido e data/hora que cliquei no botão determinado (cada botão tem uma coluna específica).
    No entanto, preciso agora que:
    1) Esse número do pedido não se repetisse, ou seja, se eu já tenho uma data de envio/recebimento/etc, que fosse impossível alterá-la - só possível acrescentar as outras datas disponíveis (nem atualizar o campo nem criar uma nova linha com o mesmo número do pedido)
    2) E que também fosse impossível eu colocar uma data de recebimento menor que a de envio, e de envio menor que a de faturamento, etc.

    O código que usei para um dos botões (ex.: recebimento) é:

    Private Sub btnRecebimento_Click()
    Dim db As Database
    Dim rs As Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tbl_status")
    rs.AddNew
    rs("pedido") = Me.txtPed.Value 'valor do pedido - input do formulário
    rs("stsRecebido") = Now ()
    rs.Update
    rs.Close
    db.Close

    End Sub

    Alguém saberia me ajudar?
    Obrigada!
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: [Resolvido] Regra de validação para inserir dados em tabela a partir de botão em formulário

    Mensagem  Alexandre Neves em Qua 05 Abr 2017, 20:52

    Boa noite, e bem-vinda ao fórum

    Private Sub btnRecebimento_Click()
    Dim db As Database
    Dim rs As Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tbl_status")
    'verifica se já existe pedido com este número
    id dcount("*","tbl_status","pedido=" & txtPed.Value)>0 then msgbox "Já tem registo com este pedido" : goto naoexecuta
    'verifica se a data recebimento já está preenchida
    id isdate(dlookup("stsRecebido","tbl_status","pedido=" & txtPed.Value)) then msgbox "Já tem registo com data recebimento preenchida" : goto naoexecuta
    'verifica se a data recebimento anterior à data envio
    id dcount("*","tbl_status","stsRecebido'verifica se a data envio anterior à data faturamento
    id dcount("*","tbl_status","DataEnviors.AddNew
    rs("pedido") = Me.txtPed.Value 'valor do pedido - input do formulário
    rs("stsRecebido") = Now ()
    rs.Update
    NaoExecuta:
    rs.Close
    db.Close

    End Sub


    .................................................................................
    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

    bellaF
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 35
    Registrado : 05/04/2017

    Re: [Resolvido] Regra de validação para inserir dados em tabela a partir de botão em formulário

    Mensagem  bellaF em Qua 05 Abr 2017, 21:29

    Olá Alexandre.
    Muita obrigada pela ajuda.

    A parte das verificações de datas anteriores não está funcionando, está dando erro de compilação. Pode me ajudar?
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: [Resolvido] Regra de validação para inserir dados em tabela a partir de botão em formulário

    Mensagem  Alexandre Neves em Qua 05 Abr 2017, 22:31

    Código:
    Private Sub btnRecebimento_Click()
    Dim db As Database
    Dim rs As Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tbl_status")
    'verifica se já existe pedido com este número
    id dcount("*","tbl_status","pedido=" & txtPed.Value)>0 then msgbox "Já tem registo com este pedido" : goto naoexecuta
    'verifica se a data recebimento já está preenchida
    if isdate(dlookup("stsRecebido","tbl_status","pedido=" & txtPed.Value)) then msgbox "Já tem registo com data recebimento preenchida" : goto naoexecuta

    'verifica se a data recebimento é anterior à data envio
    if now()<dlookup("DataEnvio","tbl_status","pedido=" & txtPed.Value")  then msgbox "A data de recebimento não pode ser anterior à data de envio" : goto naoexecuta

    rs.AddNew
    rs("pedido") = Me.txtPed.Value 'valor do pedido - input do formulário
    rs("stsRecebido") = Now ()
    rs.Update
    NaoExecuta:
    rs.Close
    db.Close

    End Sub


    .................................................................................
    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

    bellaF
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 35
    Registrado : 05/04/2017

    Re: [Resolvido] Regra de validação para inserir dados em tabela a partir de botão em formulário

    Mensagem  bellaF em Qui 06 Abr 2017, 19:24

    Olá Alexandre.
    Agradeço o retorno. O código continua dando problema. Ao executar dá o seguinte erro:
    Erro em tempo de execução '2465':
    O Microsoft Access não pode localizar o campo '|1' referido em sua expressão.
    E a linha
    If DCount("*","tbl_status","pedido=" & txtPed.Value)>0 then msgbox "Já tem registo com este pedido" : goto naoexecuta
    aparece destacada quando clico em depurar. O que fiz de errado?
    avatar
    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1153
    Registrado : 21/01/2012

    Re: [Resolvido] Regra de validação para inserir dados em tabela a partir de botão em formulário

    Mensagem  Cláudio Más em Qui 06 Abr 2017, 20:03

    Olá,

    Uma alternativa é tornar o campo "pedido" um índice exclusivo na tabela "tbl_status", conforme a imagem abaixo:

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

    Então o código ficaria assim:

    Private Sub btnRecebimento_Click()
    On Error GoTo err_btnRecebimento_Click

    Dim db As Database
    Dim rs As Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tbl_status")
    rs.AddNew
    rs("pedido") = Me.txtPed.Value 'valor do pedido - input do formulário
    rs("stsRecebido") = Now()
    rs.Update
    rs.Close
    db.Close

    exit_btnRecebimento_Click:
       Exit Sub
       
    err_btnRecebimento_Click:
       MsgBox "Já tem registo com este pedido"
       Resume exit_btnRecebimento_Click
       
    End Sub
    avatar
    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1153
    Registrado : 21/01/2012

    Re: [Resolvido] Regra de validação para inserir dados em tabela a partir de botão em formulário

    Mensagem  Cláudio Más em Qui 06 Abr 2017, 20:12

    Para controlar as datas, use o evento "Antes de atualizar" do formulário:

    Private Sub Form_BeforeUpdate(Cancel As Integer)

    If Me!stsRecebido < Me!stsEnviado Then
       MsgBox "Data de recebimento inválida"
       Cancel = True
    End If

    End Sub

    bellaF
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 35
    Registrado : 05/04/2017

    Re: [Resolvido] Regra de validação para inserir dados em tabela a partir de botão em formulário

    Mensagem  bellaF em Qui 06 Abr 2017, 21:16

    Boa tarde Cláudio,
    Agradeço a ajuda!! Mas fiquei um pouco confusa (desculpe, sou bem nova no access e vba).
    Acabei alterando um pouco o código, e está de maneira como segue abaixo.
    Eu preciso agora que ele:
    1) Verifique se o pedido que eu quero colocar a data de recebimento exista em uma tabela de registro tbl_inbound
    2) Que verifique que a data já está preenchida
    3) Que a data não seja anterior ao envio
    4) Que ao invés da mensagem de erro, apareça um mensagem personalizada: "Já existe registro desse pedido." Nessa parte, utilizei sua dica e coloquei o numero do pedido como chave primaria da tabela, então ele realmente já não me permite cadastrar o recebimento do mesmo pedido duas vezes, porém a mensagem de erro que aparece é bem ruim.

    Private Sub btRecebimento_Click()

    Dim db As Database
    Dim rs As Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tbl_status_log")

    'verifica se existe cadastro desse pedido na tabela de pedidos criados (tbl_inbound)
    If DCount("*","tbl_inbound","pedido=" & txtPed.Value)=0 then msgbox "Não existe registro desse pedido." : goto naoexecuta

    'verifica se a data recebimento já está preenchida
    If IsDate(dlookup("stsRecebido","tbl_status_log","pedido=" & txtPed.Value)) then msgbox "Já existe data de recebimento para esse pedido." : goto naoexecuta

    'verifica se a data recebimento é anterior à data envio
    If Now() < DLookup("DataEnvio","tbl_status_log","pedido=" & txtPed.Value") then msgbox "A data de recebimento não pode ser anterior à data de envio." : goto naoexecuta

    rs.AddNew
    rs("pedido") = Me.txtPed.Value 'valor do pedido - input do formulário
    rs("DataRecebido") = Now()
    rs("stsRecebido") = "Sim"
    rs("StatusFinal") = "Recebido"
    rs.Update
    NaoExecuta:
    rs.Close
    db.Close
    Me.pedido.SetFocus

    End Sub
    avatar
    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1153
    Registrado : 21/01/2012

    Re: [Resolvido] Regra de validação para inserir dados em tabela a partir de botão em formulário

    Mensagem  Cláudio Más em Sex 07 Abr 2017, 00:56

    Oi Isabella, confuso fiquei eu! Smile

    Poderia enviar uma cópia do BD?
    Iria facilitar bastante com a solução.

    bellaF
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 35
    Registrado : 05/04/2017

    Re: [Resolvido] Regra de validação para inserir dados em tabela a partir de botão em formulário

    Mensagem  bellaF em Sex 07 Abr 2017, 14:41

    Olá Cláudio!
    Desculpe se foi mal explicado.
    Estou enviando anexo o BD.
    Você vai reparar que ao clicar no botão no formulario, ele gera um erro.
    Nesse código, a minha tentativa foi de fazer conforme expliquei acima, e ainda não adicionei a parte do erro (item 4).
    Tente usar o Pedido numero 1234567890 [enter] para entender o funcionamento do formulário.
    Obrigada pela disposição.

    bellaF
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 35
    Registrado : 05/04/2017

    Re: [Resolvido] Regra de validação para inserir dados em tabela a partir de botão em formulário

    Mensagem  bellaF em Sex 07 Abr 2017, 14:43

    Desculpe, faltou o arquivo!
    Anexos
    Controle de Pedidos.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (69 Kb) Baixado 6 vez(es)
    avatar
    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1153
    Registrado : 21/01/2012

    Re: [Resolvido] Regra de validação para inserir dados em tabela a partir de botão em formulário

    Mensagem  Cláudio Más em Sex 07 Abr 2017, 16:20

    Boa tarde Isabella,

    Fiz alguns ajustes no código:

    Código:

    Private Sub btRecebido_Click()
    On Error GoTo err_btRecebido_Click

    Dim db As Database
    Dim rs As Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tbl_status_log")

    'verifica se existe cadastro desse pedido na tabela de pedidos criado tbl_inbound
    If DCount("*", "tbl_inbound", "Pedido='" & txtPed.Value & "'") = 0 Then MsgBox "Não existe registro desse pedido.": GoTo NaoExecuta

    'verifica se a data de recebimento já está preenchida
    If IsDate(DLookup("stsRecebido", "tbl_status_log", "Pedido='" & txtPed.Value & "'")) Then MsgBox "Já existe data de recebimento para esse pedido.": GoTo NaoExecuta

    'verifica se a data recebimento é anterior à data envio
    If Now() < (DLookup("DataEnvio", "tbl_status_log", "pedido='" & txtPed.Value & "'")) Then MsgBox "A data de recebimento não pode ser anterior à data de envio.": GoTo NaoExecuta

    rs.AddNew
    rs("Pedido") = Me.txtPed.Value 'valor do pedido - input do formulário
    rs("DataRecebido") = Now()
    rs("stsRecebido") = True
    rs("StatusFinal") = "Recebido"
    rs.Update

    NaoExecuta:
    rs.Close
    db.Close
    Me.txtPed.SetFocus

    exit_btRecebido_Click:
       Exit Sub
       
    err_btRecebido_Click:
       MsgBox "Já existe registro desse pedido."
       Resume exit_btRecebido_Click
       
    End Sub

    bellaF
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 35
    Registrado : 05/04/2017

    Re: [Resolvido] Regra de validação para inserir dados em tabela a partir de botão em formulário

    Mensagem  bellaF em Sex 07 Abr 2017, 17:41

    Super resolvido, Cláudio!
    Muito muito obrigada! Very Happy

      Data/hora atual: Ter 19 Set 2017, 12:45