Salvar dados no banco dentro do processo de repetição
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?
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
Curtidas 0
Respostas
Joel Rodrigues
09/07/2013
É 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.
GOSTEI 0
Mauricio Jerry
09/07/2013
Sim
Mas quando eu dou um cds.post ele sai fora do laço de repetição executando só a primeira vez
Mas quando eu dou um cds.post ele sai fora do laço de repetição executando só a primeira vez
GOSTEI 0
Gabriel Baltazar
09/07/2013
Tem algum erro nesse loop então, posta o código aí.
GOSTEI 0
Joel Rodrigues
09/07/2013
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.
Poste aqui o código para analisarmos e te darmos uma resposta mais segura.
GOSTEI 0
Mauricio Jerry
09/07/2013
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
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
GOSTEI 0
Thebluemonkey
09/07/2013
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.
GOSTEI 0
Mauricio Jerry
09/07/2013
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
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
GOSTEI 0
Thebluemonkey
09/07/2013
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
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;GOSTEI 0
Mauricio Jerry
09/07/2013
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
Achei muito estranho pq no DBGrid aparecem os dados
e o DBGrid está ligado com o banco não recebe dados diretamente da tela
GOSTEI 0