GARANTIR DESCONTO

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
[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

Adriano_servitec

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar