Fórum problema para deletar uma Stored procedure? #58460
22/06/2007
0
Pessoal estou com problemas para deletar nesta Stored Procedure que eu fiz
Explicando: Esta parte em vermelho no codigo preciso que compare a tabela salario_m o campo id_gerar_formula com a tabela formulas o campo id_gerar_formula, e caso nao exista esse campo na tabela SALARIO_M, tem que deletar na tabela FORMULAS. Como essas duas tabelas nao fazem referencia alguma a unica forma que achei eh deleta-las via SP.
Eu passo elas na procedure fazendo um laço de um loop para percorrer as tabelas e gravo por um componente StoredProc(ZEOS) assim:
Funcionar ateh que funciona sem erros, o problema eh que nao deleta o resto esta fazendo certo. (Ou seja a parte do codigo em vermelho nao esta servindo pra nada)
Agradeço a ajuda de todos
Adriano
[b:93ad136099][color=blue:93ad136099]CREATE PROCEDURE TRANSFEREFORMULA (
id_formula integer,
id_gerarformula integer,
descricao varchar(60),
formula varchar(80),
p_d char(1),
marcar varchar(10),
quantidade char(10),
valor char(10),
quantia float,
b_calculo varchar(60),
vl_informado numeric(15,2),
inss char(10),
irrf char(10),
fgts char(10),
sfamilia char(10),
dinss char(10),
dirrf char(10),
dfgts char(10),
dsfamilia char(10))
as
begin
if (exists(
select id_formula, id_gerarformula, descricao, formula, p_d
from formulas where (id_formula = :id_formula
and id_gerarformula = :id_gerarformula))) then
--primeiro eu percorro a tabela e verifico alteraçoes (Update)
update formulas
set ID_FORMULA = :id_formula,
ID_GERARFORMULA = :id_gerarformula,
DESCRICAO = :descricao,
FORMULA = :formula,
P_D = :p_d,
MARCAR = :marcar,
QUANTIDADE = :quantidade,
VALOR = :valor,
QUANTIA = :quantia,
B_CALCULO = :B_calculo,
VL_INFORMADO = :vl_informado,
INSS = :inss,
IRRF = :irrf,
FGTS = :fgts,
SFAMILIA = :sfamilia,
DINSS = :dinss,
DIRRF = :dirrf,
DFGTS = :dfgts,
DSFAMILIA = :dsfamilia
where (id_formula = :id_formula and id_gerarformula = :id_gerarformula);
else
--segundo caso nao tenha alteraçao eu faço um insert
insert into formulas (
ID_FORMULA,
ID_GERARFORMULA,
DESCRICAO,
FORMULA,
P_D,
MARCAR,
QUANTIDADE,
VALOR,
QUANTIA,
B_CALCULO,
VL_INFORMADO,
INSS,
IRRF,
FGTS,
SFAMILIA,
DINSS,
DIRRF,
DFGTS,
DSFAMILIA)
values (
:id_formula,
:id_gerarformula,
:descricao,
:formula,
:p_d,
:marcar,
:quantidade,
:valor,
:quantia,
:B_calculo,
:vl_informado,
:inss,
:irrf,
:fgts,
:sfamilia,
:dinss,
:dirrf,
:dfgts,
:dsfamilia);[/color:93ad136099][/b:93ad136099]
[color=green:93ad136099] --aqui caso caso a tabela formulas estiver <> da tabela salario_m, precisa deletar para arrumar os dados na tabela[/color:93ad136099]
[b:93ad136099][color=red:93ad136099]if (not exists(
select id_gerarformula from salario_m O where exists(select id_gerarformula from formulas D
where D.id_gerarformula <> O.id_gerarformula))) then
--caso nao exista os campos no where ai deleta da tabela
delete from formulas ;[/color:93ad136099]
[color=blue:93ad136099]end[/color:93ad136099][/b:93ad136099]
Explicando: Esta parte em vermelho no codigo preciso que compare a tabela salario_m o campo id_gerar_formula com a tabela formulas o campo id_gerar_formula, e caso nao exista esse campo na tabela SALARIO_M, tem que deletar na tabela FORMULAS. Como essas duas tabelas nao fazem referencia alguma a unica forma que achei eh deleta-las via SP.
Eu passo elas na procedure fazendo um laço de um loop para percorrer as tabelas e gravo por um componente StoredProc(ZEOS) assim:
//INCLUIR A FUNÇAO DE TRANSPORTE DE DADOS dm.qAutoIncFunc.First; //tabela funcionarios while not dm.qAutoIncFunc.eof do //laço da tabela funcionarios begin dm.adoqformulamestre.first; //tabela de origem while not dm.adoqformulamestre.eof do //laço da tabela origem begin dm.spTransfereFormula.Close; //-- transportar para banco de dados dm.spTransfereFormula.Params[0].Value := dm.adoqformulamestreid_formula.value; dm.spTransfereFormula.Params[1].Value := dm.qAutoIncFuncid_gerarformula.Value; dm.spTransfereFormula.Params[2].Value := dm.adoqformulamestredescricao.value; dm.spTransfereFormula.Params[3].Value := dm.adoqformulamestreformula.value; dm.spTransfereFormula.Params[4].Value := dm.adoqformulamestrep_d.value; dm.spTransfereFormula.Params[5].Value := ´False´; dm.spTransfereFormula.Params[6].Value := dm.adoqformulamestrequantidade.value; dm.spTransfereFormula.Params[7].Value := dm.adoqformulamestrevl_informado.value; dm.spTransfereFormula.Params[8].Value := null; dm.spTransfereFormula.Params[9].Value := dm.adoqformulamestreb_calculo.value; dm.spTransfereFormula.Params[10].Value := null; dm.spTransfereFormula.Params[11].Value := dm.adoqformulamestreINSS.value; dm.spTransfereFormula.Params[12].Value := dm.adoqformulamestreIRRF.value; dm.spTransfereFormula.Params[13].Value := dm.adoqformulamestreFGTS.value; dm.spTransfereFormula.Params[14].Value := dm.adoqformulamestreSFAMILIA.value; dm.spTransfereFormula.Params[15].Value := dm.adoqformulamestreDINSS.value; dm.spTransfereFormula.Params[16].Value := dm.adoqformulamestreDIRRF.value; dm.spTransfereFormula.Params[17].Value := dm.adoqformulamestreDFGTS.value; dm.spTransfereFormula.Params[18].Value := dm.adoqformulamestreDSFAMILIA.value; dm.spTransfereFormula.ExecProc; //executando a Stored Procedure (Proventos) dm.zTFormula.Refresh; //atualiza o dbgrid dm.adoqformulamestre.Next; //tabela origem end; //final do loop dm.qAutoIncFunc.Next; //tabela funcionarios end; //final do laço
Funcionar ateh que funciona sem erros, o problema eh que nao deleta o resto esta fazendo certo. (Ou seja a parte do codigo em vermelho nao esta servindo pra nada)
Agradeço a ajuda de todos
Adriano
Adriano_servitec
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)