Gerar parcelas com ClientDataSet em memória
Olá galera!!! Mais uma vez aqui, tentando clarear as idéias...kkkkk
Moçada delphiana é o seguinte to precisando gerar parcelas em um contas a receber. Uso firebird + IBQuery como componente de acesso, e pretendo fazeer a geração das parcelas com um ClientDataSet em memória. Mas seguinte algumas regras.
1. Vou pegar daos já informados em uma tela "Contas a pagar"
2. Preciso incrementar as parcelas de acordo com o último registro da tabela "PAGAR" do banco de dados.
Valendo lembrar que a tabela "PAGAR" usa um generator "GEN_PAGAR_ID". Meu problema está em gerar as parcelas no ClientDataSet já pegando o último registro da tabela "PAGAR", assim meu ClientDataSet já viria com as chaves primárias que posteriormente só iria gravar no banco.
Alguém tem uma idéia????
Desde já agradecido
Moçada delphiana é o seguinte to precisando gerar parcelas em um contas a receber. Uso firebird + IBQuery como componente de acesso, e pretendo fazeer a geração das parcelas com um ClientDataSet em memória. Mas seguinte algumas regras.
1. Vou pegar daos já informados em uma tela "Contas a pagar"
2. Preciso incrementar as parcelas de acordo com o último registro da tabela "PAGAR" do banco de dados.
Valendo lembrar que a tabela "PAGAR" usa um generator "GEN_PAGAR_ID". Meu problema está em gerar as parcelas no ClientDataSet já pegando o último registro da tabela "PAGAR", assim meu ClientDataSet já viria com as chaves primárias que posteriormente só iria gravar no banco.
Alguém tem uma idéia????
Desde já agradecido
Marcos Morais
Curtidas 0
Respostas
Paulo Freire
22/05/2013
Olá Marcos tenho essa, da uma olhada ...
procedure TFormParcelas.btnIncluirParcelasClick(Sender: TObject);
var
i: integer;
Begin
DM.CDS_Parcelas.Open; //Abro o Banco
//verificaparcela; //Chamo um procedimento para verificar se tem prestação pendente
i:=0; // Minha variável no caso i inicialmente é 0
for i := 1 to StrToInt(txtParcelas.Text) do // minha variável recebe 1 do numero de parcelas no caso o digitado dentro de edParcela.Text
begin
if DM.CDS_Parcelas.RecordCount < i then // verifico o numero é menor do que o da variavel
DM.CDS_Parcelas.Insert // se for insiro
else //senao edito
DM.CDS_Parcelas.Edit; //PARC vai receber o numero de parcelas que eu digitei
DM.CDS_Parcelas.FieldByName('IDCLIENTE').Value := DBLookupComboBoxCliente.KeyValue;
DM.CDS_Parcelas.FieldByName('DESCRICAO').Value := trim(txtDescricao.Text) + ' - Parc.: ' + IntToStr(i) + ' de ' + trim(txtParcelas.Text);
DM.CDS_Parcelas.FieldByName('NPARCELAS').Value := i; //VALOR vai receber o valor digitado dividido pelo numero de parcelas
DM.CDS_Parcelas.FieldByName('VALOR').Value := (StrToFloat(txtValor.Text)/StrToInt(txtParcelas.Text));
DM.CDS_Parcelas.FieldByName('DATA').Value:= incMonth( txtData.Date, i - 1); //DATA recebe a data replicando conforme o numero das parcelas
DM.CDS_Parcelas.Post; //Gravo no banco
DM.CDS_Parcelas.Next; //vou para o próximo
end;
//Dou um updade para gravar esse registro no banco
DM.CDS_Parcelas.ApplyUpdates(0); //ApplyUpdates(0) para gravar no banco o (0) significa o numero de erros
ShowMessage('Parcelas incluídas com sucesso'); //Mando uma mensagem de texto
with DM.CDS_Parcelas do
begin
Close;
Params.ParamByName('X').Value := DBLookupComboBoxCliente.KeyValue;
Open;
DisableControls;
First;
EnableControls;
end;
procedure TFormParcelas.btnIncluirParcelasClick(Sender: TObject);
var
i: integer;
Begin
DM.CDS_Parcelas.Open; //Abro o Banco
//verificaparcela; //Chamo um procedimento para verificar se tem prestação pendente
i:=0; // Minha variável no caso i inicialmente é 0
for i := 1 to StrToInt(txtParcelas.Text) do // minha variável recebe 1 do numero de parcelas no caso o digitado dentro de edParcela.Text
begin
if DM.CDS_Parcelas.RecordCount < i then // verifico o numero é menor do que o da variavel
DM.CDS_Parcelas.Insert // se for insiro
else //senao edito
DM.CDS_Parcelas.Edit; //PARC vai receber o numero de parcelas que eu digitei
DM.CDS_Parcelas.FieldByName('IDCLIENTE').Value := DBLookupComboBoxCliente.KeyValue;
DM.CDS_Parcelas.FieldByName('DESCRICAO').Value := trim(txtDescricao.Text) + ' - Parc.: ' + IntToStr(i) + ' de ' + trim(txtParcelas.Text);
DM.CDS_Parcelas.FieldByName('NPARCELAS').Value := i; //VALOR vai receber o valor digitado dividido pelo numero de parcelas
DM.CDS_Parcelas.FieldByName('VALOR').Value := (StrToFloat(txtValor.Text)/StrToInt(txtParcelas.Text));
DM.CDS_Parcelas.FieldByName('DATA').Value:= incMonth( txtData.Date, i - 1); //DATA recebe a data replicando conforme o numero das parcelas
DM.CDS_Parcelas.Post; //Gravo no banco
DM.CDS_Parcelas.Next; //vou para o próximo
end;
//Dou um updade para gravar esse registro no banco
DM.CDS_Parcelas.ApplyUpdates(0); //ApplyUpdates(0) para gravar no banco o (0) significa o numero de erros
ShowMessage('Parcelas incluídas com sucesso'); //Mando uma mensagem de texto
with DM.CDS_Parcelas do
begin
Close;
Params.ParamByName('X').Value := DBLookupComboBoxCliente.KeyValue;
Open;
DisableControls;
First;
EnableControls;
end;
GOSTEI 0
Paulo Freire
22/05/2013
Ops, faltou um end; no final ok.
GOSTEI 0
Marcos Morais
22/05/2013
valeu garoto, tanks. kkkkkkkkkkkk
GOSTEI 0
Paulo Freire
22/05/2013
Beleza, precisando estamos sempre as ordens.
GOSTEI 0