MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

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


2 participantes

    [Resolvido]Registro duplicado

    avatar
    rmobombeiro
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 60
    Registrado : 12/03/2016

    [Resolvido]Registro duplicado Empty [Resolvido]Registro duplicado

    Mensagem  rmobombeiro 12/5/2016, 02:27

    Boa noite a todos!

    Tenho um banco de dados onde controlo a entrada e saída de veículos em minha empresa. Diariamente cadastro várias saídas e cada saída gera um código.
    Como fazer para, quando eu digitar a data e o código nos campos do formulário e esse código já tiver sido cadastrado naquele dia, aparecer uma mensagem alertando que "Esse código já foi cadastrado nessa data"?

    Obrigado
    Dilson
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1743
    Registrado : 11/11/2009

    [Resolvido]Registro duplicado Empty Re: [Resolvido]Registro duplicado

    Mensagem  Dilson 12/5/2016, 04:35

    Copie e cole a função no vba do seu formulário (Substitua nomes de tabelas e campos pelos verdadeiros)


    Private Function VerSeJaExiste(argCod, argData) As Boolean
    Dim rs As DAO.Recordset
    Dim nSql As String
    nSql = "SELECT * FROM SuaTabela WHERE OCodigo=" & argCod & " AND AData=#" & argData & "#"
    Set rs = CurrentDb.OpenRecordset(nSql)
       If rs.RecordCount > 0 Then
              MsgBox "Esse código já foi cadastrado nessa data.", vbCritical, "Atenção"
              VerSeJaExiste = True
       Else
              VerSeJaExiste = False
       End If
    rs.Close
    Set rs = Nothing
    End Function



    Agora para usá-la, coloque no evento desejado o seguinte:

    If VerSeJaExiste(Me!SuaTextBoxCodigo, Me!SuaTextBoxData) = True Then
       Exit Sub
    End If

    avatar
    rmobombeiro
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 60
    Registrado : 12/03/2016

    [Resolvido]Registro duplicado Empty Re: [Resolvido]Registro duplicado

    Mensagem  rmobombeiro 12/5/2016, 07:50

    Bom dia, Dílson!

    Muito obrigado pela ajuda, mas não consegui fazer funcionar, não sei se fiz certo.
    A tabela a qual esses dados pertencem é a "Cad_Ocor".
    O campo data esta na "txtdata" e o código na "txttalao

    Coloquei o código abaixo no formulário.

    Private Function VerSeJaExiste(argCod, argData) As Boolean
    Dim rs As DAO.Recordset
    Dim nSql As String
    nSql = "SELECT * FROM Cad_Ocor WHERE DataOcorr=" & argData & " AND Talão=#" & argCod & "#"
    Set rs = CurrentDb.OpenRecordset(nSql)
    If rs.RecordCount > 0 Then
    MsgBox "Esse código já foi cadastrado nessa data.", vbCritical, "Atenção"
    VerSeJaExiste = True
    Else
    VerSeJaExiste = False
    End If
    rs.Close
    Set rs = Nothing

    End Function

    Coloquei o código abaixo no evento "Antes de atualizar" da txttalao e nada aconteceu.

    If VerSeJaExiste(Me!txtdata, Me!txttalao) = True Then
    Exit Sub
    End If

    O que pode ser?

    Obrigado

    Dilson
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1743
    Registrado : 11/11/2009

    [Resolvido]Registro duplicado Empty Re: [Resolvido]Registro duplicado

    Mensagem  Dilson 12/5/2016, 14:24

    Colocou invertido.
    tente assim:

    nSql = "SELECT * FROM Cad_Ocor WHERE Talão=" & argCod & " AND DataOcorr=#" & argData & "#"

    E na instância coloque:
           
          If VerSeJaExiste(Me!txttalao, Me!txtdata) = True Then
              Exit Sub
          End If
    avatar
    rmobombeiro
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 60
    Registrado : 12/03/2016

    [Resolvido]Registro duplicado Empty Re: [Resolvido]Registro duplicado

    Mensagem  rmobombeiro 12/5/2016, 15:37

    Boa dia, Dilson!

    Fiz exatamente como falou, mas o programa executou normalmente, passou direto pelo código e não impediu e registro duplicado.
    Segue me bd.

    Obrigado

    https://mega.nz/#!MV12gIxT!1SEoZpcpfnXsRr7DLCrD6W8ZGqu4l0qGHgL-6G7_fJg
    Dilson
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1743
    Registrado : 11/11/2009

    [Resolvido]Registro duplicado Empty Re: [Resolvido]Registro duplicado

    Mensagem  Dilson 12/5/2016, 16:39

    Verifiquei e access com o vba tem dessas coisas de formato de data que difere de computador para computador e vba reconhece o formato americano então deves instanciar assim:

    If VerSeJaExiste(Me!txttalao, Format(Me!txtdata, "yyyy/mm/dd")) = True Then

    Podes tirar a mensagem da função e transferir para a instancia assim:

    If VerSeJaExiste(Me!txttalao, Format(Me!txtdata, "yyyy/mm/dd")) = True Then
              MsgBox "Esse código já foi cadastrado nessa data.", vbCritical, "Atenção"
              Cancel = True
    End If

    e já que é antes de atualizar tem que usar o Cancel = True ao invés do Exit Sub
    avatar
    rmobombeiro
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 60
    Registrado : 12/03/2016

    [Resolvido]Registro duplicado Empty Re: [Resolvido]Registro duplicado

    Mensagem  rmobombeiro 13/5/2016, 01:54

    Boa noite, Dilson!

    Funcionou. Só não ficou 100% porque após digitar a data e o código, se for repetido, emite a mensagem de registro duplicado e se clico no botão cancelar o sistema fica emitindo a mensagem de registro duplicado. Se apago o número do código, dá erro de sintaxe. Se após a mensagem de erro, eu verificar que o código esta correto e a data esta errada, não consigo retornar ao campo data.
    O que pode ser?
    Só tem esse detalhe a reparar.

    https://mega.nz/#!NMU3iaKJ!rV9JUPCxJQUIm3ioAGww8CmU22OmKgjXbra4Bxbu8QA

    Obrigado
    Dilson
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1743
    Registrado : 11/11/2009

    [Resolvido]Registro duplicado Empty Re: [Resolvido]Registro duplicado

    Mensagem  Dilson 13/5/2016, 13:26

    use o método undo:

    If VerSeJaExiste(Me!txttalao, Format(Me!txtdata, "yyyy/mm/dd")) = True Then
    MsgBox "Esse código já foi cadastrado nessa data.", vbCritical, "Atenção"
    Me.txttalao.Undo
    Cancel = True
    End If
    avatar
    rmobombeiro
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 60
    Registrado : 12/03/2016

    [Resolvido]Registro duplicado Empty Re: [Resolvido]Registro duplicado

    Mensagem  rmobombeiro 13/5/2016, 23:05

    Boa noite, Dilson!

    Muito obrigado, funcionou perfeitamente. Estou começando nesse mundo de programação e ainda tenho muito a aprender.

    Obs: você poderia me ajudar em mais dois tópicos?
    https://www.maximoaccess.com/t26503-salvar-dados-em-duas-tabelas-e-retornar-dado-do-utimo-registro


    https://www.maximoaccess.com/t26530-atualizar-campo-de-uma-tabela-com-base-em-outros-campos-de-outra-tabela  (Tópico desse link foi removido por estar com assunto duplicado no fórum)

    Desde já, agradeço.


    Última edição por Dilson em 14/5/2016, 01:15, editado 1 vez(es) (Motivo da edição : Link direcionando para assuntos de mesmo teor (duplicado))

    Conteúdo patrocinado


    [Resolvido]Registro duplicado Empty Re: [Resolvido]Registro duplicado

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 2/5/2024, 11:23