Interbase um update na tabela
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
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
Curtidas 0
Respostas
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+
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
29/06/2003
cara acho que é isso mesmo vou fazer uns testes aqui valeu mesmo ...
GOSTEI 0
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
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!
---
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
29/06/2003
fiz desta forma mas deu erro .. vou postar o erro ...
GOSTEI 0
Midas
29/06/2003
´transaction is active´ por que ?
GOSTEI 0
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+
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