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


3 participantes

    [Resolvido]Recordset - Entendendo

    Leandro
    Leandro
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1601
    Registrado : 12/11/2009

    [Resolvido]Recordset - Entendendo Empty Recordset - Entendendo

    Mensagem  Leandro 22/2/2013, 15:29

    Boa tarde Forumeiros!
    Prezados, montei o código abaixo para verificar datas nos lançamentos dos serviços, os períodos de medição começam sempre no 1º dia do mês mas avançam dentro do próximo mês.
    Bem não é sobre a validação em si que quero perguntar é sobre o Recordset. Hoje estudei e montei as vairáveis com esse recurso, antes era por DLookup fiz para tentar melhorar a desempenho e realmente melhorou, agora o que quero saber é:
    Quando as variáveis são carregadas o valor fica fixo?
    Ele só será atualizado na próxima abertura do form ou cada saída do campo "DataExecucao" que é o validado pelo código?

    Muito obrigado e por favor as melhorias no código são bem-vindas.

    Private Sub DataExecucao_Exit(Cancel As Integer)
    On Error Resume Next
    '=================================
    'Variáveis
    Dim intAno As Integer 'Ano atual
    Dim strMes As Integer 'Mês atual
    Dim strAtual As Date 'Data atual
    Dim strMesExec As Integer 'Mês da data de execução do serviço
    Dim strAnoAS As Integer

    intAno = Year(Now()) 'Ano atual
    strMes = Month(Now()) 'Mês atual
    strMesExec = Month(Me!DataExecucao) 'Mês da data de execução do serviço
    strAtual = Format(Now, "dd/mm/yyyy") 'Data atual
    strAnoAS = Year(Me!DataExecucao.Value)

    Dim db As DAO.Database, db2 As DAO.Database
    Dim rs As DAO.Recordset, rs2 As DAO.Recordset
    Dim strSQL As String, strSQL2 As String
    strSQL = "SELECT * FROM TabPeriodos WHERE MesCorrente = " & strMes
    strSQL2 = "SELECT * FROM TabPeriodos WHERE MesCorrente = " & strMesExec
    Set db = CurrentDb()
    Set rs = db.OpenRecordset(strSQL)
    Set db2 = CurrentDb()
    Set rs2 = db.OpenRecordset(strSQL2)

    Dim strComecoMes As Date 'Primeiro dia de lançamento desse mês *
    Dim strFimMes As Date 'Último dia de lanaçmento desse mês *
    Dim strTotalDias As Integer 'Total de dias para para o serviço em lançamento *
    Dim strInicioAS As Date 'Data de início do lançamento atual *
    Dim strFimAS As Date 'Data fim do lançamento atual *
    Dim strAnoAtual As Integer '*

    strComecoMes = rs("ComecoMes") 'Primeiro dia de lançamento desse mês
    strFimMes = rs("FimMes") 'Último dia de lanaçmento desse mês
    strTotalDias = rs2("TotalDias") 'Total de dias para o serviço em lançamento
    strInicioAS = rs2("ComecoMes") 'Data de início do lançamento atual
    strFimAS = rs2("FimMes") 'Data fim do lançamento atual
    strAnoAtual = rs2("AnoAtual") 'Ano atual

    If IsNull(Me!DataExecucao) Then
    DoCmd.Beep
    MsgBox ("É obrigatório lançar a data de execução!" & vbCrLf & "Você não poderá ir para o próximo campo antes de lançar uma data válida."), vbCritical + vbInformation
    DoCmd.CancelEvent
    Else
    If IsNull(Me!DataExecucao) Then
    DoCmd.Beep
    MsgBox ("É obrigatório lançar a data de execução!" & vbCrLf & "Você não poderá ir para o próximo campo antes de lançar uma data válida."), vbCritical + vbInformation
    DoCmd.CancelEvent
    Else
    If strAtual < strInicioAS Then
    DoCmd.Beep
    MsgBox ("Data de lançamento referente ao próximo mês!" & vbCrLf & "Verifique a data por favor."), vbCritical, "Período não iniciado"
    DoCmd.CancelEvent
    Else
    If strAtual > strFimAS Then
    DoCmd.Beep
    MsgBox ("Prazo expirado para lançamento!" & vbCrLf & "Comunique a coordenação" & vbCrLf & "Redate os documentos por favor."), vbCritical, "Prazo expirado"
    DoCmd.CancelEvent
    Else
    If strAnoAS <> strAnoAtual Then
    DoCmd.Beep
    MsgBox "Ano inválido", vbCritical
    DoCmd.CancelEvent
    Else
    If Me!DataExecucao > strAtual Then
    If MsgBox("Você lançou uma data maior que a atual, é um redatamento?", vbYesNo + vbQuestion, "Data maior") = vbNo Then
    DoCmd.Beep
    DoCmd.CancelEvent
    End If
    End If
    End If
    End If
    End If
    End If
    End If

    rs.Close
    Set rs = Nothing
    db.Close
    Set db = Nothing
    rs2.Close
    Set rs2 = Nothing
    db2.Close
    Set db2 = Nothing
    End Sub

    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    [Resolvido]Recordset - Entendendo Empty Re: [Resolvido]Recordset - Entendendo

    Mensagem  Alexandre Neves 22/2/2013, 16:02

    Boa noite, Leandro
    O código colocado no acontecimento AoSair é executado sempre que saia do controlo, ele é executado.
    Assim, as variáveis são carregadas quando é disparado o acontecimento.
    Abraço amigo,


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    Leandro
    Leandro
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1601
    Registrado : 12/11/2009

    [Resolvido]Recordset - Entendendo Empty Re: [Resolvido]Recordset - Entendendo

    Mensagem  Leandro 22/2/2013, 17:24

    Obrigado caro Alexandre, tenho mais uma pergunta. O modo que montei o recordset esta certo? Uso um micro com 8gb de RAM bem rápido, mesmo assim notei melhora na execução do código, estou certo? É melhor via recordset? Muito obrigado

    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    [Resolvido]Recordset - Entendendo Empty Re: [Resolvido]Recordset - Entendendo

    Mensagem  Alexandre Neves 22/2/2013, 17:29

    A variável db e db2 são carregadas com o mesmo objecto. Bastava uma variável.
    Eu costumo criar apenas variável de recordset e não criar de database
    Ex:
    Dim rs As DAO.Recordset, rs2 As DAO.Recordset
    Dim strSQL As String, strSQL2 As String
    strSQL = "SELECT * FROM TabPeriodos WHERE MesCorrente = " & strMes
    strSQL2 = "SELECT * FROM TabPeriodos WHERE MesCorrente = " & strMesExec
    Set rs = CurrentDb.OpenRecordset(strSQL)
    Set rs2 = CurrentDb.OpenRecordset(strSQL2)


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    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]Recordset - Entendendo Empty Re: [Resolvido]Recordset - Entendendo

    Mensagem  criquio 22/2/2013, 19:10

    Já eu, para diminuir ao máximo o número de linhas de código, costumo, alem de declarar apenas os Recordsets, passar ele direto sem uso de strings:

    Código:
    Dim rs As DAO.Recordset, rs2 As DAO.Recordset

    Set rs = CurrentDb.OpenRecordset("SELECT * FROM TabPeriodos WHERE MesCorrente = " & strMes & ")
    Set rs2 = CurrentDb.OpenRecordset("SELECT * FROM TabPeriodos WHERE MesCorrente = " & strMesExec & ")
    Nada a ver com ser mais certo ou errado, apenas questões de preferências Very Happy


    .................................................................................
    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.

    Leandro
    Leandro
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1601
    Registrado : 12/11/2009

    [Resolvido]Recordset - Entendendo Empty Re: [Resolvido]Recordset - Entendendo

    Mensagem  Leandro 22/2/2013, 19:47

    Alexandre e Críquio, muito obrigado, estou aprendendo muito, continuo:

    Alexandre, tem duas variáveis com o mesmo objeto mas o critério do SQL é diferente, mas entendi o que disse essa parte do "db" pode ser uma só, vou alterar.
    Como é essa parte do "Eu costumo criar apenas variável de recordset e não criar de database"?

    Críquio, também vou alterar como indicou.

    Nossa aprendi muito hoje, muito obrigado aos dois.

    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    [Resolvido]Recordset - Entendendo Empty Re: [Resolvido]Recordset - Entendendo

    Mensagem  Alexandre Neves 23/2/2013, 15:47

    Boa noite, Leandro
    Quis dizer que apenas declaro o recordset e expressão directa, como referiu o Criquio
    Apenas declaro string de origem do recordset quando essa origem é comum a outro objecto, por exemplo, relatório.
    Abraços,


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    Leandro
    Leandro
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1601
    Registrado : 12/11/2009

    [Resolvido]Recordset - Entendendo Empty Re: [Resolvido]Recordset - Entendendo

    Mensagem  Leandro 23/2/2013, 16:17

    Boa noite Alexandre, entendi o que escreveu, muito obrigado, ainda tenho uma caminho a percorrer com esse assunto, e ainda bem que tenho vossas preciosas ajudas.
    Encerro aqui.


    Conteúdo patrocinado


    [Resolvido]Recordset - Entendendo Empty Re: [Resolvido]Recordset - Entendendo

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 10/5/2024, 09:51