Fórum loop infinito onde esta o erro ? #481589
06/06/2014
0
A poucos dias estava pensando em uma logica para gera um gráfico, só que, na hora de executa ele entrou em lopo infinito.
segue o código:
DataModuleGeral.cdsFluxoCaixa.First;
while Not DataModuleGeral.cdsFluxoCaixa.Eof do
begin// Rotina Para Gravar os Saldos
DataModuleGeral.cdsFluxoCaixa.Edit; { Formula: SALDO_DO_DIA = VALOR_RECEBER-VALOR_PAGAR}
DataModuleGeral.cdsFluxoCaixaSALDO_DO_DIA.AsCurrency := (DataModuleGeral.cdsFluxoCaixaVALOR_RECEBER.AsCurrency -
DataModuleGeral.cdsFluxoCaixaVALOR_PAGAR.AsCurrency);//Saldo do Dia
zSA := zSA + DataModuleGeral.cdsFluxoCaixaSALDO_DO_DIA.AsCurrency;
DataModuleGeral.cdsFluxoCaixaSALDO_ACUMULADO.AsCurrency := zSA; //Saldo Acumulado {zSA é Variável para acumular o valor do dia}
DataModuleGeral.cdsFluxoCaixa.Post;
DataModuleGeral.cdsFluxoCaixa.Next;
end;não sei o que pode está acontecendo.
utilizo Dlephi 7 e Db firebird
Eduardo Mendonça
Curtir tópico
+ 1Post mais votado
06/06/2014
Ricardo
Gostei + 1
Mais Posts
06/06/2014
Rodolpho Silva
Gostei + 0
09/06/2014
Eduardo Mendonça
Gostei + 0
09/06/2014
Eduardo Mendonça
Gostei + 0
09/06/2014
Raylan Zibel
Gostei + 0
09/06/2014
Rodolpho Silva
Gostei + 0
09/06/2014
Ricardo
Você tem razão, foi um equívoco meu. Então, hoje eu me deparei com um problema parecido em um projeto que estou trabalhando; quando mando gravar o resultao de uma uma consulta em ClientDataSet ele entra em loop infinito.
Eu estava usando while na mesma sintaxe que você e o loop não terminava nunca. Mudei para for x := 0 to recordcount - 1 funcionou perfeitamente. Tenta fazer essa mesma mudança aí no seu código.
Gostei + 0
10/06/2014
Eduardo Mendonça
Gostei + 0
10/06/2014
Eduardo Mendonça
o cds não Tem campo agregado ou calculado e não tem timer que atualize valor no dataset. eu só abro cds para fazer o loop e mostrar no gráfico.
não sei o porque disso.
um coloquei no passo a passo e ele pula o código, tipo como se não desse o
DataModuleGeral.cdsFluxoCaixa.Next;
Gostei + 0
10/06/2014
Cauê Nishijima
Gostei + 0
12/06/2014
Raylan Zibel
Gostei + 0
12/06/2014
Eduardo Mendonça
var
dDatVen ...
...
dDatVen := DateToStr(DataModuleGeral.cdsFluxoCaixaDATA.AsDateTime);
while Not DataModuleGeral.cdsFluxoCaixa.Eof do
begin// Rotina Para Gravar os Saldos
DataModuleGeral.cdsFluxoCaixa.Edit;
DataModuleGeral.cdsFluxoCaixaSALDO_DO_DIA.AsCurrency := DataModuleGeral.cdsFluxoCaixaVALOR_RECEBER.AsCurrency-DataModuleGeral.cdsFluxoCaixaVALOR_PAGAR.AsCurrency;//Saldo do Dia
zSA := zSA + DataModuleGeral.cdsFluxoCaixaSALDO_DO_DIA.AsCurrency;
DataModuleGeral.cdsFluxoCaixaSALDO_ACUMULADO.AsCurrency := zSA; //Saldo Acumulado
DataModuleGeral.cdsFluxoCaixa.Post;
DataModuleGeral.cdsFluxoCaixa.Locate('DATA', StrToDate(dDatVen),[]);
DataModuleGeral.cdsFluxoCaixa.Next;
dDatVen := DateToStr(DataModuleGeral.cdsFluxoCaixaDATA.AsDateTime);
end;//Fim while Not cdsFluxoCaixa do
ficou lendo quando ele tem que gravar informações de mais de 30 dias...
Estou trabalhando para resolver isso
Gostei + 0
12/06/2014
Eduardo Mendonça
Ela é meio grande
SELECT
TABNOV.VALOR_VENCIMENTO,
TABNOV.DATA_VENCIMENTO
FROM
( SELECT
T1.DATA_VENCTO1 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO1 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO1 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO2 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO2 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO2 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO3 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO3 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO3 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO4 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO4 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO4 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO5 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO5 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO5 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO6 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO6 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO6 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO7 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO7 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO7 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO8 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO8 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO8 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO9 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO9 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO9 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO10 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO10 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO10 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO11 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO11 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO11 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO12 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO12 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO12 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO13 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO13 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO13 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO14 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO14 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO14 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO15 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO15 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO15 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO16 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO16 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO16 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO17 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO17 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO17 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO18 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO18 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO18 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO19 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO19 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO19 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO20 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO20 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO20 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO21 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO21 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO21 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO22 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO22 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO22 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO23 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO23 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO23 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCTO24 AS DATA_VENCIMENTO,
T1.VALOR_VENCTO24 AS VALOR_VENCIMENTO
FROM HONORARIOS T1
WHERE T1.DATA_VENCTO24 IS NOT NULL ) TABNOV
WHERE 1 = 1
//SQl para Pagamentos Previsto - Contas a Pagar
vSqlCP := 'SELECT
TABNOV.DATA_VENCIMENTO,
TABNOV.VALOR_VENCIMENTO
FROM
( SELECT
T1.DATA_VENCIMENTO1 AS DATA_VENCIMENTO,
T1.VALOR_VENCIMENTO1 AS VALOR_VENCIMENTO
FROM CONTAS_PAGAR T1
WHERE
T1.DATA_VENCIMENTO1 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCIMENTO2 AS DATA_VENCIMENTO,
T1.VALOR_VENCIMENTO2 AS VALOR_VENCIMENTO
FROM CONTAS_PAGAR T1
WHERE
T1.DATA_VENCIMENTO2 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCIMENTO3 AS DATA_VENCIMENTO,
T1.VALOR_VENCIMENTO3 AS VALOR_VENCIMENTO
FROM CONTAS_PAGAR T1
WHERE
T1.DATA_VENCIMENTO3 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCIMENTO4 AS DATA_VENCIMENTO,
T1.VALOR_VENCIMENTO4 AS VALOR_VENCIMENTO
FROM CONTAS_PAGAR T1
WHERE
T1.DATA_VENCIMENTO4 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCIMENTO5 AS DATA_VENCIMENTO,
T1.VALOR_VENCIMENTO5 AS VALOR_VENCIMENTO
FROM CONTAS_PAGAR T1
WHERE
T1.DATA_VENCIMENTO5 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCIMENTO6 AS DATA_VENCIMENTO,
T1.VALOR_VENCIMENTO6 AS VALOR_VENCIMENTO
FROM CONTAS_PAGAR T1
WHERE
T1.DATA_VENCIMENTO6 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCIMENTO7 AS DATA_VENCIMENTO,
T1.VALOR_VENCIMENTO7 AS VALOR_VENCIMENTO
FROM CONTAS_PAGAR T1
WHERE
T1.DATA_VENCIMENTO7 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCIMENTO8 AS DATA_VENCIMENTO,
T1.VALOR_VENCIMENTO8 AS VALOR_VENCIMENTO
FROM CONTAS_PAGAR T1
WHERE
T1.DATA_VENCIMENTO8 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCIMENTO9 AS DATA_VENCIMENTO,
T1.VALOR_VENCIMENTO9 AS VALOR_VENCIMENTO
FROM CONTAS_PAGAR T1
WHERE
T1.DATA_VENCIMENTO9 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCIMENTO10 AS DATA_VENCIMENTO,
T1.VALOR_VENCIMENTO10 AS VALOR_VENCIMENTO
FROM CONTAS_PAGAR T1
WHERE
T1.DATA_VENCIMENTO10 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCIMENTO11 AS DATA_VENCIMENTO,
T1.VALOR_VENCIMENTO11 AS VALOR_VENCIMENTO
FROM CONTAS_PAGAR T1
WHERE
T1.DATA_VENCIMENTO11 IS NOT NULL
UNION ALL
SELECT
T1.DATA_VENCIMENTO12 AS DATA_VENCIMENTO,
T1.VALOR_VENCIMENTO12 AS VALOR_VENCIMENTO
FROM CONTAS_PAGAR T1
WHERE
T1.DATA_VENCIMENTO12 IS NOT NULL ) TABNOV
WHERE 1 = 1
Gostei + 0
12/06/2014
Eduardo Mendonça
Gostei + 0
12/06/2014
Eduardo Mendonça
Gostei + 0
25/06/2014
Eduardo Mendonça
Depois de Deixar essa parte do projeto de lado por alguns dias eu simplesmente rodei o projeto e não deu o loop infinito.
O mais incrível é que, do mesmo modo que ele entrou em loop Infinito ele Voltou ao normal (Misteriosamente)
Obrigado a Todos pela atenção
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)