Newsgroup: it.comp.lang.delphi
Titolo: [ZeosLib][FB2.1] corretto uso delle Foreign Key

Salve,
   spero di comprendere il giusto uso delle Foreign key:
Per il momento tralasciamo le transazioni.
Ho questo scenario:
Master-Detail
Master ha "CachedUpdates" settato a False
Detail ha "CachedUpdates" settato a True
Nel BeforePost di Master eseguo il Detail.ApplyUpdates e tutto funziona.
Se a Detail applico una Foreign Key con riferimento al campo chiave di 
Master, al momento del Detail.ApplyUpdates viene sollevata una eccezione 
perché non è ancora presente la chiave primaria del record Master.
Da quello che ho capito, leggendo vari documenti in rete, nelle 
situazioni Master-Detail è utile avere una foreign key ma, come faccio?
Non riesco a capire come posso usare una Foreign Key.
Utilizzo FB 2.1 con le ZeosLib 6.6.6
Grazie, ciao.

 situazioni Master-Detail è utile avere una foreign key ma, come faccio?
La foreignkey è un constraint.
Se dici che n record di b sono collegati an un record a, il record a
DEVE ESISTERE.
L'utilita' di questa cosa e' legata alla integrita referenziale:
1) Non puo' esistere una riga di fattura se la fattura non esiste
2) Non può esistere un recapito per un contatto che non esiste
3) se cancello una fattura devo cancellare tutte le relative righe
ect etc etc
La sequenza dovrebbe essere:
1) salvo record master
2) salvo gli n record di dettaglio.
Quindi comincia con lo spostare da beforepost ad *afterpost* il save
delle righe di dettaglio.
A.



Sembrava anche a me la soluzione ma, succede che nello stesso istante in 
cui viene postato il master, tutti gli UpdatePendings del detail vengono 
annullati automaticamente (qui Detail.UpdatesPending è False) e 
Detail.ApplayUpdates non sortisce alcun effetto!
E' per questo che non riesco a capire, e non so trovare documenti in 
rete per chiarirmi le idee.
Grazie, ciao.


Ho trovato il riferimento ad un bug delle ZeosLib non ancora risolto che 
descrive all'incirca il mio problema.
Ecco spiegato l'arcano.
Grazie a tutti, ciao.

 Non riesco a capire come posso usare una Foreign Key.
Detto questo, ï¿œ ovvio che se tu tenti di salvare un record di detail 
prima di aver salvato il master ti verrï¿œ sputata un'eccezione dal database.
Il fatto che nel BeforePost del Master il salvataggio del detail 
funzionava prima di mettere la FK ï¿œ dovuto proprio alla mancanza di 
integritï¿œ del DB. Ma non significa che fosse corretto, nï¿œ che fosse il 
giusto approccio all'uso delel ZeosLib.
L'unico modo per mantenere integro il database con le FK impostate ï¿œ 
quello di salvare PRIMA il record Master e poi tutti i suoi Detail. In 
effetti, che senso ha avere le righe di una bolla se non c'ï¿œ la testata?
Per riassumere, non ï¿œ che ci sia un modo per usare le foreign key, ma 
casomai l'uso delle FK ï¿œ in genere auspicabile per mentenere 
l'integritï¿œ del database. Poi ci si puï¿œ chiedere come si debba fare per 
salvare i dati in presenza di questi vincoli.
I metodi sono vari, e si puï¿œ usare o non usare il CachedUpdates (che io 
personalmente prediligo); in genere si tratta di un comportamento 
"generale", dunque andrebbe applicato a tutte le entitï¿œ.
HTH come inizio
-- 
byez
Piero

Questa cosa potrebbe aiutare anche altri....
un link?
A.


Ciao.