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

    erro em tempo de execução 2471

    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1078
    Registrado : 23/03/2010

    erro em tempo de execução 2471 Empty erro em tempo de execução 2471

    Mensagem  Finformática 2/6/2013, 17:34

    Grandes Mestres

    Qual o motivo de erro em tempo de execução no código abaixo:

    Private Sub DatAte_AfterUpdate()
    Dim registros As String
    Dim MesAnoAtu As Date
    Dim InicioMes As Date
    Dim FimMes As Date
    'Dim DtHoje As String
    Dim dtate As String


    InicioMes = DateSerial(Year(DatAte), Month(DatAte), 1) 'primeiro dia do mês
    MsgBox InicioMes 'primeiro dia do mês

    FimMes = DateSerial(Year(DatAte), Month(DatAte) + 1, 0) 'último dia mês atual
    MsgBox FimMes 'último dia mês atual


    registros = DCount("MatAte", "TbAtendimento", "[MatAte]=Forms![Cad_Atendimento]![MatAte] and [CodAte]=Forms![Cad_Atendimento]![CodAte] and [DatAte]>=InicioMes and [DatAte]<=FimMes")


    MsgBox registros
    If registros > 2 Then
    MsgBox "Associado já extrapolou limite de atendimentos no período", vbExclamation, "EXCESSO DE SALÃO"

    DoCmd.CancelEvent 'cancela o evento.

    Me.[AteCod].SetFocus
    Me.[codcod].SetFocus
    Me.Undo
    Cancel = True
    End If

    End Sub

    Muito grato

    Abraços
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3883
    Registrado : 04/04/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Avelino Sampaio 2/6/2013, 18:25

    Temos aqui tipico erro clássico que acontece com os mais novos.

    O VBA considera como uma string tudo que tiver entre aspas.

    Observe o texto:

    "kinhosinfo tem um compromisso que começa IncioMes e términa FimMes"

    Sabe o que o VBA interpreta InicioMes e FimMes no texto acima? Absolutamente nada, pois ambas as palavras estão dentro da string. Para que o VBA enxergue que InicioMes e FimMes se tratam de variáveis e que possuem valores a serem interpretados, é preciso que fiquem fora da string, conforme exemplo abaixo:

    "kinhosinfo tem um compromisso que começa " & IncioMes & " e términa " & FimMes

    Que tal uma paradinha técnica por alguns minutos e assistir este meu vídeo. Irá se sentir mais confiante.

    http://www.usandoaccess.com.br/tutoriais/tuto35.asp?id=1#inicio

    Depois do vídeo, tente vc mesmo solucionar o problema.

    Aguardamos


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1078
    Registrado : 23/03/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Finformática 2/6/2013, 19:57

    Grande Avelino,

    Cliquei no link e não tem vídeo. Li diversos tópicos seus (grandes dicas, grandes bizus). Ler o que escreves é sempre uma lição para nós, eternos aprendizes. Tentei fazer como dissestes, no entanto sempre fica erro de abrir/fechar aspas/perênteses. Onde ficariam os mesmos para ficar totalmente correto?

    Muito grato
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3883
    Registrado : 04/04/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Avelino Sampaio 2/6/2013, 20:35

    Use o Internet Explorer e clique no Play do quadro, que irá rodar o vídeo.

    Bom estudo!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1078
    Registrado : 23/03/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Finformática 2/6/2013, 21:38

    E as aspas e parênteses?

    registros = DCount("MatAte", "TbAtendimento", "[MatAte]=Forms![Cad_Atendimento]![MatAte] and [CodAte]=Forms![Cad_Atendimento]![CodAte] and "[DatAte] > = " & InicioMes And "[DatAte] < = " & FimMes)
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3883
    Registrado : 04/04/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Avelino Sampaio 2/6/2013, 22:00

    [MatAte] é um campo do tipo string ou número ?


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1078
    Registrado : 23/03/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Finformática 3/6/2013, 00:27

    número
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3883
    Registrado : 04/04/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Avelino Sampaio 3/6/2013, 07:11

    Experimente:

    Dim filtro$
    filtro= "[MatAte]=" & Forms![Cad_Atendimento]![MatAte] & " and [CodAte]=" & Forms![Cad_Atendimento]![CodAte] & " and ([DatAte]>=" & InicioMes & " And [DatAte]<=" & FimMes & ")"
    registros = DCount("MatAte", "TbAtendimento",filtro)

    Sucesso!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1078
    Registrado : 23/03/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Finformática 3/6/2013, 11:24

    Grandes Mestres

    Utilizei a linha exatamente do modo que copiei daqui e continua dando mesmo erro (2471).
    Com este código quero saber quantos atendimentos foram feitos por determinado associado (MatAte = Número) de um sindicato, dependendo do tipo de atendimento (CodAte = Texto) e do intervalo de data (primeiro ao último dia do mês) vindo de DatAte = Data/Hora. InicioMes e FimMes vem de DatAte.
    MatAte = Número
    CodAte = Texto
    DatAte = Data/Hora

    Onde foi que errei?

    Dim filtro$
    filtro = "[MatAte]=" & Forms![Cad_Atendimento]![MatAte] & " and [CodAte]=" & Forms![Cad_Atendimento]![CodAte] & " and ([DatAte]>=" & InicioMes & " And [DatAte]<=" & FimMes & ")"
    registros = DCount("MatAte", "TbAtendimento", filtro)

    Ainda falta incluir no filtro: [CodAte]="Salão". Como ficaria?

    Muito grato
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3883
    Registrado : 04/04/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Avelino Sampaio 3/6/2013, 12:40

    Meu conselho, quando vc for pegar uma sintaxe grande dessa é montar em partes e ir testando.

    Teste 1:

    Verifique se está retorno valor, sem aplicar a filtragem

    registros = DCount("MatAte", "TbAtendimento")

    Teste 2:

    Verifique se funciona com apenas um filtro.

    Dim filtro$
    filtro= "[MatAte]=" & Forms![Cad_Atendimento]![MatAte]
    registros = DCount("MatAte", "TbAtendimento",filtro)

    Teste 3

    Teste o filtro com o outro campo. Como [codAte] é string temos que acrescentar o apóstrofe. Está explicado no artigo que vc leu.

    Dim filtro$
    filtro= "[CodAte]='" & Forms![Cad_Atendimento]![CodAte] & "'"
    registros = DCount("MatAte", "TbAtendimento",filtro)

    Teste 4:

    Funcionando, junte os dois filtros:

    Dim filtro$
    filtro= "[MatAte]=" & Forms![Cad_Atendimento]![MatAte] & " and [CodAte]='" & Forms![Cad_Atendimento]![CodAte] & "'"
    registros = DCount("MatAte", "TbAtendimento",filtro)


    Teste 5:

    Fica por sua conta testar o retorno das datas e depois juntar a filtragen final


    Aguardamos


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1078
    Registrado : 23/03/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Finformática 3/6/2013, 15:14

    Grande Avelino

    Fiz os devidos testes e o resultado foi o seguinte:
    1 - Obtive 65 registros que são os registros da TbAtendimento
    2 - 57 registros que coincide MatAte
    3 - 50 registros que coincide CodAte
    4 - 48 registros que coincidem MatAte + CodAte

    Acho que agora dará tudo certo. Vou tentar e retorno.

    Mais uma observação: Este código eu coloquei no campo DatAte do formulário em Após Atualizar e depois em Antes de atualizar e em ambos os casos só entra no código se redigitar a data em DatAte que está como padrão a data do sistema?

    Mais uma vez muito grato

    Abraço
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1078
    Registrado : 23/03/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Finformática 3/6/2013, 16:01

    Caro Avelino

    O caso 5 que você deixou para mim é exatamente todo o problema em questão. Como dissestes, este tipo de variável (InicioMes + FimMes) teria um tratamento diferenciado e é este diferenciado que não dá certo. Aí é que reza a questão. Queria apenas um exemplo deste tratamento. Seria possível grande Mestre?

    Abraço
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3883
    Registrado : 04/04/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Avelino Sampaio 3/6/2013, 17:04

    Te deixei a pior parte (risos).

    Vejamos como vc deve testar até chegar no valor:

    Teste 5:

    Dim filtro$
    filtro = "[DatAte]>=" & InicioMes
    msgbox filtro 'aqui vc irá verificar se data InicioMes está passando o valor para o filtro
    registros = DCount("MatAte", "TbAtendimento", filtro)

    Se falhar tente com a #

    Dim filtro$
    filtro = "[DatAte]>=#" & InicioMes & "#"
    msgbox filtro 'aqui vc irá verificar se data InicioMes está passando o valor para o filtro
    registros = DCount("MatAte", "TbAtendimento", filtro)

    Teste 6:

    Dim filtro$
    filtro = "[DatAte]<=" & FimMes
    msgbox filtro 'aqui vc irá verificar se data FimMes esta passando o valor para o filtro
    registros = DCount("MatAte", "TbAtendimento", filtro)

    Teste 7:
    Quando acertar, junte as duas datas com o AND

    Dim filtro$
    filtro = "[DatAte]>=#" & InicioMes & "# AND [DatAte]<=#" & FimMes & "#"
    msgbox filtro 'aqui vc irá verificar se data InicioMes e FimMes estão sendo passandos para o filtro
    registros = DCount("MatAte", "TbAtendimento", filtro)

    Aguardamos


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1078
    Registrado : 23/03/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Finformática 3/6/2013, 19:08

    Grande Avelino

    O pior que ficou para mim ainda não quer funfar:

    No primeiro teste exibe o filtro: [DatAte]>=01/06/13 que está correto. Porém depois de filtrar tenho 72 registros que é o total da tabelas (tendo data inferiores a 01/06/13). Tanto com # como sem.

    No segundo teste exibe o filtro: [DatAte]<=30/06/13 e me retorna 0 (zero) registros

    Quando junta tudo... Zero registros

    E agora?
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3883
    Registrado : 04/04/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Avelino Sampaio 3/6/2013, 20:25

    Imaginei que utilizando a função dateSerial ficasse no formato americano.

    Force a formatação e veja se resulta:

    Dim filtro$
    filtro = "[DatAte]>=#" & Format(InicioMes,"dd/mm/yy") & "#" 'ou use dd/mm/yyyy
    msgbox filtro 'aqui vc irá verificar se data InicioMes está passando o valor para o filtro
    registros = DCount("MatAte", "TbAtendimento", filtro)


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3883
    Registrado : 04/04/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Avelino Sampaio 3/6/2013, 21:19

    Ops! me distrai. Tem que ser no formato americano

    Dim filtro$
    filtro = "[DatAte]>=#" & Format(InicioMes,"mm/dd/yy") & "#" 'ou use mm/dd/yyyy
    msgbox filtro 'aqui vc irá verificar se data InicioMes está passando o valor para o filtro
    registros = DCount("MatAte", "TbAtendimento", filtro)


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1078
    Registrado : 23/03/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Finformática 3/6/2013, 22:38

    Mestre

    Com relação ao intervalo de datas aparentemente começou a funcionar. Fiz alguns testes rápidos e passou. Falta juntar com o restante dos critérios. Vou tentar e retorno...

    Dúvidas: Não entendi a questão da data modelo americano. Quando exibo o critério antes desta formatação aparece [DatAte]>=30/06/13. Isto não é o correto? E não dá certo. Se formatar para mm/dd/yy passa. Tem como me dizer lago?

    Ainda ficou outra dúvida citada anteriormente: Qual o motivo que quando não redigito o campo DatAte ele não entra no código. O campo DatAte tem como valor padrão a data do sistema. Se eu der enter não entra no código. Já coloquei no antes de atualiza e depois de atualizar e faz a mesma coisa.

    Fico no aguardo

    Muito grato
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1078
    Registrado : 23/03/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Finformática 4/6/2013, 14:51

    Caro Avelino

    Esqueceu d´eu?

    O intervalo de datas está funcionando perfeitamente. Graças à Deus e a você. No entanto ainda falta:

    Dúvidas: Para efeito de aprendizado. Não entendi a questão da data modelo americano. Quando exibo o critério antes desta formatação aparece [DatAte]>=30/06/13. Isto não é o correto? E não dá certo. Se formatar para mm/dd/yy passa. Tem como me dizer lago?

    Ainda ficou outra dúvida citada anteriormente: Qual o motivo que quando NÃO redigito o campo DatAte ele não entra no código. O campo DatAte tem como valor padrão a data do sistema. Se eu der enter não entra no código. Já coloquei no antes de atualiza e depois de atualizar e no momento está Ao perder foco e faz a mesma coisa.

    No momento código está assim:

    Private Sub DatAte_LostFocus()

    If [CodAte] = "Salão" Then

    Dim registros As String
    Dim MesAnoAtu As Date
    Dim InicioMes As Date
    Dim FimMes As Date
    'Dim DtHoje As String
    Dim dtate As String
    Dim filtro$

    InicioMes = DateSerial(Year(DatAte), Month(DatAte), 1) 'primeiro dia do mês
    'MsgBox InicioMes 'primeiro dia do mês

    FimMes = DateSerial(Year(DatAte), Month(DatAte) + 1, 0) 'último dia mês atual
    'MsgBox FimMes 'último dia mês atual


    filtro = "[MatAte]=Forms![Cad_Atendimento]![MatAte] and [CodAte]=Forms![Cad_Atendimento]![CodAte] and [DatAte]>=#" & Format(InicioMes, "mm/dd/yy") & "# AND [DatAte]<=#" & Format(FimMes, "mm/dd/yy") & "#"

    registros = DCount("MatAte", "TbAtendimento", filtro)

    'MsgBox registros
    If registros > 1 Then
    MsgBox "Associado já usou seu limite de atendimentos no período " & registros, vbExclamation, "LIMITE DE ATENDIMENTO"

    Me.Undo
    Me.[AteCod].SetFocus
    Me.[codcod].SetFocus


    End If

    End If


    End Sub

    Também não limpa os campos ao voltar para início do formulário (tirei as linhas que não funcionaram)
    Também hora salva hora não salva mesmo entrando no código


    Fico no aguardo

    Muito grato
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3883
    Registrado : 04/04/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Avelino Sampaio 4/6/2013, 18:03

    Confuso hem!!! Talvez resolva bem utilzando o "antes de atualizar" do formulário.

    Teste o exemplo deste tópico e veja se atende:

    http://maximoaccess.forumeiros.com/t12727-resolvidovalidacao-de-dados-em-formulario-com-dados-acoplados

    Quanto a data americana vou deixar para vc concluir ao reler e assitir meu video.

    Sucesso!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3883
    Registrado : 04/04/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Avelino Sampaio 4/6/2013, 18:08

    Outra coisa - quando se refereir a um campo tem que colocar o auto identificador ME na frente.


    InicioMes = DateSerial(Year(me!DatAte), Month(me!DatAte), 1) 'primeiro dia do mês
    'MsgBox InicioMes 'primeiro dia do mês

    FimMes = DateSerial(Year(me!DatAte), Month(me!DatAte) + 1, 0) 'último dia mês atual
    'MsgBox FimMes 'último dia mês atual

    Sobre o ME vc pode estudar aqui:

    http://www.usandoaccess.com.br/tutoriais/tuto52.asp?id=1#inicio

    Bom estudo!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1078
    Registrado : 23/03/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Finformática 4/6/2013, 18:14

    Vou estudar e volto com a resposta.

    Abraços
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1078
    Registrado : 23/03/2010

    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Finformática 4/6/2013, 22:20

    Grande Avelino

    Já li, estudei, testei, endoidei, pesquisei, enfim fiz tudo que minha mente alcança e não consigo ver onde está o erro. Acho que tem haver com as datas invertidas (já li bastante sobre), tipo de dados, etc., mas não consigo enxergar.
    Seria possível te enviar o formulário com as tabelas para me ajudar. Não sei mais o que faço. Utilizei todas as suas orientações e outros feras desta selva e não resolve. Sei que é uma besteira e você de cara resolverá.
    Se posso mandar. Para onde mando?
    Muito Grato

    Conteúdo patrocinado


    erro em tempo de execução 2471 Empty Re: erro em tempo de execução 2471

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 16/5/2024, 13:06