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]Erro em código VBA-FindFirst

    avatar
    MRui
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11
    Registrado : 14/04/2012

    [Resolvido]Erro em código VBA-FindFirst Empty Erro em código VBA-FindFirst

    Mensagem  MRui Sáb 14 Abr - 21:04

    Quem me poderá ajudar?

    Não consigo fazer correr até ao fim o código seguinte:

    Private Sub Designa_Comercial_BeforeUpdate(Cancel As Integer)

    Dim SID As String
    Dim stLinkCriteria As String
    Dim rsc As DAO.Recordset

    Set rsc = Me.RecordsetClone

    SID = Me.Designa_Comercial.Value
    stLinkCriteria = "[Designa_Comercial]=" & "'" & SID & "'"

    'Check StudentDetails table for duplicate StudentNumber
    If DCount("Designa_Comercial", "TFichaSeguranca", stLinkCriteria) > 0 Then
    'Undo duplicate entry
    Me.Undo
    'Message box warning of duplication
    MsgBox "A Designação Comercial (" _
    & SID & ") já está registada na Base de Dados. É portanto impossível registá-la novamente em duplicado" _
    & vbCr & vbCr & "Reveja a Designação Comercial do produto.", _
    vbInformation, "Informação Repetida"
    'Go to record of original Student Number
    rsc.FindFirst stLinkCriteria
    Me.Bookmark = rsc.Bookmark
    End If
    Set rsc = Nothing
    End Sub

    O código identifica correctamente que tenho um valor em duplicado na Caixa de Texto de nome "Designa_Comercial", do Form "FFichasSegurança" e que está dependente do campo [Designa_Comercial] da Tabela "TFichaSeguranca".

    Assim, após me retornar correctamente a mensagem de valor duplicado e eu dar o OK, seria suposto encontrar o 1º valor e seleccionar esse registo. No entanto o código ao correr dá erro na linha:

    rsc.FindFirst stLinkCriteria
    Me.Bookmark = rsc.Bookmark


    A mensagem de erro diz o seguinte: Run-Time error "3159" Não é um marcador válido.

    Já percorri vários exemplos na Net e todos apontam para este código. Porquê então não conseguir corrê-lo?

    Obrigado
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  criquio Sáb 14 Abr - 21:15

    Olá, seja bem vindo ao forum! Tente passar o parâmetro direto no FindFirst, sem uso das variáveis. Se designa comercial for um campo tipo número:

    rsc.FindFirst Designa_Comercial=" & Me.Designa_Comercial.Value

    Se for um campo tipo texto:

    rsc.FindFirst Designa_Comercial = '" & Me.Designa_Comercial.Value & "'"


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    MRui
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11
    Registrado : 14/04/2012

    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  MRui Sáb 14 Abr - 21:37

    Obrigado pela ajuda,
    no entanto continua com erro: Run-Time error "3420" Objecto inválido ou sem definição

    rsc.FindFirst Designa_Comercial = "'" & Me.Designa_Comercial.Value & "'"
    Me.Bookmark = rsc.Bookmark

    O campo é efectivamente Texto e refiz o rsc.FindFirst mas o problema permanece

    Haverá outras alternativas?
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  criquio Sáb 14 Abr - 22:37

    Tente setar o rsc à tabela ao invés do formulário:

    Set rsc = CurrentDb.OpenRecordset("NomeDaTabela")


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    MRui
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11
    Registrado : 14/04/2012

    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  MRui Dom 15 Abr - 8:56

    Não resulta também,
    Utilizei esta instrução

    Set rsc = CurrentDb.OpenRecordset("TFichaSeguranca")

    com o inicial

    rsc.FindFirst stLinkCriteria

    e com o que me recomendou no post anterior

    rsc.FindFirst Designa_Comercial = "'" & Me.Designa_Comercial.Value & "'"

    e em ambos recebi o erro.

    Anexo uma imagem da instrução e pode-se ver que quando em Debug o valor que stLinkCriteria assume (Cloro) é o correto pois é esse o nome que estou a repetir e era esse que deveria encontrar como já introduzido na BD.

    Mais uma vez obrigado pela ajuda
    avatar
    MRui
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11
    Registrado : 14/04/2012

    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  MRui Dom 15 Abr - 9:27

    Será que pelo facto de estar a utilizar nomes iguais para a caixa de texto do Form (Designa_Comercial) e o nome do campo da Tabela/origem dos dados da caixa de texto (Designa_Comercial) poderá originar o erro?

    Private Sub Designa_Comercial_BeforeUpdate(Cancel As Integer)

    Dim SID As String
    Dim stLinkCriteria As String
    Dim rsc As DAO.Recordset

    'Set rsc = CurrentDb.OpenRecordset("TFichaSeguranca")

    Set rsc = Me.RecordsetClone

    SID = Me.Designa_Comercial.Value
    stLinkCriteria = "[Designa_Comercial]=" & "'" & SID & "'"

    'verifica na Tabela TFichaSegurança se há valores duplicados
    If DCount("Designa_Comercial", "TFichaSeguranca", stLinkCriteria) > 0 Then

    'Defaz a entrada de valo duplicado
    Me.Undo

    'mensagem de aviso para valor duplicado
    MsgBox "A Designação Comercial (" _
    & SID & ") já está registada na Base de Dados. É portanto impossível registá-la novamente em duplicado" _
    & vbCr & vbCr & "Reveja a Designação Comercial do produto.", _
    vbInformation, "Informação Repetida"

    'Vai para o registo original já existente e que foi duplicado

    'rsc.FindFirst Designa_Comercial = "'" & Me.Designa_Comercial.Value & "'"

    rsc.FindFirst stLinkCriteria

    Me.Bookmark = rsc.Bookmark

    End If
    Set rsc = Nothing

    End Sub

    Obrigado

    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  criquio Dom 15 Abr - 10:06

    Os nomes iguais não influem, uma vez que está usando Me. antes do nome do campo do formulário. Isso indica que está referenciando um controle do formulário, o que o diferencia do campo da tabela. Você quer apenas evitar duplicidade, certo? Talvez possa fazê-lo apenas utilizando um DCount:

    If DCount("*", "TFichaSeguranca", "Designa_Comercial='" & Me.Designa_Comercial.Value & "'") > 0 Then
    MsgBox "Já existe um registro com esse valor", vbInformation, "Atenção"
    Me.Undo
    Me.Filter = "Designa_Comercial='" & Me.Designa_Comercial.Value & "'"
    Me.FilterOn = True
    Else
    End If


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    MRui
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11
    Registrado : 14/04/2012

    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  MRui Dom 15 Abr - 11:16

    criquio,

    Como já terá entendido sou pré básico no VBA. Estou agora a procurar melhorar os meus conhecimentos e a utilização de instruções já escritas por outros nas minhas BD inicia-me. No entanto não é neste forum, apesar de tal se verificar, que procuro incrementar os meus conhecimentos em VBA, apenas estou à procura de uma solução.
    Assim desde já grato pela sua paciência.

    Em resposta ao seu post anterior:

    A detecção do valor do campo em duplicado, o undo valor e a mensagem de erro, estão cinco estrelas.Se eu retirar o código da rsc fica igualzinho ao que me acabou de enviar, o que desde já agradeço, no entanto eu pretendia também (e aqui é que reside o problema) que fosse seleccionado o registo já existente e que estava a ser duplicado, por forma a que o utilizador pudesse avançar logo com introdução de dados no form principal e/ou nos sub-forms.

    mais uma vez, grato pela ajuda
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  criquio Dom 15 Abr - 13:37

    Me.Filter = "Designa_Comercial='" & Me.Designa_Comercial.Value & "'"
    Me.FilterOn = True

    Teoricamente, as duas linhas acima fariam isso. A primeira filtraria os registros de acordo o critério passado e a segunda permitiria que esse filtro fosse usado. Não aconteceu dessa maneira?


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    MRui
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11
    Registrado : 14/04/2012

    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  MRui Dom 15 Abr - 14:24

    Não está a localizar o registo inicial (que a título de exemplo é o "Cloro".

    Acontece que aplica o Filtro pois quando dou o OK na caixa de diálogo o enumerador de registos do form que está de 1 de 8 passa para 1 de 1 o que significa que aplicou o filtro. No entanto não terá utilizado a chave de filtragem correta.

    Será adequado dizer que se aplicarmos a 1ª linha do código que me enviou

    Me.Filter = "Designa_Comercial='" & Me.Designa_Comercial.Value & "'"

    o que vai acontecer é que, no caso de estar a fazer um novo registo com " Cloro" a palavra cloro desaparece porque a instrução undu a apaga logo a seguir ao OK da caixa de diálogo o que fará com que o retorno para

    Me.Designa_Comercial.Value

    Seja branco. E daí eu ficar com 1 registo de 1 mas com o campo da Designa_Comercial em branco.

    Se eu estiver a alterar o nome de uma substância já existente e lhe atribuir o nome de "Cloro" vou ficar com 1 registo de 1 e o campo preenchido com o nome da substância que já lá estava, porque também como referi anteriormente o undo reverte para a situação anterior.

    Ou seja ele filtra, mas com o valor que o campo tem no momento e não com o valor que tinha antes fazer undo e eliminar a string que foi identificada como em duplicado.

    Obrigado pela paciência




    avatar
    MRui
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11
    Registrado : 14/04/2012

    [Resolvido]Erro em código VBA-FindFirst Empty Erro em código VBA-FindFirst - Resolvido

    Mensagem  MRui Seg 16 Abr - 19:05

    Erro encontrado.

    Como não consegui resolver o problema com as dicas que me foram dando meti mãos à obra e criei uma BD nova apenas com a tabela, a Consulta e o formulário que estavam relacionados. Verifiquei então que o código funcionava na perfeição.

    Segundo passo, comecei a eliminar Modulos, macros,reports, forms, consultas e tabelas, procurando com isto perceber se o código sem estes elementos funcionava, não consegui, continuava a dar erro, acabando por ficar apenas com a Tabela e o formulário. No formulário só fiquei com a chave primária e o Campo "Designa_Comercial". Comecei então a olhar para os campos na estrutura da tabela, apagando-os um, a um, quando verifico que ao apagar um campo cujo tipo de dados é "ANEXO" deixo de ter o erro no correr do código e correndo por completo tal como se pretendia.

    Conclusão: Este código não correrá no Access 2007 no caso de a tabela conter um campo cujo tipo de dados seja "Anexo".

    Já agora pergunto, há alguma solução para este tipo de erro atendendo a que quero manter "Anexo" como tipo de dados?

    Obrigado
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  criquio Seg 16 Abr - 19:33

    Tente colocar um On Error Resume Next antes de tudo isso aí para ver o que acontece.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    MRui
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11
    Registrado : 14/04/2012

    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  MRui Seg 16 Abr - 19:42

    Não dá o erro, mas também não se desloca para o campo com o registo inicial que estava a ser duplicado, fica no mesmo campo. É como se aquelas duas linha finais do código não existissem.

    Obrigado
    avatar
    Convidad
    Convidado


    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  Convidad Seg 16 Abr - 20:26

    Olá Pessoal

    Dando o meu pitaco Razz

    MRaul

    Se o campo Anexo é o culpado pelo erro, talvez seria interessante colocar esse campo anexo em outra tabela junto com um campo ID e então fazer o relacionamento entre as duas.
    Creio que dessa forma o código funcionará e você terá o campo anexo também.


    Abraços

    avatar
    MRui
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11
    Registrado : 14/04/2012

    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  MRui Seg 16 Abr - 20:45

    Sim, essa poderá ser uma solução. E recorrei a ela caso não se encontrem outras através de código.

    Obrigado por mais uma dica
    avatar
    MRui
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11
    Registrado : 14/04/2012

    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  MRui Ter 17 Abr - 20:16

    Tendo entendido onde estava o erro e não havendo muito mais a fazer considero este assunto resolvido.
    Um obrigado aos que me ajudaram
    avatar
    Convidad
    Convidado


    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  Convidad Ter 17 Abr - 20:28

    Obrigado pelo retorno !

    Boa sorte !!

    Conteúdo patrocinado


    [Resolvido]Erro em código VBA-FindFirst Empty Re: [Resolvido]Erro em código VBA-FindFirst

    Mensagem  Conteúdo patrocinado


      Data/hora atual: Dom 28 Abr - 14:44