Sub form con record multipli

di il
10 risposte

Sub form con record multipli

Buongiorno,

Sto creando un database con le informazioni per ogni progetto, nella tabella progetti ho 4 campi cliente (non necessariamente tutti pieni), inizialmente avevo solo un cliente per progetto e quindi avevo fatto nella form del progetto una subform in cui legavo il child al parent per visualizzare i dati estratti dalla tabella cliente.

Mi trovo ora ad avere piu clienti per progetto e non sono sicuro di poter utilizzare una subform per l'utilizzo che mi serve. Con un cliente solo avevo creato nella subform un tasto che mi permetteva di scegliere il cliente dalla lista clienti.
Ho provato a creare un altra subform identica ma legando il child al parent per il cliente2 del progetto, ma sembra che io possa gestire solo una subform per tabella source.

Posso fare una subform che mi visualizzi la lista dei clienti? magari si può fltrare in base ai campi codcliente della tabella progetto? Ma in questo caso probabilmente non posso per ogni cliente creare un tasto per la selezione che mi modifichi il codcliente nel progetto...

Oppure semplicemente non posso più fare quello che voglio con una subform ma devo mettere i campi direttamente nella form progetto? In caso posso mandare il database

10 Risposte

  • Re: Sub form con record multipli

    La subForm ha senso se alla Tabella progetti Relazioni una Tabella in relazione 1-Molti ClientiProgetto, altrimenti è sbagliato concettualmente.
    Personalmente però farei proprio così...
    [TblProgetti](1)----(M)[TblClientiProgetto](M)----(1)[TblClienti]

    In questo modo puoi assegnare iu Clienti dall'anagrafica Clienti e Cercare o Filtrare in modo pulito senza accrocchi sui Campi Cliente1-Cliente2-ClienteN
  • Re: Sub form con record multipli

    Ok, da quanto ho capito mi stai dicendo di fare una tabella intermedia che relazioni i clienti al progetto, quindi qualcosa del genere:

    codproj cod client1 ..... codclientn

    IN questo modo ho una relazione diretta per ogni cliente al progetto, e nella tabella clienti ho invece i dati di ciascun cliente.

    Ci avevo vagamente pensato anche io, in questo modo tra l'altro non devo per forza avere n campi clienti per progetto ma avro una tabella in cui ho per ogni progetto solamente i record dei clienti esistenti.

    Confermi? grazie intanto!
  • Re: Sub form con record multipli

    Ultima cosa perche dici che ha senso solo una subform se ho una relazione 1-molti? se devo comunque specificargli un parent e un child e quindi sembrerebbe proprio concepita per relazioni 1-1?
  • Re: Sub form con record multipli

    La SubForm si relaziona alla Form attraverso i Campi Master/Secondari che sono poi i Campi Oggetto della relazione 1-M, quello che hai appena detto non ha alcun senso.
  • Re: Sub form con record multipli

    Ciao, grazie e vi chiedo ancora un po di pazienza, non sono proprio un utilizatore esperto di access:

    Ora ho le seguenti tabelle:

    TBL_clienti;
    TBL_progetti;
    TBL_clienti progetto;

    Nella tabella clientiprogetto ho solamente 2 campi: codprogetto e codcliente, la tabella quindi relazione il progetto al cliente o ai clienti se piu di uno.

    Nella form progetto ho creato una subform in cui mi vengono visualizzati i clienti, la form é basata su una query che accorpa il codcliente della taballe clientiprogetto con i dati del cliente dalla tabella clienti.

    Quello che non riesco a fare e che, nella visualizzazione a righe della subform clienti, un tasto che mi faccia aprire la tabella clienti (o meglio la form basata sulla tabella) e cliccando due colte sul cliente mi aggiorni il codcliente relativo al record della query. Ho creato il tasto ma non riesco ad aggiornare la tabella, qui sotto l evento associato al doppio click:

    Private Sub Detail_DblClick(Cancel As Integer)
    Forms!tbl_projclienti!codclient = Me!codclient
    DoCmd.Close
    Forms!tbl_projclienti.Refresh
    End Sub

    In allegato la form progetto con la subform clientiprogetto e il tasto che apre la form clienti per la selezione del cliente con doppio click, nell immagine seguente anche la vista della form clienti aperta.
    Allegati:
    29223_fcf72a852d1b3cbec2380e917724cdb9.png
    29223_fcf72a852d1b3cbec2380e917724cdb9.png

    29223_577015e3af905f98def9dc8bdd1bca65.png
    29223_577015e3af905f98def9dc8bdd1bca65.png
  • Re: Sub form con record multipli

    Piccola precisazione , allego relazioni tabelle e messaggio di errore al doppio clic per cambiare il cliente, in sostanza a causa della relazione tra codclient della tabella clientiprogetto e clienti, il comando di modifica del campo codclient mi va a modificare la tabella clienti, quindi creandomi un doppione, da qui l errore.
    Mentre il doppio click sulla form clienti dovrebbe adarmi solo a cambiare il codcliente della tabella di crrispondenza progetti-clienti (projclients), qualcuno sa come posso fare?
    Allegati:
    29223_2fdcbb0519e4242903e8d5109fa4b2e0.png
    29223_2fdcbb0519e4242903e8d5109fa4b2e0.png

    29223_5900dc28a892298b0ec100c47a36ff17.png
    29223_5900dc28a892298b0ec100c47a36ff17.png
  • Re: Sub form con record multipli

    Mi pare di capire che hai dovuto cambiare l'impostazione progettuale delle tabelle. Ciò che mostri nella Finestra Relazioni attuale è corretto. Mi permetto di consigliarti che, se hai scelto i campi CodCliente e CodProgetto come chiavi primarie, i campi ID diventano "superflui". Inoltre, dopo aver disegnato le linee di join, consiglio vivamente di mettere sempre la spunta su "Applica integrità referenziale".
    Ripartendo ora dal nuovo scenario tabelle, molte cose che avevi pensato in precedenza, saltano completamente di logica e non hanno più senso di esistere. Pertanto la migliore progettazione di maschera/sottomaschera, sta ora a te scegliere quale la più conveniente:
    Progetti/ClientiProgetti (in questo caso crei una casella combinata sul campo ClientiProgetti.CodCliente)
    oppure
    Clienti/ClientiProgetti (in questo caso crei una casella combinata sul campo ClientiProgetti.CodProgetto)
  • Re: Sub form con record multipli

    Qualora si impieghi una maschera con sotto-maschera, correttamente impostata, avviene il tutto automaticamente e non è necessario agire con codice
    Ad esempio con una maschera "Progetti" (basata sulla relativa tabella) selezionato un progetto, nella sotto-maschera è sufficiente avere la coppia (dati della tabella TBL_clienti progetto) ove è fisso il progetto ed è possibile selezionare il cliente ad esempio con una list-box che acceda alla tabella clienti.
    Sulla stessa falsariga è possibile avere una maschera clienti e, stabilito lo specifico cliente, nella sotto-maschera sarà possibile (fissato il cliente) assegnare i relativi progetti.
  • Re: Sub form con record multipli

    Grazie delle risposte,

    SI concordo sui campi ID infatti li toglierò, il problema rimane il fatto che per avere nella sottomaschera clienti progetto visualizzato anche nome e cognome (che fanno parte della tabella clienti) ho dovuto basare la sottomaschera su una queri che mi assmbla a partire dal codclient in tabella clienti progetto il cognome e nome presenti nella tabella clienti.

    Ora andando a modificare con doppioclick dalla lista clienti il campo codprogetto della sottomaschera, a causa della relazione tra la tabella clienti progetto e quella clienti mi veniva modificato anche il codcliente nella tabella clienti, da cui l errore nell'immagine sopra dove mi avvisa che non posso creare un duplicato.

    Sono riuscito a risolvere con un evento di update direttamente sul campo codclient della tabella clientiprogetto, per farlo tuttavia ho dovuto creare una chiave unica nella tabella clientiprogetto per riuscire a risalire al record da modificare a partire dal campo codclient della sottomaschera.

    Vi chiedo cortesemente se é la maniera corretta o se ci sono modi più semplici, non sono riuscito a farlo senza codice, qui sotto il comando doppioclick sulla tabella clienti e la relazione aggiornata con il campo ID nella tabella projclienti:

    Private Sub Detail_DblClick(Cancel As Integer)
    CurrentDb.Execute "UPDATE tbl_projclients SET codclient = " & Me!codclient & " WHERE ID = " & Forms!frm_projects!tbl_projclients1!ID
    DoCmd.Close
    Forms!frm_projects.Refresh
    End Sub
    Allegati:
    29223_23499f601ce232435f88d0e1acbf9375.png
    29223_23499f601ce232435f88d0e1acbf9375.png
  • Re: Sub form con record multipli

    Intervengo per una cosa rapida...
    1) non hai definito l'integraità Referenziale nelle Tabelle, perchè...? (sai cos'è l'integrità referenziale, come funziona ed a cosa serve...?)
    2) Dissemini le stesse di Campi INUTILI, come il campo ID che non ha alcun senso di esistere nelle Tabelle [Progetti] e [Clienti] dal momento che le PK poi sono altre...! Questa cosa non ha senso ma non solo è un errore di sostanza.
    3) La stessa Query UPDATE che esegui è fatta da chi NON HA IDEA di cosa sta facendo... proprio per le ragioni sopracitate ai punti 1 e 2.

    Detto questo si fa fatica a dire cosa va e cosa non va, ma di sicuro non hai le basi per capire bene i suggerimenti ne i concetti per non commettere errori concettuali e tecnici come quelli commessi... le indicazioni che ti vengono date non possono andare a buon fine.
    Quindi non ci sta sentire "se ero capace non mi rivolgevo al forum"... le basi minime sono a tuo carico e servono.
Devi accedere o registrarti per scrivere nel forum
10 risposte