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