Célido 0 Denunciar post Postado Agosto 12, 2014 Fala Galera, Bom Dia / Noite Estou tentando desenvolver um sistema de parcelas, disparado por uma trigguer. mas esta dando varios erros. segue a trigger: USE `u575681646_memb`; DELIMITER $$ CREATE DEFINER=`root`@`localhost` TRIGGER xxx AFTER INSERT ON contaspagar FOR EACH ROW begin Declare x int; Declare Parcelas int; set x = 0; set Parcelas = "SELECT MAX(IdPag), Parcelas From contaspagar ORDER BY IdPag DESC LIMIT 1"; while x <=Parcelas DO Insert into baixas1 (IdPag,Emissao,Fornecedor,Descricao,CentroCustos,VlrPag,Parcelas,ContaRec,TipoAtiv) Values (new.IdPag,new.Emissao,new.Fornecedor,new.Descricao,new.CentroCustos,new.VlrPag,new.Parcelas,new.ContaRec,new.TipoAtiv); set x=x+1; end while; end esta ocorrendo : Failed to execute SQL. Error: Incorrect integer value: 'SELECT MAX(IdPag), Parcelas From contaspagar ORDER BY IdPag DESC LIMIT 1' for column 'Parcelas' at row 1 o Campo Parcelas é INT, bem como o IdPag é INT, auto incremendo. Alguem teria uma idéia de como desenrolar a bagaça? a Ideia : O Usuario Preenche o Valor e o Numero de Parcelas. Ao INSERIR na Tabela Contas a Pagar ele Atualiza o Parcelamento e as baixas. os registros de acordo com as parcelas. EM PHP ja fiz, atrave s de codigo. mas eu queria usar TRIGGER. pois o sistema sera desenvolvido em todas as linguagens ASP ASP NET PHP ETC......; o BD é MYSQL...... Valeu!!!!!!!!!! Célido Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 12, 2014 set Parcelas = "SELECT MAX(IdPag) From contaspagar ORDER BY IdPag DESC LIMIT 1";while x <=Parcelas DO Acho que é este parcelas .... Compartilhar este post Link para o post Compartilhar em outros sites
Célido 0 Denunciar post Postado Agosto 12, 2014 bro.... Não é nao. retirei o Parcelas e ainda ta dando erro; Failed to execute SQL. Error: Incorrect integer value: 'SELECT MAX(IdPag) From contaspagar ORDER BY IdPag DESC LIMIT 1' for column 'Parcelas' at row 1 no php e asp.net via codigo funciona certinho. agora no trigger nem a pau juvenal. USE `u575681646_memb`; DELIMITER $$ CREATE DEFINER=`root`@`localhost` TRIGGER xxx AFTER INSERT ON contaspagar FOR EACH ROW begin Declare x int; Declare Parcelas int; set x = 0; set Parcelas = "SELECT MAX(IdPag) From contaspagar ORDER BY IdPag DESC LIMIT 1"; while x <=Parcelas DO Insert into baixas1 (IdPag,Emissao,Fornecedor,Descricao,CentroCustos,VlrPag,Parcelas,ContaRec,TipoAtiv) Values (new.IdPag,new.Emissao,new.Fornecedor,new.Descricao,new.CentroCustos,new.VlrPag,new.Parcelas,new.ContaRec,new.TipoAtiv); set x=x+1; end while; end codigo em php <?php $IdPag = ($_REQUEST['IdPag']); $result = mysqli_query($con,"SELECT * FROM contaspagar WHERE IdPag='$IdPag'"); //selecionando dados da tabela $IdPag = ($_REQUEST['IdPag']); $sql = "SELECT * FROM contaspagar where IdPag='$IdPag'"; $query = mysql_query($sql); while($sql = mysql_fetch_array($query)){ $IdPag = $sql["IdPag"]; $vencto = $sql["Emissao"]; $vtt = $sql["VlrPag"]; $nParcelas = $sql["Parcelas"]; $Fornecedor = $sql ['Fornecedor']; $Tipo = $sql ['CentroCustos']; $TipoAtiv = $sql ['TipoAtiv']; $ContaRec = $sql ['ContaRec']; //onde $nome é a variavel que rerpresenta a coluna "nome" nessa //mesma tabela. echo "$vtt"," - ","$Fornecedor"," -","$vencto"," - ", "$IdPag"; //exibindo o que foi achado na coluna "nome". } $vpp = $vtt/$nParcelas; //$vencto = strftime("Y-m-d",strtotime("+".$x." month")); for($x = 1; $x <= $nParcelas; $x++){ $vencto = date("Y-m-d",strtotime("+".$x." month")); if(mysql_query("INSERT INTO baixas (Docto,Parcela,Vencto,VlrPrc,Nome,TipoAtiv,Tipo,ContaDest) VALUES ('".$IdPag."','".$x."','".$vencto."','".$vpp."','".$Fornecedor."','".$TipoAtiv."','".$Tipo."','".$ContaRec."')")) { } else { die("Erro ao inserir a parcela ".$x.": ".mysql_error()); } }//for ?> se tiver alguma ideia, agradeço Célido se t Compartilhar este post Link para o post Compartilhar em outros sites
Célido 0 Denunciar post Postado Agosto 13, 2014 Galera, segue resolução, agradeço a todos que deram ideias e mostraram o caminho Entao temos 1 BD MYSQL e 2 Tabelas, sendo: Banco de Dados = u575681646_memb. (MYSQL) Tabela : Contas a Pagar Tabela : Baixas1 USE `u575681646_memb`; DELIMITER $$ CREATE DEFINER=`root`@`localhost` TRIGGER xxx AFTER INSERT ON contaspagar FOR EACH ROW begin Declare x int; set x = 1; set @PRC = (SELECT Parcelas From u575681646_memb.contaspagar ORDER BY IdPag DESC LIMIT 1); while x <=@PRC DO Insert into baixas1 (IdPag,Emissao,Fornecedor,Descricao,CentroCustos,VlrPag,Parcelas,ContaRec,TipoAtiv) Values (new.IdPag,new.Emissao,new.Fornecedor,new.Descricao,new.CentroCustos,new.VlrPag,new.Parcelas,new.ContaRec,new.TipoAtiv); set x=x+1; end while; end Quaisquer duvidas estou a disposição. Valeu Peace for all Célido Compartilhar este post Link para o post Compartilhar em outros sites
Célido 0 Denunciar post Postado Agosto 13, 2014 Apenas para melhorar a trigger, segue codigo. USE `u575681646_memb`; DELIMITER $$ CREATE DEFINER=`root`@`localhost` TRIGGER xxx AFTER INSERT ON contaspagar FOR EACH ROW begin Declare x int; set x = 1; set @Parcela = 1; set @VCT = (SELECT Emissao From u575681646_memb.contaspagar ORDER BY IdPag DESC LIMIT 1); set @PRC = (SELECT Parcelas From u575681646_memb.contaspagar ORDER BY IdPag DESC LIMIT 1); while x <=@PRC DO Insert into baixas1 (IdPag,Emissao,Fornecedor,Descricao,CentroCustos,VlrPag,Parcelas,ContaRec,TipoAtiv) Values (new.IdPag,@VCT,new.Fornecedor,new.Descricao,new.CentroCustos,new.VlrPag,@Parcela,new.ContaRec,new.TipoAtiv); set x=x+1; set @Parcela = @Parcela + 1; set @VCT = DATE_ADD(@VCT, INTERVAL 1 MONTH); end while; end Ficara no Formato Contrato Parcela Vencto xxx 1 2014-10-05 xxx 2 2014-11-05 dependendo o numero de parcelas. Valeu Célido Compartilhar este post Link para o post Compartilhar em outros sites