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;
DM.FDTTSort.Next;
End;
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;