CRIAR EVENTO!
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 :
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..
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..
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
é 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
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..
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..
me deparei com algo q pode lhe ajudar
http://imasters.com.br/artigo/257/sql-server/criando-e-executando-jobs-no-sql-server
http://imasters.com.br/artigo/257/sql-server/criando-e-executando-jobs-no-sql-server
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..
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..
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....
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....
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
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.
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
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..
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..
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.....
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.....
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?
Tópico encerrado , respostas não são mais permitidas