Interbase um update na tabela

Firebird

29/06/2003

Preciso de uma sql que faça o seguinte...

tabcontrato
codcontrato
dtvencimento
codfase

tabfase
codfase
diasinicio
diasfinal

dtvencimento= data do vencimento do contrato
diasinicio= total de dia em atrazo inicial
diasfim = total de dia em atrazo final

preciso analizar a tabela de contrato, saber quantos dias de atrazo e jogar a fase correspondente, para o campo codfase da tabela de contrato


Midas

Midas

Curtidas 0

Respostas

Afarias

Afarias

29/06/2003

UPDATE tabcontrato C SET C.codfase = (
SELECT codfase FROM tabfase WHERE
CURRENT_DATE-C.dtvencimento BETWEEN diasinicio AND diasfinal)


-- atualiza o codefase para todos os contratos...

adicione : WHERE C.codcontrato = <codigo>
no final para atualizar apenas 1 contrato desejado!

Vc pode ainda usar um storedProcedure se preferir.


T+


GOSTEI 0
Midas

Midas

29/06/2003

cara acho que é isso mesmo vou fazer uns testes aqui valeu mesmo ...


GOSTEI 0
Midas

Midas

29/06/2003

achei que seria facil mas esto apanhando, pois estou usando uma sqlquery e no final mando execsql e esta dando erro ... vc deu ideia de usar uma storec procedure ... como usarei estou usando o delphi ?


GOSTEI 0
Afarias

Afarias

29/06/2003

Qual o erro??

---

O procedimento com IBX seria: coloque um IBSQL no form/data module, preencha as propriedades Database, Transaction e SQL, e use um código tipo (ex:):


procedure Txxx.AtualizarFasesDosProjetos;
begin

with IBSQL1 do
try
Transaction.StartTransaction;
ExecQuery;
finally
Transaction.Commit;
end;

end;


Abraço!


GOSTEI 0
Midas

Midas

29/06/2003

fiz desta forma mas deu erro .. vou postar o erro ...


GOSTEI 0
Midas

Midas

29/06/2003

´transaction is active´ por que ?


GOSTEI 0
Afarias

Afarias

29/06/2003

>> ´transaction is active´ por que ?

A transação em uso pelo componente IBSQL já estava ativa (provavelmente pq é utilizada em outro processo ou pq vc definiu a propiedade Active do componente para TRUE em tempo de projeto -- o q não é aconselhado)

vc pode alterar se código para:

if not Transaction.InTransaction then
Transaction.StartTransaction;

ou ainda:

if Transaction.InTransaction then
Transaction.Commit;
Transaction.StartTransaction;

depende do seu caso.


T+


GOSTEI 0
POSTAR