Fórum Salvar dados no banco dentro do processo de repetição #448184

09/07/2013

0

Olá pessoal

Estou com umas duvidas
Eu tenho minha tela de cadastro de contas a pagar com as opções de pagamento, a vista, a prazo, boleto ...
Ai quando eu seleciono "a prazo" abre a minha tela de cadastro de parcelas, a onde o usuário informa em quantas parcelas vai ser feito o pagamento.
Como faço para dento do processo de repetição conforme vai criando as parcelas, ao mesmo tempo inserir no banco e depois ao clicar no botão salvar, salvar esses dados no banco?
Mauricio Jerry

Mauricio Jerry

Responder

Posts

09/07/2013

Joel Rodrigues

É só fazer um loop para ler as parcelas e em cada iteração, fazer um insert e post na tabela. Caso esteja utilizando stored procedure, é só preencher os parâmetro e executá-lo em cada iteração do laço.
Responder

Gostei + 0

09/07/2013

Mauricio Jerry

Sim
Mas quando eu dou um cds.post ele sai fora do laço de repetição executando só a primeira vez
Responder

Gostei + 0

09/07/2013

Gabriel Baltazar

Tem algum erro nesse loop então, posta o código aí.
Responder

Gostei + 0

09/07/2013

Joel Rodrigues

Exato, deve haver alguma exceção sendo gerada ou a estrutura do seu laço está incorreta.
Poste aqui o código para analisarmos e te darmos uma resposta mais segura.
Responder

Gostei + 0

09/07/2013

Mauricio Jerry

procedure TFormparcela.btngerarClick(Sender: TObject);
var
iAux, i : Integer;
rJuros,
rJAtraso,
rVL_Parcela,
rVL_Juros,
rVL_JAtraso :Real;
dDTVencimento: TDate;
begin
dDTVencimento := StrToDate(Vencimento.Text);
iAux := StrToInt(Parcela.Text);
rJuros := StrToFloat(Juros.Text);
rJAtraso := StrToFloat(JAtraso.Text);
rVL_Parcela := StrToFloat(Total_pagar.Text)/iAux;
rVL_Juros := (rVL_Parcela * rJuros)/100;
rVL_JAtraso := (rVL_Parcela * rJAtraso)/100;
for i := 1 to iAux do
if i <= 1 then begin
DM.CDSparcelas.Insert;
DM.CDSparcelas.FieldByName('PARCELA').AsInteger := i;
DM.CDSparcelas.FieldByName('VENCIMENTO').AsDateTime := StrToDate(Vencimento.Text);
DM.CDSparcelas.FieldByName('VL_JUROS').AsFloat := rVL_Juros;
DM.CDSparcelas.FieldByName('VL_JUROSATRASO').AsFloat := rVL_JAtraso;
DM.CDSparcelas.FieldByName('VL_PARCELA').AsFloat := rVL_Parcela;
DM.CDSparcelas.FieldByName('TOTAL_PAG').AsFloat := (rVL_Parcela + rVL_Juros + rVL_JAtraso);
DM.CDSparcelas.FieldByName('COD_CONTAPAG').AsInteger := DM.CDSpagarCODIGO.AsInteger;
end
else begin
DM.CDSparcelas.Insert;
DM.CDSparcelas.FieldByName('PARCELA').AsInteger := i;
DM.CDSparcelas.FieldByName('VENCIMENTO').AsDateTime := IncMonth(dDTVencimento);
DM.CDSparcelas.FieldByName('VL_JUROS').AsFloat := rVL_Juros;
DM.CDSparcelas.FieldByName('VL_JUROSATRASO').AsFloat := rVL_JAtraso;
DM.CDSparcelas.FieldByName('VL_PARCELA').AsFloat := rVL_Parcela;
DM.CDSparcelas.FieldByName('TOTAL_PAG').AsFloat := (rVL_Parcela + rVL_Juros + rVL_JAtraso);
dDTVencimento := IncMonth(dDTVencimento);
end;
DBGrid1.Refresh;
end;

