Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    14

    [DELPHI] Master/details

    Qualcuno mi sa dire come creare delle tabelle
    master/details con delphi?
    Devono avere degli indici le tabelle??

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    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...

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    14
    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.

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    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...

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    14
    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???

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    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...

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    14
    Tutto risolto
    Ho impostato un indice nella tabella
    details con il Database Desktop....

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    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

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    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.
    Normale...

    Originariamente inviato da 123delphi321
    vorrei evitare all'utente di confermare in due momenti diversi i dati master e i dati detail.
    Per poter inserire i dati, devi eseguire prima la Post sul record di testata, poi quella sul record di dettaglio...non è possibile fare altrimenti.

    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...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.