Newsgroup: it.comp.appl.access
Titolo: Sottomaschere e collegamento campi. Qulache problema

Allora, come da oggetto....
Ho due tabelle, Fatture e Clienti. La prima contiene i dati di ogni
fattura (data, importi) e un Campo IDCliente che corrisponde all'ID
della tabella Clienti. Quest'ultima contiene i dati anagrafici del
cliente
La maschera principale ha come origine dati Fatture e i controlli
mostrano i dati relativi, e la sottomaschera è collegata con il campo
IDCliente e mostra i dati di quest'ultimo
Funziona, almeno finché si scorrono le varie fatture e
contemporaneamente appaiono i dati anagrafici del cliente.
Però mi succede questo:
Quando voglio creare una nuova fattura, io seleziono da una combo che
riporta i nomi del clienti quello che mi interessa. A questo punto
devo caricarmi i relativi dati. Io procedo così:
Private Sub cboNominativo_AfterUpdate()
 
  Me.txtIDCliente = Me.cboNominativo
E a questo punto ho caricato l'ID del cliente nel record (nel
controllo)
Per caricare i dati nella sottomaschera come si fa?
Io ho fatto così: 
 
Forms!frmFattura.subfrmClienti!txtTitolo = DLookup("Titolo",
"Clienti", "[Clienti].[ID]= " & Me.cboNominativo)
  Forms!frmFattura.subfrmClienti!txtNome = DLookup("Nome", "Clienti",
"[Clienti].[ID]= " & Me.cboNominativo)
  Forms!frmFattura.subfrmClienti!txtCognome = DLookup("Cognome",
"Clienti", "[Clienti].[ID]= " & Me.cboNominativo)
  Forms!frmFattura.subfrmClienti!txtCodiceFiscale =
DLookup("CodiceFiscale", "Clienti", "[Clienti].[ID]= " &
Me.cboNominativo)
  Forms!frmFattura.subfrmClienti!txtPartitaIVA = DLookup("PartitaIva",
"Clienti", "[Clienti].[ID]= " & Me.cboNominativo)
  Forms!frmFattura.subfrmClienti!txtIndirizzo = DLookup("Indirizzo",
"Clienti", "[Clienti].[ID]= " & Me.cboNominativo)
  Forms!frmFattura.subfrmClienti!txtCap = DLookup("Cap", "Clienti",
"[Clienti].[ID]= " & Me.cboNominativo)
  Forms!frmFattura.subfrmClienti!txtCittà = DLookup("Città",
"Clienti", "[Clienti].[ID]= " & Me.cboNominativo)
  Forms!frmFattura.subfrmClienti!txtProvincia = DLookup("Provincia",
"Clienti", "[Clienti].[ID]= " & Me.cboNominativo)
End Sub  
Cioè con DLookUp ho prelevato i dati e li ho messi nella sottomaschera
Ma non va bene.
Il casino che ho creato è che nella tabella Clienti si è replicato il
record del cliente, MANTENENDO PER GIUNTA LO STESSO ID!!!
Cioè mi ritrovo due, tre, dieci volte lo stesso identico record.
Non vi dico il casino
E' chiaro che ho sbagliato, evidentemente inserendo i dati di forza
nella sottomaschera li ho inseriti (reinseriti) anche nella tabella.
Va bé, ho toppato. Però la domanda è allora come si fa?
Cioè, selezionato il cliente per la nuova fattura, come si richiamano
nella sottomaschera i dati di quel cliente?
Spero di essere stato chiaro.
Grazie a chi mi potrà aiutare
Filippo


Come hai relazionate le due tabelle?
Secondo me hai sbagliato la formazione delle maschere.
se ho capito bene ogni fattura scorre il cliente......così se un cliente ha
dieci fatture il suo nome è memorizzato dieci volte. devi fare esattamente
al contrario.
le due tabelle dovrebbero essere così:
tblClienti         tblFatture
idcliente            idfattura
ecc.                   idcliente
relazione uno a molti tramite idcliente
se ho capito il tuo problema comincia così che poi passiamo a risolvere gli
altri.
saluti Daniele
---


wrote:

No, non è così.
Se un cliente ha 10 fatture è memorizzato una volta sola, ovviamente,
nella tabella cliente. Le dieci fatture (i 10 record della tabella
fatture avranno tutti lo stesso IDCliente
Le tabella sono relazionate correttamente
Grazie, e per il resto?
Filippo

Aggiungo, perché non l'ho detto, che i dati del cliente sono per
questa mia utility Read Only, nel senso che li prelevo ma non li
modifico (per fare questo uso un altro programma e non voglio
cambiare)
Le due tabelle Fatture e Clienti non sono collegate, perché non mi
serve (tra l'altro risiedono su due computer diversi, seppure in rete)
Ho solo bisogno di leggere i dati del cliente a video (e poi
stamparli, va bé)
Il problema rimane: se seleziono da combo il Cliente (per una nuova
fattura) come prelevo i suoi dati e li mostro nella sottomaschera?
Grazie
Filippo

 ha scritto nel messaggio
news:79q9dvcf0amhildg4...@4ax.com...

Presuppongo che le due tabelle siano in relazione uno-a-molti in base ai
rispettivi campi IDCliente.
E' naturale che in questa relazione la tabella clienti è sul lato 1 della
reazione e la tabella fatture è sul lato molti della relazione.
Se le cose stanno così, in una struttura maschera/sottomaschera Access
prevede che come origine record della maschera principale si abbia la
tabella del lato 1 della relzione uno-a-molti (nel tuo caso la tabella
Clienti) e come origine record della sottomaschera l'altra tabella (nel tuo
caso la tabella Fatture) e non al contrario come hai fatto tu; insomma tu
puoi solo creare una maschera principale che visualizzi un cliente e che
contienga una sottomaschera che visualizzi tutte le fatture di quel cliente;
gli automatismi Access della tecnica maschera/sottomaschera, gestiti tramite
le proprietà Collega campi secondari e Collega campi master, non funzionani
più se usi la tabella del lato molti come origine record della maschera
principale e la tabella del lato 1 come origine record della sottomaschera.
Se poi il tuo problema è quello di visualizzare una fattura e i dati del
relativo cliente, a mio avviso non devi crearti una maschera/sottomaschera,
ma semplicemente una maschera basata sulla tabella Fatture e poi, con
l'ausilio de funzioni DLookup, visualizzare un caselle di testo non
associate i dati del cliente.
Oppure puoi crearti una query nella quale metti in Inner Join la tabella
Fatture con la tabella Clienti e poi ti crei una maschera che abbia come
origine record la query.
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:peq9dvsn9apjlu3k3...@4ax.com...

Pensavo ad una cosa del genere su dopo aggiornamento della tua combo, che
avrà come origine riga una query alimentata dalla tabella clienti.
Me.IDCliente = Me.CasellaCombinata19.Column(0)
Me.Cognome = Me.CasellaCombinata19.Column(1)
ecc.
evidentemente non ho afferrato il tuo problema :-(
saluti Daniele



Spiegazione chiarissima.
Come ho specificato nell'atro post, le tabelle non sono collegate,
semplicemente mi serviva prelevare i dati del Cliente e mostrarli a
video, senza manipolarli.
Poerò ho capito che non si può fare con le sottomaschere.
Probabilmente userò la query con Inner Join,  che forse è più veloce
di DLookUp.
Comunque grazie
Filippo

 Filippo
