Luiz Fernando Posted September 7, 2015 Report Share Posted September 7, 2015 Sera que alguém teria um exemplo de como criar triggers dentro do sistema. usando um editor de banco de dados(SQLyog) o código ficou assim, DELIMITER $$ USE empresoft $$ DROP TRIGGER tr_etiqueta_g $$ CREATE TRIGGER tr_etiqueta_g AFTER INSERT ON altepre FOR EACH ROW BEGIN INSERT INTO etique_gandola ( produto,preco,conferido ) VALUES ( new.codigo, new.vlratu, "N" ) ; END; $$ DELIMITER ; o código acima funciona certinho sem problema, mais não tenho como ficar editando todos banco de dados de meus cliente para fazer isto manual, tentei criar dentro do sistema da forma abaixo, mais não da certo function tr_etiqueta_g() cSql='DELIMITER $$' cSql+='' cSql+='USE empresoft $$' cSql+='' cSql+='DROP TRIGGER tr_etiqueta_g $$' cSql+='' cSql+='CREATE' cSql+=' TRIGGER tr_etiqueta_g' cSql+=' AFTER' cSql+=' INSERT' cSql+=' ON altepre' cSql+=' FOR EACH ROW BEGIN' cSql+=' INSERT INTO etique_gandola ( produto,preco,conferido )' cSql+=' VALUES ( new.codigo, new.vlratu, "N" ) ;' cSql+=' END;' cSql+='$$' cSql+='' cSql+=' DELIMITER ;' SqlExecute(cSql) return .t. Obrigado Quote Link to comment Share on other sites More sharing options...
evandro Posted September 8, 2015 Report Share Posted September 8, 2015 Olá, Faça uma rotina que verifique a existência. Caso não exista, crie. aSql := SqlArray( 'SHOW TRIGGERS FROM empresoft ' ) for i := 1 to len( aTriggers ) nAchou:=AAscan( aSql, lower(aTriggers[i]) ) if nAchou=0 if !CriaTrigger( aTriggers[i] ) MsgAlert( 'problema', 'Problema' ) endif endif next return nil static function CriaTrigger( cTrigger ) if cTrigger='tr_etiqueta_g' cSql:='USE empresoft;' cSql+='' cSql+='DROP TRIGGER tr_etiqueta_g;' cSql+='' cSql+='CREATE' cSql+=' TRIGGER tr_etiqueta_g' cSql+=' AFTER' cSql+=' INSERT' cSql+=' ON altepre' cSql+=' FOR EACH ROW BEGIN' cSql+=' INSERT INTO etique_gandola ( produto,preco,conferido )' cSql+=' VALUES ( new.codigo, new.vlratu, "N" ) ;' cSql+=' END;' cSql+='' SqlExecute(cSql) endif return .t. Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted September 8, 2015 Author Report Share Posted September 8, 2015 Evandro não cria a triggers de forma alguma, de primeiro momento só estou fazendo a chamada para criar a triggers no inicio do programa faço a chamada tr_etiqueta_g() sem fazer nenhuma comparação, se eu copiar da forma que esta abaixo e colar num editor de sql, dai funciona certinho. function tr_etiqueta_g() cSql:='USE empresoft;' cSql+='' cSql+='DROP TRIGGER tr_etiqueta_g;' cSql+='' cSql+='CREATE' cSql+=' TRIGGER tr_etiqueta_g' cSql+=' AFTER' cSql+=' INSERT' cSql+=' ON altepre' cSql+=' FOR EACH ROW BEGIN' cSql+=' INSERT INTO etique_gandola ( produto,preco,conferido )' cSql+=' VALUES ( new.codigo, new.vlratu, "N" ) ;' cSql+=' END;' cSql+='' SqlExecute(cSql) return .t. Obs: sobre a logica acima , eu entendi certinho, de criar um array com todos triggers usado no sistema e depois com show TRIGGERS, comparar as duas array, vou utilizar sua ideia aqui Obrigado Luiz Fernando Quote Link to comment Share on other sites More sharing options...
evandro Posted September 9, 2015 Report Share Posted September 9, 2015 Olá, Tente assim: function tr_etiqueta_g() cSql:='USE empresoft;' SqlExecute(cSql) cSql:='DROP TRIGGER tr_etiqueta_g;' SqlExecute(cSql) cSql:='CREATE' cSql+=' TRIGGER tr_etiqueta_g' cSql+=' AFTER' cSql+=' INSERT' cSql+=' ON altepre' cSql+=' FOR EACH ROW BEGIN' cSql+=' INSERT INTO etique_gandola ( produto,preco,conferido )' cSql+=' VALUES ( new.codigo, new.vlratu, "N" ) ;' cSql+=' END;' cSql+='' SqlExecute(cSql) return .t. Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted September 9, 2015 Author Report Share Posted September 9, 2015 Evandro realmente não cria, agora só uma observação, da sua forma acima mesmo colando no editor não da certo, se eu salvar uma script dentro do editor fica exatamente igual abaixo se eu tirar estes $$ da erro, peguei a script gerado no arquivo e copiei igualzinha para dentro do prg e nada. DELIMITER $$ USE empresoft $$ DROP TRIGGER teste1 $$ CREATE TRIGGER teste1 AFTER INSERT ON produto FOR EACH ROW BEGIN END; $$ DELIMITER ; aqui uso a versão do mysql 5.1.42 Obrigado Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted September 9, 2015 Author Report Share Posted September 9, 2015 Mais um detalhe se eu usar o editor de query do SQLyog e colar o código acima tb não certo, só da certo se eu for na opção do triggers mandar criar uma nova ou editar um que já existe, sendo assim ta explicado pq não da certo com o fivewin usando o SqlExecute. Quote Link to comment Share on other sites More sharing options...
evandro Posted September 9, 2015 Report Share Posted September 9, 2015 Olá, Interessante que do jeito que postei gerou normalmente. Só mudei o BD, a tabela e os campos. Não retorna erro? Quote Link to comment Share on other sites More sharing options...
kapiaba Posted September 9, 2015 Report Share Posted September 9, 2015 http://wiki.locaweb.com/pt-br/Exemplo_de_como_criar_uma_trigger_no_Mysql Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted September 9, 2015 Author Report Share Posted September 9, 2015 Olá, Interessante que do jeito que postei gerou normalmente. Só mudei o BD, a tabela e os campos. Não retorna erro? Maravilha Evandro se gerou com sucesso com vc, é questão de detalhe aqui então, vou analisar com calma aqui , e depois retorno ao tópico, muito obrigado pela atenção. Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted September 9, 2015 Author Report Share Posted September 9, 2015 http://wiki.locaweb.com/pt-br/Exemplo_de_como_criar_uma_trigger_no_Mysql Vlw Kapiaba, qdo a sintaxe de como usar já conseguir pegar o jeito mais ou menos, o problema mesmo é mandar instrução de dentro do programa para criação da mesma, sem ter que usa rum editor de banco de dados para isto, mais como deu certo com o Evandro vou mexer com calma aqui, depois retorno ao tópico. Obrigado Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted September 16, 2015 Author Report Share Posted September 16, 2015 Colegas agora consegui, o problema estava na seguinte situação, minha versão do mysql não aceita duas triggers disparada para a mesma tabela do banco de dados, tipo nos teste aqui eu só mudava o nome da triggers mais o ON <tabela> deixava o mesmo, como já existia uma triggers la criada manual dava o erro, agora ta rodando certinho. Abraços Luiz Fernando Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.