Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

michel_sinclair

laço while - iniciante

Recommended Posts

Preciso mesmo desta ajuda... pq estou ficando maluco aqui... já procurei no forum mas não achei nada que resolva meu problema..

 

preciso verificar na tabela se o cara esta devendo... se o pagamento estiver = Não ... ele deve fazer uma coisa... se estiver = Sim ou Cancelado deve fazer outra coisa.... o problema é que a estrutura que criei para o laço while não está resolvendo... por exemplo... se o cara tem dois pagamentos = Sim ele está gerando duas novas parcelas quando deveria gerar apenas uma (isto ocorre quando o cara tem dois registros com pagamento = sim). Acho que a solução seria em primeiro verificar se o cara deve uma parcela fazendo uma varredura na tabela... se ele deve então faça X... se estiver tudo quitado, ou seja, tudo na tabela do cara com pagamento = sim então faça Y... fui claro? ah.. mais uma coisa... se o cara tiver devendo é uma parcela somente... ele não tem como dever duas...preciso mesmo desta ajuda.... abraço a todos

segue o código que estou usando:


var valor : Real;
var datahoje : Tdatetime;
begin
datahoje := now;
Valor := strtofloat (Edit1.Text);
ibdataset1.Active := false;
ibdataset1.SelectSQL.Clear;
ibdataset1.SelectSQL.Add('select membros.*, debitos.* from membros left join debitos on membros.cod_membro = debitos.cod_membro where (membros.isento = 0) order by membros.nome');
ibdataset1.Active := true;

ibdataset1.First;
while not ibdataset1.eof do
begin
if (IBDataSet1QUITADO.AsString = 'Sim') or (IBDataSet1QUITADO.AsString = 'Cancelado') then
begin

tabelas.QueryDebitos.Append;
tabelas.QueryDebitosNOSSONUMERO.Value := tabelas.QueryDebitosINCREMENTO.AsString;
tabelas.QueryDebitosDATAEMISSAO.Value := datahoje;
tabelas.QueryDebitosCOD_MEMBRO.Value := IBDataSet1COD_MEMBRO.Value;
tabelas.QueryDebitosDATAVENCIMENTO.Value := strtodate(FormatDateTime('dd/mm/yyyy', DateTimePicker2.Date));
tabelas.QueryDebitosDESCONTO.value := 0;
tabelas.QueryDebitosQUITADO.AsString := 'Não';
tabelas.QueryDebitosVALOR.Value := valor;
tabelas.QueryDebitosVALORFINAL.Value := valor;
tabelas.QueryDebitos.UpdateRecord;
tabelas.QueryDebitos.Post;
tabelas.IBTransaction1.CommitRetaining;


end
else
begin
tabelas.QueryDebitos.Append;
tabelas.QueryDebitosNOSSONUMERO.Value := tabelas.QueryDebitosINCREMENTO.AsString;
tabelas.QueryDebitosDATAEMISSAO.Value := datahoje;
tabelas.QueryDebitosCOD_MEMBRO.Value := IBDataSet1COD_MEMBRO.Value;
tabelas.QueryDebitosDATAVENCIMENTO.Value := strtodate(FormatDateTime('dd/mm/yyyy', DateTimePicker2.Date));
tabelas.QueryDebitosDESCONTO.value := 0;
tabelas.QueryDebitosQUITADO.AsString := 'Não';
tabelas.QueryDebitosVALOR.value := IBDataSet1VALORFINAL.Value + valor;
tabelas.QueryDebitosVALORFINAL.value := IBDataSet1VALORFINAL.Value + valor;
tabelas.QueryDebitos.UpdateRecord;
tabelas.QueryDebitos.Post;
tabelas.IBTransaction1.CommitRetaining;
IBDataSet1.Edit;
IBDataSet1QUITADO.AsString := 'Cancelado';
IBDataSet1OBSERVACOES1.AsString := 'Gerado novo débito atualizado';
ibdataset1.Post;
tabelas.IBTransaction1.CommitRetaining;

end;


IBDataSet1.Next;

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo.

 

Uma pergunta: E se por algum motivo a coluna Quitado estiver vindo como null? Não sei te dizer se no seu caso isso pode ou não estar ocorrendo e sendo o causador do seu problema. Em todo caso, experimente no "else" acrescentar uma segunda condição do tipo:

 

if (IBDataSet1QUITADO.AsString = 'Nao') then

 

Se por ventura esse for o causador, acredito que na sua SQL você poderia definir um condição do tipo: "Quitado is not null", ou se preferir, adotar a condição proposta logo acima.

 

Até a próxima. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.