procedure TFormparcela.BTNSAIRClick(Sender: TObject);
begin
Formparcela.Close;
end;

procedure TFormparcela.FormActivate(Sender: TObject);
begin
inherited;
Vencimento.Text := DateToStr(Formcontas.DateTimePicker1.Date);
Total_pagar.Text := Formcontas.DBEdit3.Text;
DM.CDSparcelas.Active := False;
DM.CDSparcelas.Active := True;
DM.CDSvenda.Active := True;
end;

procedure TFormparcela.BtnSalvarClick(Sender: TObject);
begin
inherited;
DM.CDSparcelas.Post;
end;

end.

Isso que estou fazendo
os dados aparecem no meu DBgrid mas quando eu clico no botão salvar os dados não vão para o banco
Responder

Gostei + 0

09/07/2013

Thebluemonkey

Até onde sei a cada insert você tem que dar um post. Não sei se você não quer salvar diretamente no banco, mas a utilização do loop já deve ser justamente para automatizar o processo de insert/post, se você não usar o post dentro do loop acho que não dá certo.
Responder

Gostei + 0

09/07/2013

Mauricio Jerry

Sim mas da mesma forma
antes de eu fazer assim eu dava o posto ao final da inclusão de dados antes de repetir novamente
e mesmo assim os dados não vão para o banco
Responder

Gostei + 0

09/07/2013

Thebluemonkey

Sim mas da mesma forma
antes de eu fazer assim eu dava o posto ao final da inclusão de dados antes de repetir novamente
e mesmo assim os dados não vão para o banco


Só para confirmar, você usou o post dentro do loop desta forma e mesmo assim não salvou?

if i <= 1 then begin
		DM.CDSparcelas.Insert;
		DM.CDSparcelas.FieldByName('PARCELA').AsInteger := i;
		DM.CDSparcelas.FieldByName('VENCIMENTO').AsDateTime := StrToDate(Vencimento.Text);
		DM.CDSparcelas.FieldByName('VL_JUROS').AsFloat := rVL_Juros;
		DM.CDSparcelas.FieldByName('VL_JUROSATRASO').AsFloat := rVL_JAtraso;
		DM.CDSparcelas.FieldByName('VL_PARCELA').AsFloat := rVL_Parcela;
		DM.CDSparcelas.FieldByName('TOTAL_PAG').AsFloat := (rVL_Parcela + rVL_Juros + rVL_JAtraso);
		DM.CDSparcelas.FieldByName('COD_CONTAPAG').AsInteger := DM.CDSpagarCODIGO.AsInteger;
                DM.CDSparcelas.Post; // POST AQUI **********
	end
	else begin
		DM.CDSparcelas.Insert;
		DM.CDSparcelas.FieldByName('PARCELA').AsInteger := i;
		DM.CDSparcelas.FieldByName('VENCIMENTO').AsDateTime := IncMonth(dDTVencimento);
		DM.CDSparcelas.FieldByName('VL_JUROS').AsFloat := rVL_Juros;
		DM.CDSparcelas.FieldByName('VL_JUROSATRASO').AsFloat := rVL_JAtraso;
		DM.CDSparcelas.FieldByName('VL_PARCELA').AsFloat := rVL_Parcela;
		DM.CDSparcelas.FieldByName('TOTAL_PAG').AsFloat := (rVL_Parcela + rVL_Juros + rVL_JAtraso);
		dDTVencimento := IncMonth(dDTVencimento);
                DM.CDSparcelas.Post; // POST AQUI ******* 
	end;
Responder

Gostei + 0

09/07/2013

Mauricio Jerry

isso
Achei muito estranho pq no DBGrid aparecem os dados
e o DBGrid está ligado com o banco não recebe dados diretamente da tela
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar