Fórum Ajuda com Stored Procedure/Trigger #57608
09/01/2007
0
Como faço para gravar todos os dados de uma tabela, alterando apenas um campo em outra?
Exemplo, tenho uma tabela de Orçamento e Itens de Orçamento, gostaria que eu alterando um campo (Vendido=´S´), todos os dados, inclusive os itens fossem para a tabela de Vendas os campos são os mesmo, a única diferença é por conta dos campos TotalOrcamento e TotalPedido e nos items os campos CodigoOrcamento e CodigoVenda.
coloquei no forum de IB/FB pq eu gostaria que o BD se encarregasse de fazer isso.
Uso D7 com FB e ClientDataSet
Facc
Curtir tópico
+ 0Posts
10/01/2007
Sremulador
if (NEW.Vendido=´S´) THEN Gravaosdados ...
Gostei + 0
10/01/2007
Facc
if (NEW.Vendido=´S´) THEN Gravaosdados ...
então eu crio uma Trigger after update CadOrcamento
e vou ´jogando´ os dados dessa forma?
totaPedido := Total Orcamento
...
Seria isso?
Ou tem uma forma mais facil?
Gostei + 0
10/01/2007
Sremulador
quando você alterar a tabela o sistema vai verificar qual a situação, no caso de ser S então ele vai executar a segunda parte, aonde voc^?e tem que colocar o código para inserir na outra tabela os dados...
CREATE TRIGGER TSUATABELA FOR SUATABELA ACTIVE BEFORE INSERT POSITION 0 AS begin if (NEW.Vendido=´S´) THEN then begin insert na outra tabelas os dados end end
Gostei + 0
11/01/2007
Facc
essa é a trigger que grava o cabeçalho.
CREATE TRIGGER CADORCAMENTOPEDIDO_BU0 FOR CADORCAMENTO ACTIVE BEFORE UPDATE POSITION 0 AS begin if (New.BAIXADO = ´V´) then BEGIN insert into CADPEDIDO ( CodCli, DataEmissao, TotalPedido, TotalPecas, PorcDesc, VlrDesc, PorcAcre, VlrAcre ) Values ( Old.CODCLI, Old.DATAEMISSAO, Old.TOTALORCAMENTO, Old.TOTALPECAS, Old.PORCDESC, Old.VLRDESC, Old.PORCACRE, Old.VLRACRE); END end
Gostei + 0
12/01/2007
Facc
Gostei + 0
12/01/2007
Sremulador
if (New.BAIXADO = ´V´) then BEGIN insert into CADPEDIDO ( CodCli, DataEmissao, TotalPedido, TotalPecas, PorcDesc, VlrDesc, PorcAcre, VlrAcre ) Values ( Old.CODCLI, Old.DATAEMISSAO, Old.TOTALORCAMENTO, Old.TOTALPECAS, Old.PORCDESC, Old.VLRDESC, Old.PORCACRE, Old.VLRACRE); for tabelafilhatemporaria .... insert into tabelafilhadefinitiva valores da tabela tabelafilhatemporaria END
Gostei + 0
12/01/2007
Facc
Mas como eu faria esse [b:d8855b2d9e]For[/b:d8855b2d9e]?
Poderia me mandar um exemplo básico?
Gostei + 0
12/01/2007
Facc
esqueci de comentar... o Codigo do orçamento/pedido é autoincremento (pelo Generator)
Gostei + 0
15/01/2007
Facc
Gostei + 0
15/01/2007
Facc
Gostei + 0
15/01/2007
Emerson Nascimento
CREATE TRIGGER CADORCAMENTOPEDIDO_BU0 FOR CADORCAMENTO ACTIVE BEFORE UPDATE POSITION 0 AS [declare as variáveis em função dos campos que serão preenchidos] begin if (New.BAIXADO = ´V´) then begin -- pego o próximo ID para o pedido pedido = GEN_ID( SEU_GENERATOR, 1); -- **** insere o cabeçalho **** -- insert into CADPEDIDO ( idpedido, CodCli, DataEmissao, TotalPedido, TotalPecas, PorcDesc, VlrDesc, PorcAcre, VlrAcre ) Values ( :pedido, Old.CODCLI, Old.DATAEMISSAO, Old.TOTALORCAMENTO, Old.TOTALPECAS, Old.PORCDESC, Old.VLRDESC, Old.PORCACRE, Old.VLRACRE); -- **** insere os itens **** -- for select lista_de_campos from CADORCAMENTOITEM where IDOrcamento = OLD.IDOrcamento into lista_de_variaveis do insert into CADPEDIDOITEM (IDPedido, lista_de_campos) values (:Pedido, lista_de_variaveis) end end
se você publicasse a estrutura das tabelas envolvidas (ao menos os campos pertinentes) poderímos ajudar de forma mais precisa...
Gostei + 0
15/01/2007
Facc
Estrutura do CadOrcamento CODIGO INTEGER NOT NULL, CODCLI VARCHAR(10) NOT NULL, DATAEMISSAO DATE, TOTALORCAMENTO NUMERIC(15,2), TOTALPECAS NUMERIC(15,2), PORCDESC NUMERIC(3,2), VLRDESC NUMERIC(15,2), PORCACRE NUMERIC(3,2), VLRACRE NUMERIC(15,2), BAIXADO CHAR(1)
Estrutura do CadOrcamento2 CODIGO INTEGER NOT NULL, CODORCAMENTO INTEGER NOT NULL, CODRPDUTO VARCHAR(5) NOT NULL, REFPROD VARCHAR(5), MERCADORIA VARCHAR(50), CODBARRA VARCHAR(13), QTDE NUMERIC(15,3), PRECOVENDA NUMERIC(15,2), VLRTOTAL NUMERIC(15,2)
Estrutura do CadPedido CODIGO INTEGER NOT NULL, CODCLI VARCHAR(10) NOT NULL, DATAEMISSAO DATE, TOTALPEDIDO NUMERIC(15,2), TOTALPECAS NUMERIC(15,2), PORCDESC NUMERIC(3,2), VLRDESC NUMERIC(15,2), PORCACRE NUMERIC(3,2), VLRACRE NUMERIC(15,2), BAIXADO CHAR(1)
Estrutura do CadPedido2 CODIGO INTEGER NOT NULL, CODPEDIDO INTEGER NOT NULL, CODPRODUTO VARCHAR(5) NOT NULL, REFPROD VARCHAR(5), MERCADORIA VARCHAR(50), CODBARRA VARCHAR(13), QTDE NUMERIC(15,3), PRECOVENDA NUMERIC(15,2), VLRTOTAL NUMERIC(15,2)
Gostei + 0
16/01/2007
Emerson Nascimento
CREATE TRIGGER CADORCAMENTOPEDIDO_BU0 FOR CADORCAMENTO ACTIVE BEFORE UPDATE POSITION 0 AS // variaveis de trabalho declare variable CODRPDUTO VARCHAR(5); declare variable REFPROD VARCHAR(5); declare variable MERCADORIA VARCHAR(50); declare variable CODBARRA VARCHAR(13); declare variable QTDE NUMERIC(15,3); declare variable PRECOVENDA NUMERIC(15,2); declare variable VLRTOTAL NUMERIC(15,2); begin if (New.BAIXADO = ´V´) then begin -- pego o próximo ID para o pedido pedido = GEN_ID( SEU_GENERATOR, 1); -- **** insere o cabeçalho **** -- insert into CADPEDIDO (Codigo, CodCli, DataEmissao, TotalPedido, TotalPecas, PorcDesc, VlrDesc, PorcAcre, VlrAcre) values (:pedido, Old.CODCLI, Old.DATAEMISSAO, Old.TOTALORCAMENTO, Old.TOTALPECAS, Old.PORCDESC, Old.VLRDESC, Old.PORCACRE, Old.VLRACRE); -- **** insere os itens **** -- for select CODRPDUTO, REFPROD, MERCADORIA, CODBARRA, QTDE, PRECOVENDA, VLRTOTAL from CADORCAMENTO2 where Codigo = OLD.Codigo into :CODRPDUTO, :REFPROD, MERCADORIA, :CODBARRA, :QTDE, :PRECOVENDA, :VLRTOTAL do insert into CADPEDIDO2 (CODPEDIDO, CODPRODUTO, REFPROD, MERCADORIA, CODBARRA, QTDE, PRECOVENDA, VLRTOTAL) values (:Pedido, :CODRPDUTO, :REFPROD, :MERCADORIA, :CODBARRA, :QTDE, :PRECOVENDA, :VLRTOTAL) end end
Gostei + 0
19/01/2007
Facc
CREATE TRIGGER CADORCAMENTOPEDIDO_BU0 FOR CADORCAMENTO ACTIVE BEFORE UPDATE POSITION 0 AS // variaveis de trabalho declare variable CODRPDUTO VARCHAR(5); declare variable REFPROD VARCHAR(5); declare variable MERCADORIA VARCHAR(50); declare variable CODBARRA VARCHAR(13); declare variable QTDE NUMERIC(15,3); declare variable PRECOVENDA NUMERIC(15,2); declare variable VLRTOTAL NUMERIC(15,2); begin if (New.BAIXADO = ´V´) then begin -- pego o próximo ID para o pedido pedido = GEN_ID( SEU_GENERATOR, 1); -- **** insere o cabeçalho **** -- insert into CADPEDIDO (Codigo, CodCli, DataEmissao, TotalPedido, TotalPecas, PorcDesc, VlrDesc, PorcAcre, VlrAcre) values (:pedido, Old.CODCLI, Old.DATAEMISSAO, Old.TOTALORCAMENTO, Old.TOTALPECAS, Old.PORCDESC, Old.VLRDESC, Old.PORCACRE, Old.VLRACRE); -- **** insere os itens **** -- for select CODRPDUTO, REFPROD, MERCADORIA, CODBARRA, QTDE, PRECOVENDA, VLRTOTAL from CADORCAMENTO2 where Codigo = OLD.Codigo into :CODRPDUTO, :REFPROD, MERCADORIA, :CODBARRA, :QTDE, :PRECOVENDA, :VLRTOTAL do insert into CADPEDIDO2 (CODPEDIDO, CODPRODUTO, REFPROD, MERCADORIA, CODBARRA, QTDE, PRECOVENDA, VLRTOTAL) values (:Pedido, :CODRPDUTO, :REFPROD, :MERCADORIA, :CODBARRA, :QTDE, :PRECOVENDA, :VLRTOTAL) end end
Fiz isso que vc me passou, porém só está gravando apenas 1 registro na tabela itenspedido
Gostei + 0
20/01/2007
Facc
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)