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

    FindFirst em dois campos

    Compartilhe

    Luís Antunes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 83
    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
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3235
    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 : 83
    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
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3235
    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 : 83
    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 27 vez(es)
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3235
    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 : 83
    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 : 83
    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]
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3235
    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 : 83
    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: Sex 28 Jul 2017, 11:48