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


3 participantes

    [Resolvido]Dois critérios.

    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Dois critérios. Empty [Resolvido]Dois critérios.

    Mensagem  wsenna 20/1/2015, 10:44

    Bom dia Feras de plantão.

    Estou novamente necessitando da ajuda dos Amigos para o seguinte:

    Num formulário possuo dois campos, Unidade (do tipo Caixa de Combinação) e Caixa (Numérico) e utilizo a expressão abaixo para evitar que se crie uma nova Caixa com o mesmo número.

    If IsNull(DLookup("Caixa", "tbl100", "([Caixa] = " & Forms![frm100]![Caixa] & ")")) Then

    Entretanto, agora preciso que o sistema verifique também o campo Unidade (Combox) pois na verdade posso ter mais de uma caixa com o mesmo número desde que a Unidade seja diferente.

    Grande abraço, WSenna


    Última edição por wsenna em 5/5/2015, 04:04, editado 7 vez(es)
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  wsenna 20/1/2015, 11:32

    Quase lá:

    Passei a utilizar o seguinte:

    If IsNull(DLookup("[Caixa]", "tblCaixa", "[Caixa] = " & Caixa & " And Unidade = '" & Unidade & "'")) Then

    Funciona perfeitamente contanto que o campo Unidade seja o mesmo, porém se troco esse campo para outra Unidade ocorre um erro.

    Cabe informar que a caixa de combinação Unidade possui apenas uma coluna do tipo Texto.

    Aguardando...

    Abraços, WSenna
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  Assis 20/1/2015, 12:22


    Bom dia WSenna

    Não custa testar. Para um caso parecido e resolvido por ,,, Autor. JPaulo

    Private Sub Unidade_BeforeUpdate(Cancel As Integer)
    Dim X As Integer
    Dim Y As Integer
    Y = Me.Unidade
    X = DCount("[Caixa]", "tblCaixa", "[Caixa] = " & Me.Caixa & " AND [Unidade]='" & Y & "'")
    If X = 1 Then
    MsgBox "Aqui o Aviso !", vbInformation, "Aviso"
    DoCmd.CancelEvent
    Me.Unidade.Undo
    Cancel = True 'cancela o evento.
    Else
    Me.Unidade = Me.Unidade
    End If

    End Sub


    .................................................................................
    *** Só sei que nada sei ***
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  wsenna 20/1/2015, 20:13

    Olá Assis, boa tarde.

    Sua sugestão até que funciona caso eu mantenha a mesma Unidade.
    Caso eu altere a Unidade ocorre um erro.

    Na verdade tive que fazer algumas modificações como segue:

    Private Sub Caixa_AfterUpdate()
       Dim X As Integer
       Dim Y As String
       Y = Me.Unidade
       X = DCount("[Caixa]", "tblCaixa", "[Caixa] = " & Me.Caixa & " AND [Unidade]='" & Y & "'")
       If X = 1 Then
       MsgBox "A Caixa nº " & Format(Caixa, "#,000") & " já existe para esta Unidade.     ", vbInformation, "  InfoBasic Smart System"
       Me.Undo
       DoCmd.CancelEvent 'cancela o evento.
       Else
       End If
    End Sub

    Note ainda que tive de alocar o código no evento após atualizar uma vez que o trecho Me.Caixa = Me.Caixa produzia outro erro.

    Outro detalhe é que o campo Caixa é colocado após o campo Unidade.

    Abraços, WSenna
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  wsenna 20/1/2015, 22:45

    Olá Feras de plantão, boa noite.

    Depois de quase ficar totalmente careca de neurônios consegui chegar ao termo final. Assim, para aqueles que possam ter algum problema parecido disponibilizo o código abaixo:

    Private Sub Caixa_BeforeUpdate(Cancel As Integer)
    On Error GoTo TrataErro

    Dim DB As DAO.Database
    Dim rs As DAO.Recordset

    ' Testa se a Caixa já existe na tabela

    If IsNull(DLookup("[Caixa]", "tblCaixa", "[Caixa] = " & Caixa & " And Unidades = '" & Unidades & "'")) Then
    GoTo Saida
    End If
    ' Dá opção de alterar dados
    If MsgBox("Já existe uma Caixa com o número " & Me.Caixa & " para esta Origem. " & Chr(13) & "Você deseja visualizar o registro? ", vbExclamation + vbYesNo, " Atenção") = vbNo Then

    Me.Undo
    GoTo Saida

    End If

    'Abre o registro já existente
    Set rs = Me.RecordsetClone
    rs.FindFirst ("[Caixa] = " & Caixa & " And Unidades = '" & Unidades & "'")
    Me.Undo
    Me.Bookmark = rs.Bookmark
    Set rs = Nothing

    Saida:
    Exit Sub

    TrataErro:
    MsgBox "Form_frm100 - Caixa_BeforeUpdate" & vbCrLf & err.Description, vbExclamation + vbOKOnly, "Erro: " & CStr(err.Number)
    #If DESENV Then
    Stop
    Resume
    #End If
    Resume Saida
    End Sub


    Abraços, WSenna
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  Assis 20/1/2015, 23:16

    Wsenna

    Ainda bem que dei uma ajudiiiiiiiiiiiiiinha.
    Obrigado pelo retorno
    Abraço


    .................................................................................
    *** Só sei que nada sei ***
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  wsenna 2/5/2015, 16:15

    Olá Feras de plantão. boa tarde.

    Como disse, após perder quase todos os fios de cabelo consegui com o código acima resolver um problema de impedir que se cadastre um novo registro com dois critérios. Isso está funcionando de forma erfeita pois o meu formulário é simples.
    Agora procurei inserir o mesmo código só que num formulário contínuo e tambem estaria funcionando caso a linha Me.Undo limpasse todo o registro e o que está acontecendo é que limpa apenas o campo onde o código está inscrito no evento Antes de Atualizar.
    Já tentei de tudo e não estou vislumbrar uma solução daí recorro às Feras deste Fórum.

    Abraços, WSenna


    Última edição por wsenna em 4/5/2015, 14:28, editado 1 vez(es)
    avatar
    andrecc
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 41
    Registrado : 10/08/2012

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  andrecc 2/5/2015, 17:26

    Não seria no evento "Antes de atualizar" do formulário, e não do campo?
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  wsenna 2/5/2015, 22:51

    Caro André, boa noite.

    Amigão, tem que ser no campo Localização mesmo. Eu utilizo esse código há bastante tempo em formulários simples e já o fiz num formulário contínuo só que com um critério só e funcionou a contento. Agora meu desafio é fazer funcionar como quando contém um único critério, ou seja, se responder Sim na caixa de mensagem o cursor mostra o registro exeistente e apaga o que foi iniciado. Exibir o registro isso já acontece porém o registro iniciado não está sendo "deletado".

    Abraços, WSenna
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  Assis 3/5/2015, 10:51

    WSenna

    Pode postar essa parte do seu BD ?


    .................................................................................
    *** Só sei que nada sei ***
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  wsenna 3/5/2015, 13:19

    Olá Grande Assis, bom dia.

    Amigão, tai a parte do meu projeto para suas considerações.
    Observe que a inserção de dados no subformulário pode ser feita através do formulário que exibe a Tabela de Temporalidade, bastando para isso que o usuário dê dois clicks sobre o item localizado. Nesse momento, além de inscrever o Código do Assunto ainda preencherá outros campos ocultos como FCorrente, FIntermediária e o Assunto propriamente dito.
    Também é possível simplesmente digitar o Código e a mesma situação acima se repetirá.
    O X da questão é se ocorrer o fato do usuário digitar um Resumo já existente numa Caixa idem o sistema avisará que existe uma duplicidade e mostrará o registro análogo, até aí tudo bem, só que num formulário simples esse fato anula (Deleta) o registro recém-criado  e exibe o registro análogo fato que não está ocorrendo num formulário contínuo.
    Como solução adotei a seguinte estratégia: Na existência de um campo Caixa (Localização do tipo Número) qualquer comando fica indisponível até que o usuário ou digite o número de uma nova caixa ou delete o registro.


    https://drive.google.com/file/d/0B9lRuJVSt5FGY2huUmpNdmJocFk/view?usp=sharing


    Abraços, WSenna
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  Assis 4/5/2015, 11:42

    Bom dia WSenna

    Difícil ....a opção de eliminar neste caso será mesmo a melhor.

    ' Dá opção de alterar dados
    If MsgBox("Já existe uma Localização com o número " & Me.Localização & " para este Resumo. " & Chr(13) & "Você deseja visualizar o registro? ", vbExclamation + vbYesNo, " Atenção") = vbNo Then
    Me.Undo
    DoCmd.SetWarnings False
    DoCmd.RunCommand acCmdDeleteRecord
    DoCmd.SetWarnings True
    Me.Refresh
    GoTo Saida


    .................................................................................
    *** Só sei que nada sei ***
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  wsenna 4/5/2015, 12:09

    Olá Assis, bom dia.

    Amigão, eu já havia pensado nessa forma contudo, se você tentar verá que mesmo assim o registro não é deletado. Parece coisa do além.
    Sendo assim, foi que optei por bloquear todos os comandos até que o usuário delete manualmente o registro duplicado.

    Abraços, WSenna
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  wsenna 4/5/2015, 12:21

    Olá Assis, estou aqui novamente.

    Amigão, a coisa funcionou.
    Bastou eu colocar a sua opção após o segundo Undo quando o sistema dá a opção de visualizar o registro já existente.

    Receba um grande abraço e um beijo em seu coração.

    WSenna
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  Assis 4/5/2015, 14:52

    Obrigado WSenna


    .................................................................................
    *** Só sei que nada sei ***
    avatar
    andrecc
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 41
    Registrado : 10/08/2012

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  andrecc 4/5/2015, 17:19


    Já havia pensado em solução parecida, inclusive achei que havia resolvido, mas se você pegar um registro já existente e redigitar o número da caixa, ele irá excluí-lo...
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  wsenna 4/5/2015, 18:15

    Olá André, boa tarde.

    A ideia é essa mesmo, quando você duplica o resumo com o mesmo número de uma caixa já existente, o sistema lhe informa da existência de uma caixa cadastrada para tal resumo com o mesmo número que você acabou de digitar. Ele, o sistema, ainda lhe dá a opção de exibir o registro já cadastrado anteriormente para que você aumente o número de Pastas (Documentos) ao mesmo tempo em que deleta o último registro digitado. Entretanto, suponha que a caixa digitada já esteja abarrotada, então você clica em Não na caixa me mensagem e o sistema apaga o valor digitado anteriormente para que você crie uma nova Caixa.

    Abraços, WSenna
    avatar
    andrecc
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 41
    Registrado : 10/08/2012

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  andrecc 4/5/2015, 19:55

    Prezado Senna:

    Ma se você pegar um registro do meio da tabela, e redigitar o numero da caixa (se estiver 08, por exemplo, apagar o 08 e logo em seguida redigitá-lo), ele não está apagando o registro?

    Tinha implementado uma solução parecida, inclusive estava prestes a postá-la, porém a tempo verifiquei o problema descrito acima. Talvez eu tenha colado o código em lugar errado...
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  wsenna 4/5/2015, 21:44

    Olá André, boa tarde.

    Amigão, experimente o modelo já com a sugestão do Amigo Assis.

    BD Modificado

    Abraços, WSenna
    avatar
    andrecc
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 41
    Registrado : 10/08/2012

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  andrecc 5/5/2015, 01:03

    Prezado Senna:

    Agradeço a atenção e a postagem do banco alterado! Só alerto que, a aplicação do jeito que se encontra, se alguém pegar um dos registros já existentes, redigitar o número da caixa e logo depois marcar "Sim", o registro será indevidamente apagado. Para a minha aplicação, isso não pode ocorrer. Vou ter que pensar em outra solução (estou com um problema parecido com o que você estava).

    Obrigado!


    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  wsenna 5/5/2015, 02:47

    Ok André, então vamos lá.

    No caso de algum usuário pegar um registro já existente e redigitar o número da caixa a mensagem realmente será mostrada, mas basta que o usuário escolha a opção Não e a "coisa" ficará bem.
    Entretanto, caso você ainda se sinta inseguro aprecie uma modificação que introduzi (grifado em vermelho) no código que disponibilizo abaixo:

    Private Sub Localização_BeforeUpdate(Cancel As Integer)
    On Error GoTo TrataErro

    If IsNull(Conteúdo) Then

    Dim DB As DAO.Database
    Dim rs As DAO.Recordset

    ' Testa se a Localização já existe na tabela

    If IsNull(DLookup("[Localização]", "tblLocalização", "[Localização] = " & Localização & " And Resumo = '" & Resumo & "'")) Then
    GoTo Saida
    End If
    ' Dá opção de alterar dados
    If MsgBox("Já existe uma Localização com o número " & Me.Localização & " para este Resumo. " & Chr(13) & "Você deseja adicionar algum documento ao registro existente?   " & Chr(13) & "Lembre-se que ao clicar em Sim este Registro será excluído.   ", vbExclamation + vbYesNo, " Atenção") = vbNo Then

    Me.Undo
    GoTo Saida

    End If

    'Abre o registro já existente
    Set rs = Me.RecordsetClone
    rs.FindFirst ("[Localização] = " & Localização & " And Resumo = '" & Resumo & "'")
    Me.Undo
    DoCmd.SetWarnings False
    DoCmd.RunCommand acCmdDeleteRecord
    DoCmd.SetWarnings True
    Me.Refresh
    Me.Bookmark = rs.Bookmark
    Set rs = Nothing

    Saida:
    Exit Sub

    TrataErro:
    MsgBox "Form_frmEntradasSub - Localização_BeforeUpdate" & vbCrLf & err.Description, vbExclamation + vbOKOnly, "Erro: " & CStr(err.Number)
    #If DESENV Then
    Stop
    Resume
    #End If
    Resume Saida

    End If

    Desta forma você não correrá esse risco, valew?
    Mais um detalhe que talvez tenha lhe passado desapercebido, caso o usuário delete o valor deixando o campo Caixa (na verdade Localização) em branco, ou seja Nulo, todos os comandos do formulário lhe lembrarão desse detalhe e o pobre do usuário terá de refazer o valor do campo.

    Veja esse exemplo:  BD Completo

    Abraços, WSenna

    End Sub
    avatar
    andrecc
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 41
    Registrado : 10/08/2012

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  andrecc 6/5/2015, 02:02

    Excelente! Agora ficou perfeito, muito boa essa ideia.

    Abraços.
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  wsenna 7/5/2015, 00:19

    Valew André.

    Então, estamos conversados.

    Abraços, WSenna

    Conteúdo patrocinado


    [Resolvido]Dois critérios. Empty Re: [Resolvido]Dois critérios.

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 21/11/2024, 20:53