CRIAR EVENTO!

MESTRE 05/10/2015 16:08:22
#452174
Fala galera beleza? é o seguinte estou com um abacaxi nas mãos e não sei como resolver até porque nunca fiz isso.. utilizamos o MySql 5.1 aqui na empresa

Eu Preciso criar um EVENT que rode todo dia (every day) as 00:00:01 ( meia noite, 0 minutos, 1 segundo)..

Este evento deve dar um :

SELECT CURDATE();


após isso dar um While e rodar todos meus registros numa tabela que atendam o STATUS = [Ô]APROVADO[Ô] na tabela chamada: [Ô]instrumentos[Ô] no campo [Ô]dt_validade[Ô]

Caso o dt_validade < Valor do CURDATE() ele deve dar um UPDATE na propria tabela [Ô]instrumentos[Ô] no campo [Ô]status[Ô] = [Ô]VENCIDO[Ô]

isso precisa ser feito de forma automática, ai pesquisei que no Oracle existe os [Ô]Jobs[Ô] ai o equivalente no MySql é o EVENT, porém nunca utilizei e nem sei como faz pra fazer.. ou seria melhor eu criar um Console App pra rodar no servidor e fazer esse trampo pra mim?? atualmente eu faço via aplicação mesmo no próprio sistema porém isso ta um gato que não te me deixando durmir de noite kkk sem contar que o turno da empresa é 24 horas..
VINNIFERRAZ 05/10/2015 20:59:06
#452183
Mestre, porque não ultiliza a classe System.Timers.Timer

é mais ou menos isso aqui creio eu, converta pra vb

private static System.Timers.Timer _tempoconsulta;

crie um void ou no construtor da classe
private void settimer
{

_tempoconsulta = new System.Timers.Timer();
_tempoconsulta.Interval = 1800000; // aqui vc define o intervalo em ms ( conte até a hora exata que vc quer que inicie )
_tempoconsulta.Elapsed += OnTimedEvent;
_tempoconsulta.Enabled = true;
}

private static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
{
// aqui vc faz o que quiser fazer

}
também da pra utilizar um objeto timer, porém tenha em mente que consumira mais recursos do seu computador, ja que um timer estará sempre trabalhando e só ocorrera o evento x na hora que foi programado
se vc ja estiver fazendo assim, não vejo gatilho algum. pelo contrário é uma otima forma de programar
MESTRE 06/10/2015 08:57:28
#452195
Atualmente faço com Timer assim porém eu chamo o timer na abertura do sistema, porém se não abrir o sistema vai ficar informação incorreta na base de dados..

por isso a idéia seria fazer direto via banco atráves de Events ou criar um Console app pra rodar no servidor e executar isso diariamente.. acho que o mais correto seria
via Events mesmo..
NICKOSOFT 06/10/2015 09:56:01
#452200
me deparei com algo q pode lhe ajudar
http://imasters.com.br/artigo/257/sql-server/criando-e-executando-jobs-no-sql-server



MESTRE 06/10/2015 10:12:04
#452201
Na verdade estou utilizando MySql.. que são Events

porém estou com um problema de scheduler=DISABLED; então criei um Event pra teste só que ta DISABLED e não funciona..

e não tenho acesso a database..
NICKOSOFT 06/10/2015 10:19:24
#452202
sheduler disable matou agora.....
dessa forma de dentro do banco então não vejo como funcionar....
a outra possibilidade seria a q vc já citou de manter algo rodando na maquina, e agendado por esse programa essa execução de fora....
MESTRE 06/10/2015 10:48:31
#452203
Citação:

:
sheduler disable matou agora.....
dessa forma de dentro do banco então não vejo como funcionar....
a outra possibilidade seria a q vc já citou de manter algo rodando na maquina, e agendado por esse programa essa execução de fora....



Vou ter que dar a volta ao mundo pra resolver um negócio que com poucas linhas eu resolveria via Banco ..

Esperando o pessoal da infra habilitar o sheduler pra mim
DS2T 06/10/2015 19:23:54
#452239
Job realmente é uma opção viável. Outra forma que eu faria, era criando uma aplicação do tipo Serviço. é só habilitar o serviço para rodar quando o computador iniciar.
MESTRE 07/10/2015 20:26:07
#452283
Bom galera finalmente, após derrubar o banco de dados da empresa inteira por 40 minutos.. eu e o cara da Infra descobrimos o porque
o Event_Scheduler não estava iniciando nem a pal.. depois de 20 minutos de apagão paramos pra perceber que o banco de dados
MySql estava sendo executado em modo segurança.. com isso dava um --skip-grant-tables e um erro 1045 de login...

- Logamos sem senha (em modo segurança)
- Trocamos a senha de todos os User[ô]s Mysql
- Reiniciamos o MySql.
- Reiniciamos o Zentyal.

dei um
  select @@event_scheduler 

Me retornou ON

Ja testei com alguns Events ou Jobs simples porém fazer esse Event será meio tenso eu acho.. rsrsrs por ser a primeira vez que tenho contato com isso hehe..
NICKOSOFT 08/10/2015 07:09:35
#452284
antes 40min e conseguir ativar do q passar o resto da vida contornando com remendos.....
já trabalhei em lugares q o remendo era a alma do negocio, aqueles códigos repetidos em clipper, faz desfaz, refaz, contra desfaz tudo na mesma rotina.....
MESTRE 08/10/2015 09:34:31
#452295
Citação:

:
antes 40min e conseguir ativar do q passar o resto da vida contornando com remendos.....
já trabalhei em lugares q o remendo era a alma do negocio, aqueles códigos repetidos em clipper, faz desfaz, refaz, contra desfaz tudo na mesma rotina.....



Iria ter maior trabalho para fazer esses gato, melhor solução..

Agora minha dúvida é:

Criar um EVENT que da um While em todos os dt_validade e compara com a data do servidor e troca o status, ou criar um event que da um call numa stored procedure
que faz o mesmo.. porém nos 2 cenários tenho dúvidas em qual seja o melhor ou mais correto Stored procedure ou num Event?? e como
depois leio eu dou um [Ô]DECLARE mysql_dt_validade DATETIME[Ô] ? e depois dentro do while igualo ao campo na tabela mysql_dt_validade = tabela.data_validade?
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas