Qualcuno mi sa dire come creare delle tabelle
master/details con delphi?
Devono avere degli indici le tabelle??
Qualcuno mi sa dire come creare delle tabelle
master/details con delphi?
Devono avere degli indici le tabelle??
Il termine master/detail non si riferisce propriamente alla struttura di una tabella, quando ad una relazione tra le due tabelle pensata dal programmatore.
Ad esempio, creando un applicativo di memorizzazione fatture, possiamo introdurre una tabella di testata e una di dettaglio; la prima contiene le fatture memorizzate, la seconda contiene le righe di tutte le fatture contenute nella prima tabella.
La relazione avviene collegando due campi tra loro: ciascuna testata di fattura avrà un ID univoco (un campo contatore autoincrementale), così come ogni riga di dettaglio.
Tra i campi di ciascuna riga di dettaglio deve esserci anche un campo contenente l'ID della testata della fattura.
Questo campo consente di porre in relazione due tabelle definendo la tabella di testata come "master" e la tabella di dettaglio come "detail"; la relazione si concretizza nell'uguaglianza tra il campo TESTATA.ID e DETTAGLIO.IDTESTATA.
Per ottenere questo legame in Delphi, devi appoggiare i componenti relativi alle due tabelle sul form (o in un Data Module); successivamente, devi impostare la proprietà MasterSource del componente che rappresenta la tabella di dettaglio facendola puntare al componente che rappresenta la tabella di testata. Attraverso la proprietà MasterFields, puoi definire i campi che devono essere associati tra di loro per costituire la relazione.
Fatto questo, quando aprirai entrambe le tabelle, i record di dettaglio saranno filtrati in base al record di testata selezionato.
Non è obbligatorio che le tabelle abbiano indici definiti...ma sarebbe meglio per velocizzare le ricerche.
Ciao!
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Se clikko sul pulsante con i puntini di MasterFields compare una finestra Field Link Designer...ma non riesco a creare delle relazioni.
Il campo di destra è vuoto (perchè????:master, mentre in quello di sinistra ci sono i nomi dei campi del database details.
Non hai assegnato il MasterSource!
Oppure non hai assegnato un DataSet (tabella) al componente DataSource a cui è collegata la proprietà MasterSource.
Ciao!
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
I componenti ci sono tutti?!?!?!?!?!
Sono in possesso di una guida "completa" a delphi 4
dove fa un esempio sul master/details usando order.db
e customer.db del database DBDEMOS.
Prima di impostare la relazione in MasterFields
seleziono una voce in Aviable Index.
Nel mio prog Aviable Index è vuoto, dipende da questo???
Ripeto...tutte le osservazioni fanno sospettare che tu non abbia associato ad ogni componente il componente tabella relativo.
Hai provato ad aprire i componenti Table impostando la proprietà Active a True? Se questa operazione va a buon fine, allora puoi iniziare ad associare DataSource ai componenti e procedere, altrimenti devi controllare la corretta associazione di ogni componente Table con la tabella fisica del database.
Ciao!
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Tutto risolto
Ho impostato un indice nella tabella
details con il Database Desktop....
salve,
ho due IBtabelle, master/detail
nel momento che premo il pulsante 'nuovo' preparo 2 ibdataset vuoti, il primo x l'inserimento del master e il secondo x detail.
genero automaticamente, tramite una view, il valore progressivo IDMaster.
nel momento che confermo 1 record nel IBdataset Detail viene generato un errore di violazione su foreign key, inquanto sul dataset detail e' definita una chiave che lega il record detail al record master.
questo succede inquanto non ho ancora confermato i valori della testata, ma bensi, sono ankora presenti solo nel dataset e non nella tabella Master.
vorrei evitare all'utente di confermare in due momenti diversi i dati master e i dati detail.
avete qualche suggerimento?
grazie
Normale...Originariamente inviato da 123delphi321
nel momento che confermo 1 record nel IBdataset Detail viene generato un errore di violazione su foreign key, inquanto sul dataset detail e' definita una chiave che lega il record detail al record master.
Per poter inserire i dati, devi eseguire prima la Post sul record di testata, poi quella sul record di dettaglio...non è possibile fare altrimenti.Originariamente inviato da 123delphi321
vorrei evitare all'utente di confermare in due momenti diversi i dati master e i dati detail.
Il massimo che puoi fare è evitare l'uso di controlli data aware e gestire manualmente il processo di inserimento dei dati.
Io comunque non ci vedo nulla di strano nel gestire l'inserimento in due fasi: basta non farsene accorgere dall'utente, magari utilizzando la stessa finestra di dialogo. Io generalmente rendo invisibili i controlli per i dettagli e quando l'utente conferma la testata, solo allora li rendo visibili e in primo piano, usando un controllo a pagine oppure modificando le dimensioni della finestra.
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...