MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    FindFirst em dois campos

    Compartilhe

    Luís Antunes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 54
    Registrado : 05/04/2016

    FindFirst em dois campos

    Mensagem  Luís Antunes em Qua 03 Ago 2016, 00:47

    Necessito que este código me alerte se o registo já deu entrada através do "FindFirst" em dois campos, numérico e data.
    Este mesmo código está a correr noutra BD só que os dois campos são de texto.
    Antecipadamente grato

    Luís Filipe Antunes

    Código:
    Private Sub Ofnº_BeforeUpdate(Cancel As Integer)
    'seta variavel recordset
    Set Tabela = Me.RecordsetClone
        With Tabela
             'verifica se o cliente já está cadastrado
             .FindFirst "OfNº='" & Me.OfN & "' and [DataEntrada]= '" & Me.DataEntrada & "'"

             'se encontrou então
             If Not .NoMatch Then
                Cancel = True
                'Desfaz o registro
                Me.Undo
                MsgBox "Registo repetido", vbCritical, "Atenção"
                'exibe o registro já cadastrado
                Me.Bookmark = .Bookmark
              End If
         End With
     Set Tabela = Nothing
    End Sub

    FabioPaes
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2302
    Registrado : 14/08/2013

    Re: FindFirst em dois campos

    Mensagem  FabioPaes em Qua 03 Ago 2016, 01:41

    Campo do tipo Texto fica dentro de Aspas simples e dupla como nesse caso:"OfNº='" & Me.OfN & "'


    Agora se for Numero fica somente dentro de Aspas:

    "OfNº=" & Me.OfN & "


    Nao confundir com a abertura e.fechamento do Criterio ta..."OfNº=
    Essa nao muda... sempre sera aspas Simples. Pois ela indica o inicio do filtro e deve ser fechada no final...


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!

    Luís Antunes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 54
    Registrado : 05/04/2016

    FindFirst em dois campos

    Mensagem  Luís Antunes em Qua 03 Ago 2016, 10:25

    Fábio
    Agora dá-me erro na linha 3 Set Tabela
    Faltará alguma referência?
    Luís Filipe Antunes

    FabioPaes
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2302
    Registrado : 14/08/2013

    Re: FindFirst em dois campos

    Mensagem  FabioPaes em Qua 10 Ago 2016, 02:51

    Amigo, o codigo esta correto... Inclusive testei aqui copiando seu codigo e funcionou perfeitamente...

    Posta aqui seu BD...


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!

    Luís Antunes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 54
    Registrado : 05/04/2016

    FindFirst em dois campos

    Mensagem  Luís Antunes em Qua 10 Ago 2016, 20:23

    Fábio
    Aqui vai a BD

    Luís Antunes
    Anexos
    Entradas.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (389 Kb) Baixado 18 vez(es)

    FabioPaes
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2302
    Registrado : 14/08/2013

    Re: FindFirst em dois campos

    Mensagem  FabioPaes em Qui 11 Ago 2016, 02:05

    Amigao, a principio o erro se da por nso ter declsrado a variavel... declsre ela na linha antes do erro...

    Dim Tabelas as DAO.Recordset

    Outra coisa que achei estranho e que nao tem esse Campo me.OFN no seu formulario...

    Outro erro e que esse Campo Of da tabela e Texto, entao ele fica entre Aspas Simples e Dupla...

    .FindFirst "OfNº='" & Me.OfN & "' .....


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!

    Luís Antunes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 54
    Registrado : 05/04/2016

    FindFirst em dois campos

    Mensagem  Luís Antunes em Qui 11 Ago 2016, 14:34

    Fábio
    Já declarei a variável e pus as duplas aspas e agora dá erro em Cancel



    Código:
    [color=#ffff00]Private Sub Referência_AfterUpdate()[/color]
    Dim Tabela As DAO.Recordset
    'seta variavel recordset
    Set Tabela = Me.RecordsetClone

        With Tabela
             'verifica se o cliente já está cadastrado
             .FindFirst "Of="" & Me.Of & "" and [Data Correspond]= '" & Me.[Data Correspond] & "'"
          

             'se encontrou então
             If Not .NoMatch Then
                [color=#0099ff]Cancel[/color] = True
                'Desfaz o registro
                Me.Undo
                MsgBox "Registo repetido", vbCritical, "Atenção"
                'exibe o registro já cadastrado
                Me.Bookmark = .Bookmark
              End If
         End With
     Set Tabela = Nothing

    End Sub

    Luís Antunes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 54
    Registrado : 05/04/2016

    FindFirst em dois campos

    Mensagem  Luís Antunes em Qui 11 Ago 2016, 15:01

    O código que enviei vai com erros, quis pôr linhas coloridas mas a cor não foi assumida.
    Envio novamente o código sem o [color]

    Private Sub Referência_AfterUpdate()
    Dim Tabela As DAO.Recordset
    'seta variavel recordset
    Set Tabela = Me.RecordsetClone

       With Tabela
            'verifica se o cliente já está cadastrado
            .FindFirst "Of="" & Me.Of & "" and [Data Correspond]= '" & Me.[Data Correspond] & "'"
         

            'se encontrou então
            If Not .NoMatch Then
               Cancel= True
               'Desfaz o registro
               Me.Undo
               MsgBox "Registo repetido", vbCritical, "Atenção"
               'exibe o registro já cadastrado
               Me.Bookmark = .Bookmark
             End If
        End With
    Set Tabela = Nothing

    End Sub[/code]

    FabioPaes
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2302
    Registrado : 14/08/2013

    Re: FindFirst em dois campos

    Mensagem  FabioPaes em Qui 11 Ago 2016, 20:40

    Amigo, data nao e tao simples utiliza-las pelos VBA... Deve antes converte-la para evitar erros de interpretação e utilizar o # antes de depois# da data...

    Quanto a Aspa Dupla e simples, entenda " + ' Ficando assim:

    Of='" & Me.[Referência] & "'


    Substitua seu Codigo por este, e funcionará...
    Se atente para as orientaçoes da mensagem anterior, pois estava mandando comparar com nome de campos que NAO EXISTIA em seu formulario.
    Código:

    Dim Tabela As DAO.Recordset
    Dim F As String

    Set Tabela = Me.RecordsetClone

    F = "Of='" & Me.[Referência] & "' and [Data Correspond]=  #" & Format(Me.DataDocumento, "mm/dd/yyyy") & "#"
        With Tabela
            'verifica se o cliente já está cadastrado
            .FindFirst F
            'se encontrou então
            If Not .NoMatch Then
                'Desfaz o registro
                Me.Undo
                MsgBox "Registo repetido", vbCritical, "Atenção"
                'exibe o registro já cadastrado
                Me.Bookmark = .Bookmark
              End If
        End With
     Set Tabela = Nothing


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!

    Luís Antunes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 54
    Registrado : 05/04/2016

    FindFirst em dois campos

    Mensagem  Luís Antunes em Sex 12 Ago 2016, 12:33

    Fábio
    Obrigado por tudo.
    O código funcionou em beleza. Fiz algumas alterações porque, nas entradas de correspondência, dalgumas vezes a referência e a data coincidem. por isso alterei o código porque, posso querer validar quando eles coincidem.
    Faço alguma confusão com os nomes dos campos e os nomes da origem do controle
    Vou postar o código alterado, caso queira comentar agradeço.

    Boas olimpíadas

    Luís Filipe Antunes

    Código:
    On Error GoTo Err_Proc_BeforeUpdate

    Dim Tabela As DAO.Recordset
    Dim Cancel As Integer
    Dim Mess As String


    Set Tabela = Me.RecordsetClone
     'seta variavel recordset
     
        With Tabela
              'verifica se o liente já está Inserido
    .FindFirst "Of='" & Me.[Referência] & "' and [Data Correspond]=  #" & Format(Me.DataDocumento, "mm/dd/yyyy") & "#"
        'se encontrou então
              If Not .NoMatch Then
                Cancel = True
                'Desfaz o registro
                Mess = MsgBox("Este Entrada já existe, quer anular a entrada?", vbQuestion + vbYesNo, "Aviso!")
                If Mess = vbYes Then
                'Desfaz o registro
                    Me.Undo
                    MsgBox "Entrada pretendida", vbCritical, "Atenção"
                    Me.Bookmark = .Bookmark
                    'exibe o registro já Registado
                Else
                Cancel = False
                    'Sai da SUB
                    Exit Sub
                End If
              End If
          End With
      Set Tabela = Nothing
    Err_Proc_BeforeUpdate:
    Exit Sub

      Data/hora atual: Dom 04 Dez 2016, 14:16