loop infinito onde esta o erro ?
Bom dia!
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:
não sei o que pode está acontecendo.
utilizo Dlephi 7 e Db firebird
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
Curtidas 1
Melhor post
Ricardo
06/06/2014
Tire o post de dentro do laço.
GOSTEI 1
Mais Respostas
Rodolpho Silva
06/06/2014
Veja se não tem algum evento no seu Dataset que possa estar alterando a posição do seu registro.
GOSTEI 0
Eduardo Mendonça
06/06/2014
Não tem eventos do dataset e nem no ClientDataSet.
GOSTEI 0
Eduardo Mendonça
06/06/2014
Se eu retira o post de dentro como ele ira gravar no DB?
GOSTEI 0
Raylan Zibel
06/06/2014
Tem campo agregado ou calculado? Ou algum timer que atualize valor no dataset? O dataset está sempre aberto ou abriu pra fazer esse while?
GOSTEI 0
Rodolpho Silva
06/06/2014
Tem algum índice neste Cds?
GOSTEI 0
Ricardo
06/06/2014
Se eu retira o post de dentro como ele ira gravar no DB?
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
Eduardo Mendonça
06/06/2014
ok vou tentar aqui! e
GOSTEI 0
Eduardo Mendonça
06/06/2014
Tem campo agregado ou calculado? Ou algum timer que atualize valor no dataset? O dataset está sempre aberto ou abriu pra fazer esse while?
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
Cauê Nishijima
06/06/2014
Posta a query fazer uma simulação mais precisa
GOSTEI 0
Raylan Zibel
06/06/2014
Tente deletar esse CDS do form e cria outro, pode copiar os Fields que já tem nesse (Control C + Control V).
GOSTEI 0
Eduardo Mendonça
06/06/2014
Fiz assim:
ficou lendo quando ele tem que gravar informações de mais de 30 dias...
Estou trabalhando para resolver isso
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
Eduardo Mendonça
06/06/2014
Posta a query fazer uma simulação mais precisa
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
Eduardo Mendonça
06/06/2014
O mais interessante é que no primeiro dia ela rodou bem sem problemas e dia seguinte ele entrou em loop infinito
GOSTEI 0
Eduardo Mendonça
06/06/2014
e a copia de segurança que fiz ta igualzinha e da o mesmo loop
GOSTEI 0
Eduardo Mendonça
06/06/2014
Oi Boa tarde.
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
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