Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: mizar - Luglio 21, 2015, 11:55:26 am

Titolo: Master Detail con CachedUpdates
Inserito da: mizar - Luglio 21, 2015, 11:55:26 am
(fpc 3.0.1 lazarus svn 49556M zeos 7.2.0 beta)

Ho in una form una relazione Master/Detail tramite 2 ZQuery (collegate al solito modo, con Detail.DataSource al DS del Master) che hanno CachedUpdates a true in modo da lasciare la possibilità di modificare i dati in locale e poi al click su un pulsante "Salva" di immettere le modifiche nel db con un unica transazione:

Codice: [Seleziona]
  Zconn1.AutoCommitt:= true;
  Zconn1.StartTransaction;
 
  ZqryDetail.ApplyUpdates;
  // ZqryDetail.CommittUpdates;

  ZqryMaster.ApplyUpdates;
  // ZqryMaster.CommittUpdates;

  Zconn1.Committ;

Il problema nasce dopo aver editato qualche campo sia del Master che del Detail, quando si fa il post del Master, la query di Detail viene riaperta prendendo i dati dal db e quindi perdendo le modifiche nella cache del Detail (indipendente dal fatto che sia sia fatto correttamente post su tutti i record di dettaglio).

Come si ovvia ?

Grazie fin d'ora.

p.s. non ho ancora visto cosa succede nell'Append con la primary key autoincrementante  ;)
Titolo: Re:Master Detail con CachedUpdates
Inserito da: schumi - Luglio 22, 2015, 09:03:49 am

ho trovato questo esempio che forse ti può essere utile:

Citazione
With DataSet do
 Begin
bEverythingOK := True;
CachedUpdates := True;
DataSet.First;
While (not DataSet.EOF) and (bEverythingOK) do
 Begin
DataSet.Edit;
:
// process record
:
DataSet.Post;
DataSet.Next;
:
bEverythingOK := AFunctionForValidation;
 End;
If bEverythingOK Then
 Begin
ApplyUpdates;
CommitUpdates;
 End
Else
CancelUpdates;
CachedUpdates := False;
End;