Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Atualizar uma tabela após atualizar outra???


Posts recomendados

Boa noite pessoal, estou quebrando a cabeça em uma questão aqui faz dois dias, já pesquisei em vários Fóruns e vídeo aulas mais sem sucesso.

O Problema é o Seguinte.

Tenho duas tabelas (contas_a_pagar) e (conta_a_pagar detalhes), em uma delas tenho um atualizo via "FORM" as contas com valores total da mesma, na outra atualizo "Botão Gerar Parcelas" e utilizo para gerar as parcelas.
A Parte 1 que uso para gerar parcelas e inserir na minha tabela "contas_a_pagar_detalhe" esta funcionando normalmente e usei o comando abaixo:

 

procedure Tfrm_ContasAPagar.BitBtn_GerarParcaela_MovClick(Sender: TObject);

var

 qend, qend1 : TZQuery;

 LongintVar, i : Integer;

 DataConta : TDate;

 DataUltParcela : TDate;

begin

 qend := TZQuery.Create(nil);

 qend.Connection := dm.Conect;



 qend1 := TZQuery.Create(nil);

 qend1.Connection := dm.Conect;



 qend.SQL.Clear;

 qend.SQL.Add(' SELECT ID, CENTRODECUSTO, VALORTOTAL '+#10+

              ' FROM CONTAS_A_PAGAR WHERE ID = '''+

 dm.qContasaPagar.FieldByName('id').asstring +''' ');

 qend.Open;



 qend1.SQL.Clear;

 qend1.SQL.Add('SELECT IDCONTA FROM CONTAS_A_PAGAR_DETALHE '+

 'WHERE IDCONTA = '''+ qend.FieldByName('ID').AsString +''' ');

 qend1.Open;



   LongintVar := StrToInt(edt_QtdParcelas_CP.Text);

   DataConta := StrToDate(edt_Data_CP.text);

 try

  if LongintVar = 1 then

   begin

     Messagedlg('Este Pagamento não tem Parcelas a Ser Geradas!',mtinformation,[mbok],0);

     exit;

   end

   else

 if qend1.RecordCount > 0 then

  begin

   Messagedlg('As Parcelas Já Foram Geradas Anteriormente!',mtinformation,[mbok],0);

   exit;

  end

  else

  begin

  LongintVar := StrToInt(edt_QtdParcelas_CP.Text);

  for I := 1 to LongintVar do

    begin

     qend1.SQL.Clear;

     qend1.SQL.Add(' INSERT INTO CONTAS_A_PAGAR_DETALHE      '+#10+

                  ' (CENTRODECUSTO, IDCONTA, VALOR, JUROS,   '+#10+

                  '  DESCONTOS, DATAVENCIMENTO, PARCELA, VALORDEVEDOR)     ');

     qend1.SQL.Add(' VALUES                                  ');

     qend1.SQL.Add(' (:P1, :P2, :P3, :P4, :P5, :P6, :P7, :P8)     ');



     qend1.ParamByName('P1').asString    :=

                                     qend.FieldByName('CENTRODECUSTO').asString;



     qend1.ParamByName('P2').asString    := qend.FieldByName('ID').asString;



     qend1.ParamByName('P3').AsCurrency

                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;



     qend1.ParamByName('P4').asString    := '0';

     qend1.ParamByName('P5').asString    := '0';

     qend1.ParamByName('P6').asDate      := incMonth(DataConta, i);

     qend1.ParamByName('P7').AsString   := IntToStr(i)+'/'+ IntToStr(LongintVar);

     qend1.ParamByName('P8').AsCurrency

                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;

     qend1.ExecSQL;

     end;

  end;



  except

   On E: Exception do

   raise Exception.Create(E.Message);



  end;

      ShowMessage('Foram Geradas ' + IntToStr(LongintVar) + ' Parcela(s) com Sucesso');

end;



A Segunda Parte que é para atualizar meu campo "DatavUltParcela" na minha tabela conforme a "contas_a_pagar" é que mora o problema.

Segue o comando que estou usando para ela.
 

begin

      qend.SQL.Clear;

      qend.SQL.Add(' UPDATE CONTAS_A_PAGAR SET  (DATAVULTPARCELA)        '+#10+

      ' WHERE ID = '''+ qend1.FieldByName('IDCONTA').AsString +'''       ');

      qend.SQL.Add(' VALUES                                              ');

      qend.SQL.Add(' (:CP1)                                              ');

      qend.ParamByName('CP1').asDate      := incMonth(DataConta, i);

      qend.ExecSQL;

      end;



Será que estou fazendo algo de errado?

Segue o código Completo do codigo:

 

procedure Tfrm_ContasAPagar.BitBtn_GerarParcaela_MovClick(Sender: TObject);

var

 qend, qend1 : TZQuery;

 LongintVar, i : Integer;

 DataConta : TDate;

 DataUltParcela : TDate;

begin

 qend := TZQuery.Create(nil);

 qend.Connection := dm.Conect;



 qend1 := TZQuery.Create(nil);

 qend1.Connection := dm.Conect;



 qend.SQL.Clear;

 qend.SQL.Add(' SELECT ID, CENTRODECUSTO, VALORTOTAL '+#10+

              ' FROM CONTAS_A_PAGAR WHERE ID = '''+

 dm.qContasaPagar.FieldByName('id').asstring +''' ');

 qend.Open;



 qend1.SQL.Clear;

 qend1.SQL.Add('SELECT IDCONTA FROM CONTAS_A_PAGAR_DETALHE '+

 'WHERE IDCONTA = '''+ qend.FieldByName('ID').AsString +''' ');

 qend1.Open;



   LongintVar := StrToInt(edt_QtdParcelas_CP.Text);

   DataConta := StrToDate(edt_Data_CP.text);

 try

  if LongintVar = 1 then

   begin

     Messagedlg('Este Pagamento não tem Parcelas a Ser Geradas!',mtinformation,[mbok],0);

     exit;

   end

   else

 if qend1.RecordCount > 0 then

  begin

   Messagedlg('As Parcelas Já Foram Geradas Anteriormente!',mtinformation,[mbok],0);

   exit;

  end

  else

  begin

  LongintVar := StrToInt(edt_QtdParcelas_CP.Text);

  for I := 1 to LongintVar do

    begin

     qend1.SQL.Clear;

     qend1.SQL.Add(' INSERT INTO CONTAS_A_PAGAR_DETALHE      '+#10+

                  ' (CENTRODECUSTO, IDCONTA, VALOR, JUROS,   '+#10+

                  '  DESCONTOS, DATAVENCIMENTO, PARCELA, VALORDEVEDOR)     ');

     qend1.SQL.Add(' VALUES                                  ');

     qend1.SQL.Add(' (:P1, :P2, :P3, :P4, :P5, :P6, :P7, :P8)     ');



     qend1.ParamByName('P1').asString    :=

                                     qend.FieldByName('CENTRODECUSTO').asString;



     qend1.ParamByName('P2').asString    := qend.FieldByName('ID').asString;



     qend1.ParamByName('P3').AsCurrency

                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;



     qend1.ParamByName('P4').asString    := '0';

     qend1.ParamByName('P5').asString    := '0';

     qend1.ParamByName('P6').asDate      := incMonth(DataConta, i);

     qend1.ParamByName('P7').AsString   := IntToStr(i)+'/'+ IntToStr(LongintVar);

     qend1.ParamByName('P8').AsCurrency

                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;

     qend1.ExecSQL;

     end;



     begin

      LongintVar := StrToInt(edt_QtdParcelas_CP.Text);

      for I := 1 to LongintVar do

      begin

       qend.SQL.Clear;

       qend.SQL.Add(' UPDATE CONTAS_A_PAGAR SET  (DATAVULTPARCELA)        '+#10+

       ' WHERE ID = '''+ qend1.FieldByName('IDCONTA').AsString +'''       ');

       qend.SQL.Add(' VALUES                                              ');

       qend.SQL.Add(' (:CP1)                                              ');

       qend.ParamByName('CP1').asDate      := incMonth(DataConta, i);

       qend.ExecSQL;

       end;

    end;







  end;



  except

   On E: Exception do

   raise Exception.Create(E.Message);



  end;

      ShowMessage('Foram Geradas ' + IntToStr(LongintVar) + ' Parcela(s) com Sucesso');

end;



Estou trabalhando com banco de dados Mysql.

Será que estou colocando a segunda parte no lugar errado? Falta algo? ou o Procedimento é errado?

Alguém pode me ajudar por favor?

Estou iniciando meus trabalhos com Delphi Tokio 10.2 e ainda sou um pouco leigo no assunto!!!

Desde já agradeço a todos que ajudarem ou pelo menos tentarem.

Link para o comentário
Compartilhar em outros sites

Pessoal, consegui resolver aqui!!!

Montei uma SQL para atualizar com um c o campo fantasma que já havia na segunda tabela (DataRecebimento), este campo se tornou a data da ultima parcela com o comando MAX() de  acordo com ID e IDCONTA.

Segue o código:

procedure Tfrm_ContasAPagar.BitBtn_GerarParcaela_MovClick(Sender: TObject);
var
 qend, qend1 : TZQuery;
 LongintVar, i : Integer;
 LongintVar2, i2 : Integer;
 DataConta : TDate;
 DataUltParcela : TDate;
begin
 qend := TZQuery.Create(nil);
 qend.Connection := dm.Conect;
	 qend1 := TZQuery.Create(nil);
 qend1.Connection := dm.Conect;
	 qend.SQL.Clear;
 qend.SQL.Add(' SELECT ID, CENTRODECUSTO, VALORTOTAL '+#10+
              ' FROM CONTAS_A_PAGAR WHERE ID = '''+
 dm.qContasaPagar.FieldByName('id').asstring +''' ');
 qend.Open;
	 qend1.SQL.Clear;
 qend1.SQL.Add('SELECT IDCONTA FROM CONTAS_A_PAGAR_DETALHE '+
 'WHERE IDCONTA = '''+ qend.FieldByName('ID').AsString +''' ');
 qend1.Open;
	   LongintVar := StrToInt(edt_QtdParcelas_CP.Text);
   DataConta := StrToDate(edt_Data_CP.text);
	
 try
	  if qend1.RecordCount > 0 then
  begin
   Messagedlg('As Parcelas Já Foram Geradas Anteriormente!',mtinformation,[mbok],0);
   exit;
  end
  else
  begin
  LongintVar := StrToInt(edt_QtdParcelas_CP.Text);
  for I := 1 to LongintVar do
    begin
     qend1.SQL.Clear;
     qend1.SQL.Add(' INSERT INTO CONTAS_A_PAGAR_DETALHE      '+#10+
                  ' (CENTRODECUSTO, IDCONTA, VALOR, JUROS,   '+#10+
                  '  DESCONTOS, DATAVENCIMENTO, PARCELA, VALORDEVEDOR)     ');
     qend1.SQL.Add(' VALUES                                  ');
     qend1.SQL.Add(' (:P1, :P2, :P3, :P4, :P5, :P6, :P7, :P8)     ');
	     qend1.ParamByName('P1').asString    :=
                                     qend.FieldByName('CENTRODECUSTO').asString;
	     qend1.ParamByName('P2').asString    := qend.FieldByName('ID').asString;
	     qend1.ParamByName('P3').AsCurrency
                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;
	     qend1.ParamByName('P4').asString    := '0';
     qend1.ParamByName('P5').asString    := '0';
	     if LongintVar = 1 then
     begin
      qend1.ParamByName('P6').asDate      := DataConta;
     end
     else
     qend1.ParamByName('P6').asDate      := incMonth(DataConta, i-1);
     qend1.ParamByName('P7').AsString   := IntToStr(i)+'/'+ IntToStr(LongintVar);
     qend1.ParamByName('P8').AsCurrency
                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;
     qend1.ExecSQL;
     end;
	  end;
	  except
   On E: Exception do
   raise Exception.Create(E.Message);
	  end;
	     if LongintVar = 1 then
   begin
     ShowMessage('Foi Gerada ' + IntToStr(LongintVar) + ' Parcela com Sucesso');
     BitBtn_PesquisarCP.Click;
   end
   else
     ShowMessage('Foram Geradas ' + IntToStr(LongintVar) + ' Parcela(s) com Sucesso');
     BitBtn_PesquisarCP.Click;
end;

adicionado 0 minutos depois

Pessoal, consegui resolver aqui!!!

Montei uma SQL para atualizar com um c o campo fantasma que já havia na segunda tabela (DataRecebimento), este campo se tornou a data da ultima parcela com o comando MAX() de  acordo com ID e IDCONTA.

Segue o código:

procedure Tfrm_ContasAPagar.BitBtn_GerarParcaela_MovClick(Sender: TObject);
var
 qend, qend1 : TZQuery;
 LongintVar, i : Integer;
 LongintVar2, i2 : Integer;
 DataConta : TDate;
 DataUltParcela : TDate;
begin
 qend := TZQuery.Create(nil);
 qend.Connection := dm.Conect;
	 qend1 := TZQuery.Create(nil);
 qend1.Connection := dm.Conect;
	 qend.SQL.Clear;
 qend.SQL.Add(' SELECT ID, CENTRODECUSTO, VALORTOTAL '+#10+
              ' FROM CONTAS_A_PAGAR WHERE ID = '''+
 dm.qContasaPagar.FieldByName('id').asstring +''' ');
 qend.Open;
	 qend1.SQL.Clear;
 qend1.SQL.Add('SELECT IDCONTA FROM CONTAS_A_PAGAR_DETALHE '+
 'WHERE IDCONTA = '''+ qend.FieldByName('ID').AsString +''' ');
 qend1.Open;
	   LongintVar := StrToInt(edt_QtdParcelas_CP.Text);
   DataConta := StrToDate(edt_Data_CP.text);
	
 try
	  if qend1.RecordCount > 0 then
  begin
   Messagedlg('As Parcelas Já Foram Geradas Anteriormente!',mtinformation,[mbok],0);
   exit;
  end
  else
  begin
  LongintVar := StrToInt(edt_QtdParcelas_CP.Text);
  for I := 1 to LongintVar do
    begin
     qend1.SQL.Clear;
     qend1.SQL.Add(' INSERT INTO CONTAS_A_PAGAR_DETALHE      '+#10+
                  ' (CENTRODECUSTO, IDCONTA, VALOR, JUROS,   '+#10+
                  '  DESCONTOS, DATAVENCIMENTO, PARCELA, VALORDEVEDOR)     ');
     qend1.SQL.Add(' VALUES                                  ');
     qend1.SQL.Add(' (:P1, :P2, :P3, :P4, :P5, :P6, :P7, :P8)     ');
	     qend1.ParamByName('P1').asString    :=
                                     qend.FieldByName('CENTRODECUSTO').asString;
	     qend1.ParamByName('P2').asString    := qend.FieldByName('ID').asString;
	     qend1.ParamByName('P3').AsCurrency
                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;
	     qend1.ParamByName('P4').asString    := '0';
     qend1.ParamByName('P5').asString    := '0';
	     if LongintVar = 1 then
     begin
      qend1.ParamByName('P6').asDate      := DataConta;
     end
     else
     qend1.ParamByName('P6').asDate      := incMonth(DataConta, i-1);
     qend1.ParamByName('P7').AsString   := IntToStr(i)+'/'+ IntToStr(LongintVar);
     qend1.ParamByName('P8').AsCurrency
                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;
     qend1.ExecSQL;
     end;
	  end;
	  except
   On E: Exception do
   raise Exception.Create(E.Message);
	  end;
	     if LongintVar = 1 then
   begin
     ShowMessage('Foi Gerada ' + IntToStr(LongintVar) + ' Parcela com Sucesso');
     BitBtn_PesquisarCP.Click;
   end
   else
     ShowMessage('Foram Geradas ' + IntToStr(LongintVar) + ' Parcela(s) com Sucesso');
     BitBtn_PesquisarCP.Click;
end;

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...