AGENDA DE TAREFAS COM [Ô]ALARME[Ô]
Prezados, bom dia.
Estou desenvolvendo uma agenda de tarefas (simples) onde tenho os seguintes campos:
- Descrição da tarefa
- Status (Ex.: Cancelada, ConcluÃda, Em andamento, Não Iniciada, Aguardando..)
- Prioridade - (Ex.: Alta, Normal, Baixa)
- AtribuÃda a: - Ex.: (Departamento Engenharia, etc...)
- Observações
- Data (Ex.: 06/11/2014)
- Hora (Ex.: 17:00)
PS: é bem simples, porém tenho que adaptá-lo em meu sistema.
Dados do sistema.:
- Visual Basic 6
- DAO
- Banco de Dados Access
------------------------------
Agora vem a parte que está dificultando:
- Quero que o sistema alerte quando chegar na data e no horário...e tenha condições de prorrogar a hora e/ou data...
Já visualizei alguns exemplos, porém não consegui colocar em prática.
Agradeço a ajuda e colaboração.
Marcelo Zapia
Estou desenvolvendo uma agenda de tarefas (simples) onde tenho os seguintes campos:
- Descrição da tarefa
- Status (Ex.: Cancelada, ConcluÃda, Em andamento, Não Iniciada, Aguardando..)
- Prioridade - (Ex.: Alta, Normal, Baixa)
- AtribuÃda a: - Ex.: (Departamento Engenharia, etc...)
- Observações
- Data (Ex.: 06/11/2014)
- Hora (Ex.: 17:00)
PS: é bem simples, porém tenho que adaptá-lo em meu sistema.
Dados do sistema.:
- Visual Basic 6
- DAO
- Banco de Dados Access
------------------------------
Agora vem a parte que está dificultando:
- Quero que o sistema alerte quando chegar na data e no horário...e tenha condições de prorrogar a hora e/ou data...
Já visualizei alguns exemplos, porém não consegui colocar em prática.
Agradeço a ajuda e colaboração.
Marcelo Zapia
Amigo,
Pelo que entendi você deseja alertas de data e horário para lembrar que a tarefa precisa ser realizada (ou ao menos postergada).
Se for isto, uma solução mais simplista seria colocar um timer no seu formulário, dentro do timer selecione (select) os registros que tenham a data e horário iguais ou menores que a data e horário atuais e mostre uma grade (DBGrid, Flexgrid, etc), permitindo ao usuário modificar o status ou modificar a data e horário para postergar o compromisso para outra data/horário.
Sua dificuldade, pelo que entendi, não é com código, seria mais com a lógica do proceder.
Tudo de bom.
Pelo que entendi você deseja alertas de data e horário para lembrar que a tarefa precisa ser realizada (ou ao menos postergada).
Se for isto, uma solução mais simplista seria colocar um timer no seu formulário, dentro do timer selecione (select) os registros que tenham a data e horário iguais ou menores que a data e horário atuais e mostre uma grade (DBGrid, Flexgrid, etc), permitindo ao usuário modificar o status ou modificar a data e horário para postergar o compromisso para outra data/horário.
Sua dificuldade, pelo que entendi, não é com código, seria mais com a lógica do proceder.
Tudo de bom.
Prezado Euzébio,
Sim...realmente está no procedimento da lógica...
Tentarei a sua solução...vamos ver no que vai dar?
Agradeço a colaboração.
PS: Não Encerrarei o tópico antes de testar as soluções apresentadas.
Sim...realmente está no procedimento da lógica...
Tentarei a sua solução...vamos ver no que vai dar?
Agradeço a colaboração.
PS: Não Encerrarei o tópico antes de testar as soluções apresentadas.
Amigo,
Como o timer do VB tem limite de 1 minuto e não convém ficar a cada 1 minuto fazendo a verificação, você poderá usar API ou criar uma variável global que a cada minuto que passar no timer soma + 1. Se o timer estiver para 1 minuto, depois de 60 passadas, vai estar com 60 na variável, ou seja, passou 60 vezes de 1 minuto, que equivale a 1 hora.
Dai, dentro do próprio timer, verifique se a variável chegou a 60 (caso queira fazer a cada hora) e se chegou a 60, coloque 0 (zero) na variável para recomeçar o timer e faça o select (ou uma tela ou relatório) que mostre os compromissos do usuário logado.
Quando ainda usava VB6 eu fiz assim, porque tive receio de usar API com windows muito novos ou muito antigos.
Funcionou (e funciona) muito bem até hoje.
Tudo de bom.
Como o timer do VB tem limite de 1 minuto e não convém ficar a cada 1 minuto fazendo a verificação, você poderá usar API ou criar uma variável global que a cada minuto que passar no timer soma + 1. Se o timer estiver para 1 minuto, depois de 60 passadas, vai estar com 60 na variável, ou seja, passou 60 vezes de 1 minuto, que equivale a 1 hora.
Dai, dentro do próprio timer, verifique se a variável chegou a 60 (caso queira fazer a cada hora) e se chegou a 60, coloque 0 (zero) na variável para recomeçar o timer e faça o select (ou uma tela ou relatório) que mostre os compromissos do usuário logado.
Quando ainda usava VB6 eu fiz assim, porque tive receio de usar API com windows muito novos ou muito antigos.
Funcionou (e funciona) muito bem até hoje.
Tudo de bom.
Continuando, dentro do timer seria algo assim...
[ô]Se ainda não chegou o tempo de dar avisos, deverá sair da sub
If intMinutosTranscorridos < intAvisarMinutos Then
Exit Sub
End If
[ô]Por enquanto se desabilita o timer, para enquanto o select for feito, não ficar contando minutos
Me.Timer1.Enabled = False
[ô]Já chegou o tempo de dar avisos, então deverá zerar o contador de minutos
intMinutosTranscorridos = 0
[ô]Pegar todos os compromissos do usuário que estejam PENDENTES e a data tenha sido alcançada
Set Registros05 = Conect_PG_SQL_Local.Execute([Ô]select * from zxagenda where (codemp=[Ô] & CodigoEmpresa & [Ô]) and (identregcompromissado=[ô][Ô] & IdentRegDoUsuarioQueFezLogin & [Ô][ô]) and (status=[ô]PENDENTE[ô])
[ô]Habilitar o timer para continuar verificando pendências
Me.Timer1.Enabled = False
Basicamente este seria o código dentro do timer.
[ô]Se ainda não chegou o tempo de dar avisos, deverá sair da sub
If intMinutosTranscorridos < intAvisarMinutos Then
Exit Sub
End If
[ô]Por enquanto se desabilita o timer, para enquanto o select for feito, não ficar contando minutos
Me.Timer1.Enabled = False
[ô]Já chegou o tempo de dar avisos, então deverá zerar o contador de minutos
intMinutosTranscorridos = 0
[ô]Pegar todos os compromissos do usuário que estejam PENDENTES e a data tenha sido alcançada
Set Registros05 = Conect_PG_SQL_Local.Execute([Ô]select * from zxagenda where (codemp=[Ô] & CodigoEmpresa & [Ô]) and (identregcompromissado=[ô][Ô] & IdentRegDoUsuarioQueFezLogin & [Ô][ô]) and (status=[ô]PENDENTE[ô])
[ô]Habilitar o timer para continuar verificando pendências
Me.Timer1.Enabled = False
Basicamente este seria o código dentro do timer.
Colega antes de mais nada, começar com DAO é o mesmo que usar lampada de querosene, é andar pra trás, faz um esforcinho e crie em ADO.não vejo necessidade de timer, se você comparar a data atual coma do banco assim que abre o sistema ja creio que seja suficiente.
Euzébio,
A sua Ideia inicial já elucidou aqui...
Olha como fiz...(ainda falta dar uma lapidada)...
[ô]----------------------
Dim banco as database
Dim tabela as recordset
Dim sql as String
sql=[Ô]Select * From tbAgenda[Ô]
sql=sql & [Ô] WHERE Data<=[Ô] & [Ô]#[Ô] & Format(Date,[Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô]
sql=sql & [Ô] AND Hora<=[Ô] & [Ô]#[Ô] & Time & [Ô]#[Ô] &
sql=sql & [Ô] Concluido=False[Ô]
Set banco=opendatabase(CaminhoBD)
set tabela=banco(sql, dbOpenDynaset)
IF tabela.Eof=False then
msgbox tabela!ID & [Ô] - [Ô] & tabela!Compromisso [ô]Apenas para teste
IF MsgBox([Ô]Concluir tarefa?[Ô],vbYesNo + vbQuestion)=VbYes Then
With tabela
.Edit
!Concluido=True
.UpDate
End With
End IF
End IF
[ô]----------------------
Estou verificando algumas adaptações que com certeza terei de fazer...como por exemplo:
- Gerar uma listagem das tarefas pendentes
- Dar condições ao usuário de prorrogar as tarefas caso necessário
- Alterar seu status na hora em que aparecer o form...
Etc...
Vamos ver no que vai dar....por enquanto está fluindo...
Mais uma vez agradeço o help...
A sua Ideia inicial já elucidou aqui...
Olha como fiz...(ainda falta dar uma lapidada)...
[ô]----------------------
Dim banco as database
Dim tabela as recordset
Dim sql as String
sql=[Ô]Select * From tbAgenda[Ô]
sql=sql & [Ô] WHERE Data<=[Ô] & [Ô]#[Ô] & Format(Date,[Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô]
sql=sql & [Ô] AND Hora<=[Ô] & [Ô]#[Ô] & Time & [Ô]#[Ô] &
sql=sql & [Ô] Concluido=False[Ô]
Set banco=opendatabase(CaminhoBD)
set tabela=banco(sql, dbOpenDynaset)
IF tabela.Eof=False then
msgbox tabela!ID & [Ô] - [Ô] & tabela!Compromisso [ô]Apenas para teste
IF MsgBox([Ô]Concluir tarefa?[Ô],vbYesNo + vbQuestion)=VbYes Then
With tabela
.Edit
!Concluido=True
.UpDate
End With
End IF
End IF
[ô]----------------------
Estou verificando algumas adaptações que com certeza terei de fazer...como por exemplo:
- Gerar uma listagem das tarefas pendentes
- Dar condições ao usuário de prorrogar as tarefas caso necessário
- Alterar seu status na hora em que aparecer o form...
Etc...
Vamos ver no que vai dar....por enquanto está fluindo...
Mais uma vez agradeço o help...
Citação::
Colega antes de mais nada, começar com DAO é o mesmo que usar lampada de querosene, é andar pra trás, faz um esforcinho e crie em ADO.não vejo necessidade de timer, se você comparar a data atual coma do banco assim que abre o sistema ja creio que seja suficiente.
Marcelo,
Agradeço seu auxÃlio...
Ainda tenho vÃcios de [Ô]DAO[Ô]...estou migrando do VB6 para VBNET e ADO...mas ainda não tenho domÃnio....
Como o sistema foi feito em DAO...estou apenas atualizando o mesmo...
A intenção é migrar sim para .NET e ADO...com certeza...
Oi Marcelo,
Primeiramente, agradeço em nome do nosso colega por postar sua mensagem e gastar seu tempo.
Mas nosso colega vai mesmo precisar de um timer.
Imagine que o sistema seja aberto as 08:00 da manhã, com compromissos para avisar 1 hora antes do inÃcio.
Se mostrar quando abre o sistema, parou ali. Mostrou as 08:00 da manhã e mais nada.
Com o monitoramento dos horários, que é o caso do nosso colega, mesmo com sistema aberto, os compromissos das 16:00 seriam avisados as 15:00, por exemplo.
Tudo de bom.
Primeiramente, agradeço em nome do nosso colega por postar sua mensagem e gastar seu tempo.
Mas nosso colega vai mesmo precisar de um timer.
Imagine que o sistema seja aberto as 08:00 da manhã, com compromissos para avisar 1 hora antes do inÃcio.
Se mostrar quando abre o sistema, parou ali. Mostrou as 08:00 da manhã e mais nada.
Com o monitoramento dos horários, que é o caso do nosso colega, mesmo com sistema aberto, os compromissos das 16:00 seriam avisados as 15:00, por exemplo.
Tudo de bom.
Prezados,
O Euzébio elucidou a lógica para que eu pudesse seguir no desenvolvimento deste módulo.
Deu certo...fiz um módulo simples e já está em fase de teste.
Agradeço a colaboração neste tópico.
Atenciosamente,
Marcelo Zapia
O Euzébio elucidou a lógica para que eu pudesse seguir no desenvolvimento deste módulo.
Deu certo...fiz um módulo simples e já está em fase de teste.
Agradeço a colaboração neste tópico.
Atenciosamente,
Marcelo Zapia
Tópico encerrado , respostas não são mais permitidas