Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Célido

Trigger de Inserçao

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.