Newsgroup: it.comp.appl.access
Titolo: Maschera con SottoMaschera (molti a molti): alcuni dubbi su cosa  inserire

Ho una relazione Molti a Molti con, da una parte, delle AUTO, e
dall'altra, i relativi PROPRIETARI.
I proprietari possono essere più di uno e saranno quasi sempre
differenti ma potrebbe ricapitare il medesimo proprietario per una
diversa auto. Da qui il tipo di relazione scelta, per la quale ho
crato una tabella AUTOconPROPRIETARI, contenente solo gli ID delle
tabelle AUTO e PROPRIETARI.
Dopodichè creerei una maschera basata sulla tabella AUTO con
sottomaschera basata su una query che prende dati dalle tabelle
AUTOconPROPRIETARI e PROPRIETARI
Ho provato un paio di soluzioni, nessuna delle
quali però mi soddisfa. Sarei pertanto grato a chi mi proponesse
qualcosa di diverso o a chi mi dicesse, in questi casi,
come ci si comporta generalmente.
Queste le mie soluzioni per la sottomaschera (visualizzazione
maschere
continue):
1)
IDProprietario (nascosto) e origine riga con COGNOME & NOME & LUOGO &
     DATA DI NASCITA
Cognome
Nome
Luogo di nascita
Data di nascita
In questo modo posso far digitare cognome e nome e mano mano access
seleziona le varie occorrenze presenti a seconda di cosa si digita. Il
difetto
è che il cognome viene ripetuto sia sulla combo, che ho tenuto
abbastanza stretta, che nella casella di testo. Non è possibile
nemmeno regolare la combo in modo che compaia solo il cognome  per
poi
affiancare 3 caselle di testo con nome, luogo e data di nascita.
Questo perchè nella combo mi occorrono tutti i dati per essere certo
di non selezionare un omonimo e se viene dimensionata stretta potrei
tagliare un cognome, se larga potrebbe comparire una parte del nome o
anche il resto.
2)
IDProprietario (nascosto) e origine riga con COGNOME & NOME & LUOGO &
DATA DI NASCITA
senza null'altro aggiungere. In questo modo, tenendo un'ampiezza
sufficiente, visualizzerei tutti i dati e potrei anche far digitare
cognome e nome e mano mano access seleziona le varie occorrenze a
seconda di cosa si digita. La soluzione però mi sembra poco elegante
(pretenzioso?) anche perchè i dati, per le differenti lunghezze di
nomi e cognomi, non vengono ben allineati.
Inoltre temo che nella digitazione di un Proprietario con due o tre
nomi (Maria Paola) o con il Cognome composto da più parti separate
(Di
Pietro o Dipietro) si possa correre il rischio di non individuare una
persona già in elenco; cosa che, inserendo i dati separatamente,
dovrebbe essere più difficile (anche se di questo non ne sono proprio
certo.
Grazie a chiunque voglia darmi una dritta, compreso Graziano & Family
che ci ha già provato ma non ha individuato il nocciolo :-)
leev
WinXP
AC03


Ciao leev,
perchè usare una relazione molti a molti dal momento che un'auto non
può avere più di un proprietario, mentre un proprietario può avere più
di un'auto? E a che ti serve una terza tabella?
La cosa più giusta da fare (secondo me) è relazionare le due tabelle
con un tipo di relazione 1 a molti, rispettivamente: ID_Proprietari
(campo con tipo dati contatore e chiave primaria della tabella
PROPRIETARI) e ID_Proprietari (campo con tipo dati numerico della
tabella AUTO).
A questo punto ti crei una prima maschera anagrafica dove poter
inserire le generalità di ogni proprietario ed una seconda maschera
con sottomaschera (puoi usare anche l'autocomposizione, l'importante è
che siano collegati nella sottomaschera i campi master: ID_Proprietari
tabella PROPRIETARI e campi secondari: ID_Proprietari della tabella
AUTO); nella maschera principale avrai solo una casella combinata
SENZA ORIGINE CONTROLLO uguale a quella che hai già creato ( vanno
bene i 5 campi con l'ID nascosto, magari aumentando la lunghezza del
campo Cognome ad esempio a 5 cm); in apertura della maschera
principale, per una visualizzazione coerente (altrimenti vedresti i
dati solo nella sottomaschera) vai ad un nuovo record:
DoCmd.GoToRecord , , acNewRec
e dopo aggiornamento della combo sincronizzi i dati:
Dim rs As Object
Set rs = Forms!MascheraPrincipale.Recordset.Clone
rs.FindFirst "ID_Proprietari = " & Me.CasellaCombinata
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
A questo punto, una volta inseriti i dati di una o più proprietà
appartenenti ad uno stesso nominativo, con un report strutturato bene
visualizzi e stampi quello che vuoi.
Poi se non ho capito bene la tua esigenza... sono qui. :-)
Ciao Vladimiro.

 - Mostra testo citato -
