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

    [Resolvido]Erro em Função FindFirst com Pesquisa e Tabela

    Compartilhe

    diegoluvizon
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 20/06/2014

    [Resolvido]Erro em Função FindFirst com Pesquisa e Tabela

    Mensagem  diegoluvizon em Sex 20 Jun 2014, 18:19

    Olá,
    Estou com um problema em um código em não consigo identificá-lo para corrigir.
    Antes vou explicar, tenho uma tabela chamada "tblTitulos" com os campos [idTitulo] e [descriçaoTitulo], essa tabela é onde armazeno os dados.
    Tenho um formulário contínuo chamado "frmTitulos" com os controles "txtidTitulo" (numeração automática) e "txtdescriçao" (entrada pelo teclado), onde eu entro com todos os dados, porém estes dados são armazenados em uma tabela temporária chamada "tblTitulos_Temp" e só são adicionados na "tblTitulos" quando ativado um botão de comando chamado "btnSalvar", o qual executa uma consulta de acréscimo na "tblTitulos" somente do campo [descriçaoTitulo], e após isso limpa a tabela "tblTitulos_Temp" através de uma consulta de exclusão.

    Meu problema é o seguinte, como eu tenho um formulário contínuo eu preciso testar os registros antes que sejam registrados, ou seja, antes que o controle "txtdescriçao" perca o foco, pois não quero ter nenhum registro com descrição repetida. Para isso usei a função ".FindFirst", com a expectativa de que ela busque em minha tabela fonte "tblTitulos" se o registro atual já existe, usando como critério o conteúdo do controle "txtdescriçao".

    Mas está dando erro na linha do FindFirst, e eu não consigo identificá-lo, o código está abaixo, se alguem puder me ajudar eu agradeço.

    Código:
    Private Sub txtdescriçao_LostFocus()
        Dim rst As DAO.Recordset
        Dim strCriteria As String
        Set rst = CurrentDb.OpenRecordset("tblTitulos")

        strCriteria = "[descriçaoTitulo] ='" & Me.txtdescriçao & "'"
        
        If txtdescriçao <> "" Then
            With rst
            .FindFirst (strCriteria)
             If Not .NoMatch Then
                 Me.Undo
                 MsgBox "Titulo Já Cadastrado no Banco de Dados!", vbCritical, "Atenção!"
                 txtdescriçao.SetFocus
             End If 'end if 3
            End With
            rst.Close
            Set rst = Nothing
        End If
        
    End Sub

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2484
    Registrado : 29/06/2012

    Re: [Resolvido]Erro em Função FindFirst com Pesquisa e Tabela

    Mensagem  Noobezinho em Sex 20 Jun 2014, 18:58

    OLá

    Experimente tirar o parênteses:

    .FindFirst strCriteria


    Se não funfar, diga qual é a mensagem do erro.


    Abraços


    Noob


    .................................................................................
    Noobezinho

    * A solução funcionou?  [Você precisa estar registrado e conectado para ver esta imagem.] 
    Agradeça e feche o tópico clicando no botão Resolvido
    Se não sabe como, veja [Você precisa estar registrado e conectado para ver este link.].

    Como anexar imagem no teu post do fórum : [Você precisa estar registrado e conectado para ver este link.]

    * Criar arquivos.zip com o Winrar - veja [Você precisa estar registrado e conectado para ver este link.].

    Atualmente estou verificando se quem está pedindo ajuda, ajudamos e não retornou.
    Se a pessoa em questão não deu retorno, não tentarei ajudar novamente .

    diegoluvizon
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 20/06/2014

    Re: [Resolvido]Erro em Função FindFirst com Pesquisa e Tabela

    Mensagem  diegoluvizon em Seg 23 Jun 2014, 04:35

    Tirei os parenteses, mas continua dando o mesmo erro.

    A mensagem de erro é a seguinte:

    Erro em tempo de execução '3251':

    Operação não suportada para este tipo de objeto.


    Abraço

    Diego

    Windows 8 - 64 bits
    MS Access 2010

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2484
    Registrado : 29/06/2012

    Re: [Resolvido]Erro em Função FindFirst com Pesquisa e Tabela

    Mensagem  Noobezinho em Seg 23 Jun 2014, 04:53

    Mude de propriedade;

    Coloque o código na propriedade ao sair do controle txtdescriçao.

    Agora, sabemos que é um tanto "cavernoso" fazer pesquisa através de strings.

    Por mais que tente, uma descrição sempre será diferente daquela gravada na tabela.

    Dica: Grave junto com a descrição, o id do título, assim, irá buscar o id na tabela temporária,
    já que esse registro só estará la se tiver uma descrição, certo?

    Mesmo assim, ainda você poderá verificar se aquele ID  tem uma descrição gravada na tabela temporária( Not isnull(me.descrição).

    Espero estar ajudando

    Noob


    .................................................................................
    Noobezinho

    * A solução funcionou?  [Você precisa estar registrado e conectado para ver esta imagem.] 
    Agradeça e feche o tópico clicando no botão Resolvido
    Se não sabe como, veja [Você precisa estar registrado e conectado para ver este link.].

    Como anexar imagem no teu post do fórum : [Você precisa estar registrado e conectado para ver este link.]

    * Criar arquivos.zip com o Winrar - veja [Você precisa estar registrado e conectado para ver este link.].

    Atualmente estou verificando se quem está pedindo ajuda, ajudamos e não retornou.
    Se a pessoa em questão não deu retorno, não tentarei ajudar novamente .

    diegoluvizon
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 20/06/2014

    Re: [Resolvido]Erro em Função FindFirst com Pesquisa e Tabela

    Mensagem  diegoluvizon em Ter 24 Jun 2014, 14:36

    Noobezinho,
    Meu código, não sei por qual motivo, não estava reconhecendo certo a seguinte linha:

    Código:
    Set rst = CurrentDb.OpenRecordset("tblTitulos")

    Criei um formulário de consulta chamado "frmConsultaTitulos" sem nenhum controle, com fonte de registro em uma consulta que busca os dados da tabela "tblTitulos".

    e modifiquei o código para o a seguir:

    Código:
    Private Sub txtdescriçao_LostFocus()
    Dim rst As Recordset
    Dim strCriteria As String
    Dim frm As Variant
    Dim nregistros, contator As Integer
    nregistros = Me.RecordsetClone.RecordCount
       
    If IsNull(Me.txtdescriçao) And nregistros = 0 Then
        Exit Sub
    ElseIf IsNull(Me.txtdescriçao) And nregistros > 0 Then
        MsgBox "Campo em Branco", vbCritical, "Preenchimento Inválido"
        Me.txtdescriçao.SetFocus
    Else
            DoCmd.OpenForm "frmConsultaTitulos", acPreview, , , acFormReadOnly, acHidden
            Set frm = Forms!frmConsultaTitulos
            Set rst = frm.RecordsetClone
            With rst
                .FindFirst "[descriçaoTitulo] = '" & Me.txtdescriçao & "'"
                If Not .NoMatch Then
                MsgBox "O Titulo " & Me.txtdescriçao & " já existe no banco de dados"
                DoCmd.Close acForm, "frmConsultaTitulos", acSaveNo
            End If
            End With
        End If
    End Sub

    E meu comando FindFirst funcionou perfeitamente!
    Agora quero digitar todos os dados, e que só sejam verificados quando em clicar no botão salvar, mas isso é assunto para outro tópico!
    Obrigado pela ajuda, se tiver uma idéia melhor e sempre bem vinda!


    .................................................................................
    Atenciosamente,
    Diego

    Windows 8 Pro 64 bits
    MS Access 2010

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2484
    Registrado : 29/06/2012

    Re: [Resolvido]Erro em Função FindFirst com Pesquisa e Tabela

    Mensagem  Noobezinho em Ter 24 Jun 2014, 15:21

    Diego

    Que ótimo que conseguiu.

    Mas você pode fazer uma consulta dessa tabela e colocar a consulta no lugar da tabela:

    Set rst = CurrentDb.OpenRecordset("tblTitulos") ficaria asssim:

    Set rst = CurrentDb.OpenRecordset("NomeDaConsulta") ou ainda:

    Set rst = CurrentDb.OpenRecordset("Select ...")

    Para desencargo de consciência, teste o código colocando o nome de outra tabela, veja também as pontuações.

    Abraços

    Noob


    .................................................................................
    Noobezinho

    * A solução funcionou?  [Você precisa estar registrado e conectado para ver esta imagem.] 
    Agradeça e feche o tópico clicando no botão Resolvido
    Se não sabe como, veja [Você precisa estar registrado e conectado para ver este link.].

    Como anexar imagem no teu post do fórum : [Você precisa estar registrado e conectado para ver este link.]

    * Criar arquivos.zip com o Winrar - veja [Você precisa estar registrado e conectado para ver este link.].

    Atualmente estou verificando se quem está pedindo ajuda, ajudamos e não retornou.
    Se a pessoa em questão não deu retorno, não tentarei ajudar novamente .

    diegoluvizon
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 20/06/2014

    Re: [Resolvido]Erro em Função FindFirst com Pesquisa e Tabela

    Mensagem  diegoluvizon em Ter 24 Jun 2014, 16:14

    Boa Noite Noob

    Usando a linha: Set rst = CurrentDb.OpenRecordset("tblTitulos") como

    Set rst = CurrentDb.OpenRecordset("tblTitulos", dbOpenDynaset), também funcionou, e acho que é uma solução bem melhor que a que consegui alterando o código!


    .................................................................................
    Atenciosamente,
    Diego

    Windows 8 Pro 64 bits
    MS Access 2010

      Data/hora atual: Sab 03 Dez 2016, 07:38