AGENDA DE TAREFAS COM [Ô]ALARME[Ô]

PROVIDER 03/11/2014 10:55:45
#442256
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
SINCLAIR 03/11/2014 11:29:09
#442257
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.
PROVIDER 03/11/2014 12:50:15
#442258
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.
SINCLAIR 03/11/2014 13:52:51
#442260
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.
SINCLAIR 03/11/2014 13:55:04
#442261
Resposta escolhida
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.
MARCELO.TREZE 03/11/2014 14:40:49
#442263
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.




PROVIDER 03/11/2014 14:47:21
#442264
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...
PROVIDER 03/11/2014 14:50:12
#442265
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...
SINCLAIR 03/11/2014 17:29:46
#442274
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.
PROVIDER 04/11/2014 09:11:51
#442279
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
Tópico encerrado , respostas não são mais permitidas