Ver Mensaje Individual
  #1  
Antiguo 09-10-2024
silman silman is offline
Registrado
 
Registrado: oct 2024
Posts: 3
Reputación: 0
silman Va por buen camino
Angry Firebird, Firedac, no se graban los datos en la tabla

Espero explicarme correctamente.
Estoy haciendo un programa estadístico en cual manejo dos tablas una maestra y la otra detalle, la base de datos está en firebird y utilizo firedac para conectarme a la base de datos.
Para actualizar la tabla maestra con las incidencias recorro la tabla de detalle extraigo datos de esta y luego actualizo la tabla maestra.
Al terminar se ven los cambios reflejados en un dbgrid pero no quedan permanentes pues al salir del programa y volver a entrar las actualizaciones no han quedado grabadas en la tabla.

El código que utilizo es el siguiente:

Código Delphi [-]
procedure TFTodo.Btn_ActualizaClick(Sender: TObject);
var
  Avance, Guarda : integer;
  Top : integer;
  N0,N1,N2,N3,N4,N5, Cl : integer;
  Clasi, DeLa3,Total,Ultim,Penul,AnteP : integer;
begin

  if not DM.FDC.Connected then DM.FDC.Connected := True;
  if not DM.FDTTCombi.Active then DM.FDTTCombi.Active := True;
  if not DM.FDTTCombi.CachedUpdates then DM.FDTTCombi.CachedUpdates := True;

  if not DM.FDTTSort.Active then DM.FDTTSort.Active := True;

  Top := DM.FDTTSort.RecordCount;

  Avance := 0;
  Guarda := 0;

  PBar.Min :=0;
  PBar.Max := Top;
  PBar.Visible := True;

  Lbl_2.Visible := True;
  Lbl_3.Visible := True;

  DBNCombi.Visible := False;

  Lbl_RPro.Visible := True;
  Lbl_RPro.Caption := '0';
  Lbl_RMax.Visible := True;
  Lbl_RMax.Caption := formatFloat('###,###,###',Top);

  DM.DSCombi.Enabled := False;

  DM.FDTTSort.First;

  while not DM.FDTTSort.Eof do
  Begin
    inc(Avance);
    Lbl_RPro.Caption := formatFloat('###,###,###',Avance);
    PBar.Position := Avance;
    Application.ProcessMessages;

    N0 := DM.FDTTSortEVENT.AsInteger;
     N1 := DM.FDTTSortN1.AsInteger;
      N2 := DM.FDTTSortN2.AsInteger;
       N3 := DM.FDTTSortN3.AsInteger;
        N4 := DM.FDTTSortN4.AsInteger;
         N5 := DM.FDTTSortN5.AsInteger;
          Cl := DM.FDTTSortCLASE.AsInteger;

    if not DM.FDTTCombi.FindKey([N1,N2,N3,N4,N5]) then
    Begin
      ShowMessage(' !!! ERROR no existe ¡¡¡');
      DM.FDTTSort.Last;
      Exit;
    End
    Else
    Begin

      Clasi := DM.FDTTCombiCLASI.AsInteger;
       DeLa3 := DM.FDTTCombiDELA3.AsInteger;
        Total := DM.FDTTCombiTOTAL.AsInteger;
         Ultim := DM.FDTTCombiULTIM.AsInteger;
          Penul := DM.FDTTCombiPENUL.AsInteger;
           AnteP := DM.FDTTCombiANTEP.AsInteger;

      if Cl = 1 then inc(Clasi);
      if Cl = 3 then inc(DeLa3);

      Total := Clasi + DeLa3;

      AnteP := Penul;
       Penul := Ultim;
        Ultim := N0;

      DM.FDTTCombi.Edit;

      DM.FDTTCombiCLASI.AsInteger := Clasi;
       DM.FDTTCombiDELA3.AsInteger := DeLa3;
        DM.FDTTCombiTOTAL.AsInteger := Total;
         DM.FDTTCombiULTIM.AsInteger := Ultim;
          DM.FDTTCombiPENUL.AsInteger := Penul;
           DM.FDTTCombiANTEP.AsInteger := AnteP;

      DM.FDTTCombi.Post;
      inc(Guarda);

      if Guarda >= 50 then
      Begin
        DM.FDTTCombi.ApplyUpdates();
        DM.FDTTCombi.CommitUpdates;

        Guarda := 0;
      End;
    End; // Fin de FindKey

    DM.FDTTSort.Next;
  End; // FIn de While

  DM.FDTTCombi.ApplyUpdates();
  DM.FDTTCombi.CommitUpdates;

  Lbl_2.Visible := False;
  Lbl_3.Visible := False;
  Pbar.Position := 0;
  PBar.Visible := False;
  DBNCombi.Visible := True;

  DM.DSCombi.Enabled := True;

  DM.FDTTCombi.First;
end;

Última edición por Neftali [Germán.Estévez] fecha: 10-10-2024 a las 08:42:58. Razón: Añadir el TAGs al código
Responder Con Cita