Ciao Vladimiro, oggi sono molto preso per cui mi riservo di rileggere
la tua risposta, più che altro per vedere se trovo qualche spunto
interessante.
Ahimè ti sbagli, un'auto può si avere più di un proprietario,
solitamente un paio (comproprietari), ma in alcuni casi sono anche 3,
4  o più. I nomi degli intestatari li si trovano riportati sia sul
libretto che sul CDP (Certificato di proprietà).
E' quindi proprio necessaria una relazione Molti a Molti.

 - Mostra testo citato -
Ok, non ero a conoscenza della comproprietà, dunque la terza tabella è
necessaria per creare una relazione molti a molti.Vediamo di fare un
ripasso, in modo da poter affrontare il problema che esponi:
Tbl_Proprietari con i campi ID_Proprietario (contatore e chiave
primaria), Cognome, Nome, Luogo ,Data_di_nascita
Tbl_Auto con i campi ID_Auto (contatore e chiave primaria),
Tipo,Targa,Prezzo, ecc...
Tbl_Proprietari_Auto con i campi ID_Proprietario (numerico e chiave
primaria), ID_Auto (numerico e chiave primaria), Data_Acquisto, ecc...
Relazioni:
ID_Proprietario (Tbl_Proprietari) 1 a molti ID_Proprietario
(Tbl_Proprietari_Auto)
ID_Auto (Tbl_Auto) 1 a molti ID_Auto (Tbl_Proprietari_Auto)
va bene fin qui?
Ciao Vladimiro

 - Mostra testo citato -
Tutte esatto tranne:
Per la Tbl_Proprietari_Auto  ho preferito aggiungere un campo ID
(contatore e chiave primaria)  e i campi da te citati ID_Proprietario
(numerico), ID_Auto (numerico), senza altri dati (Data_Acquisto,
ecc...) per motivi vari.
;-)

 - Mostra testo citato -
Non so a che ti possa servire il campo ID nella tabella di
collegamento Tbl_Proprietari_Auto escudendo le altre due chiavi
primarie; in questo modo rischi di ripetere più volte uno stesso
proprietario su una singola auto.
Comunque, continuando il discorso:
Ti servirà una maschera basata sulla Tbl_Auto per inserire i dati di
ogni singola auto e all'occorrenza una maschera basata sulla
Tbl_Proprietari per inserire i dati anagrafici di ogni singolo
cliente. Fatto ciò, bisogna vendere le auto per intestarle ad uno o
più proprietari che andremo a scegliere nella Tbl_Proprietari.
Creiamo una maschera principale basata sulla Tbl_Auto ed una
sottomaschera basata sulla tabella di collegamento
Tbl_Proprietari_Auto in cui metteremo solo una casella combinata con
origine controllo ID_Proprietari e origine riga una query basata sulla
Tbl_Proprietari (identica a quella che hai fatto tu: ID_Proprietari
nascosto ecc... l'importante è visualizzare bene tutti i campi nel
momento della scelta); fatto ciò, con una semplice query basata su
tutte e tre le tabelle (già relazionate) potremo visualizzare tutti i
dati che ci interessano.
Ciao Vladimiro.