Newsgroup: it.comp.appl.access
Titolo: uno a molti

da questa mattina che sbatto a capire le basi per imparare ma non ci
sono riuscito.
A scopo eclusivamente educativo ho creato du tabelle:
TbAUTORE:
IDautore
Cognome
Nome
TbLIBRI:
IDLibro
Titolo
IDautore
Ho creato la relazione uno a molti e le due maschere basate sulle due
tabelle.
Nella maschera AUTORE ho creato un pulsante che esegue la classica
DOcmd.openform ......con relativo criterio (idautore uguali) che mi
apre la maschera LIBRI per mettere il Titolo ma
quando vado a salvare mi dice che IDautore non può avere un valore
null e lo metto manualmente,vedendolo
dalla maschera AUTORE, oppure non salvae l'operazione non riesce.
La domanda : essendo due tabelle collegate correttamente,
LIBRI.idautore non deve crearsi automaticamente?
So che tutto si può fare in modo diverso e migliore e forse mi
complico la vita,ma gradirei sapere come fare a far
funzionare tutto in questo modo.
      Grazie mille

 ha scritto nel messaggio 
news:d52de38e-aff1-4217...@y30g2000yqb.googlegroups.com...


      Grazie mille
Come fa lui a sapere quale id autore mettere nella tabella libri?
sei tu che lo devi inserire tra gli id esistenti in tabella autori
quando apri la form libri, lo fai in modalità aggiungi record immagino no?
scrivi tu esplicitamente via codice l'id che sta nella form autori, 
nell'appposito campo id autore della maschera/tabella libri
Antonio 

 ha scritto nel messaggionews:d52de38e-aff1-4217...@y30g2000yqb.googlegroups.com...

Grazie per la risposta.La spiegazione mi è chiara.
Pero,essendo neofita, non riesco a capire come tradurre tutto questo
in codice.

 - Mostra testo citato -
Secondo me, ti conviene mettere nella maschera LIBRI una casella
combinata. La casella avrà come origine riga la tabella TbAUTORE, la
colonna associata sarà la 1 (corrisondente a IDautore) e avrà tre
colonne, la prima larga 0 e le altre due quanto ti pare. Immagino che
la tua maschera abbia i campi associati a quelli della tabella
TbLIBRI. Ebbene, la casella combinata la associ a IDautore (è la voce
Origine controllo).
Quando scrivi il record, il codice IDautore sarà scritto
correttamente.
Il vantaggio di una casella combinata è che hai automaticamente
l'elenco degli autori esistenti e basta un click per immettere il
codice giusto, senza doverselo andare a cercare: basta aprirla.
Seconda possibilità.
Invece di una casella combinata hai una normale casella di testo che
si chiama, poniamo, cAutore, associata a IDautore. Nella maschera
AUTORE avrai, immaginiamo, le caselle cID, cCognome e cNome. Allora,
nel tuo codice, dopo la OpenForm, aggiungi:
Forms!LIBRI!cAutore = Forms!AUTORE!cID
Ecco fatto. Naturalmente, devi scrivere i nomi che tu effettivamente
usi.
Per informazioni su come fare riferimento a oggetti nelle maschere,
l'Help di Access è  piuttosto chiaro, come su molti altri argomenti
(non tutti: sto ancora cercando di capire a che caratteristica
corrisponde l'evento Initialize).
Buon lavoro
Riccardo Baldinotti


ho seguito il tuo consiglio quello di aggiungere Forms!libri!idAutore
= Forms!AUTORE!IDautore che onestamente avevo già provato,e succede
una cosa incredibile:
quando dalla maschera "autore" apro con pulsante la maschera "libri"
mi fa inserire il titolo e tutto il resto, poi ho messo un pulsante
"Salva" con cui salvo e chiudo.
Quando apro di nuovo la maschera "libri" il titolo e l'editore che
avevo inserito,in corrispondenza di quell'autore, non ci sono più.
E poi,ancora più incredibile, se vado nella tabella "libri" da cui ho
costruito la maschera,vedo tutti i dati inseriti eccetto IDautore.E
ancora se idautore lo inserisco manualmente
nella tabella poi con le maschere finalmente funziona tutto alla
perfezione.Sinceramente non ci sto capendo più niente.

 - Mostra testo citato -
Ma la casella, è collegata al campo? Che codice usi nel comando salva?
Riccardo Baldinotti


Si,tutti i controlli sono associati,ci sono due tabelle e due maschere
ognuna creata sulla tabella mettendo tutti i campi.
Uso DoCmd.Save


In poche parole devo insegnare in una classe, come si apre una nuova
maschera da maschera attiva e immettere informazioni che riguardano la
maschera già aperta.
A fini didattici Nella maschera "Autore" ho creato un pulsante che su
click esegue :DoCmd.OpenForm "libro", , , "[idautore]= " & Me!
IDautore.
Tutto funziona bene solo che i dati che immetto in questa maschera che
apro(libri) anche se li salvo,dopo successiva riapertura, vengono
persi, ma non nella tabella sottostante dove sono presenti eccetto
idautore.(se lo introduco manualmente funziona tutto).
Comunque ti ringrazio per il tempo che stai perdendo.

 - Mostra testo citato -
Una prima ipotesi è che nella struttura di TbLIBRI il campo idautore
sia Indicizzato (duplicati non ammessi).
Ma  come te la cavi se un autore ha più titoli?
E poi, stai parlando di una maschera che visualizza un libro esistente
o di una in cui inserisci i dati di un libro nuovo?
Intanto sto facendo delle prove.
Riccardo Baldinotti


la prima risposta è Si :  idautore della tabella "libri" è
indicizzato(duplicati non ammessi)
Questo non deve essere undatabase ufficiale,perchè capisco che si può
fare molto meglio,deve essere solo un esempio da applicare in
applicazioni
più complesse.Se lo desideri te lo posso inviare,tanto sono pochissimi
kb,ma penso che lo hai già riprodotto,si fa in due minuti.
Quindi la risposta alla senda domanda è: quando apre la maschera libri
non visualizza un libro esistente, ma lo devo inserire io e poi
salvarlo.
Insomma lo scopo finale non è costruire un'applicazione ma spiegare
come si possono inserire informazioni su un soggetto, in un'altra
maschera collegata alla prima in 1-molti.
Per esempio potrebbe essere (per spiegarmi meglio)che io metto su una
maschera l'anagrafica di un cliente ,poi con un pulsante apro un'altra
maschera e metto tutti gli ordini di quel cliente e questi devono
rimanere registrati per sempre nel database.
spero di aver  reso l'idea.(lo so che si potrebbe fare più facilmente
con una sottomaschera o altri metodi) ma a me interessa che i dati li
devo inserire in una maschera che apro ,inserisco e salvo.
Ciao

 - Mostra testo citato -
Che versione usi di Access?
Riccardo Baldinotti


Access 2007


Ciao Riccardo, questa volta (una vola tanto) intervengo per dirti che
dopo circa 100 combinazioni provate ho trovato la quadratura.
Innanzitutto ti dico che forse si tratta di un bug di access,poi tu
che sei più esperto lo verificherai.
Passiamo alla soluzione :sull'evento click del pulsante bisogna
inserire queste du righe di codice:
DoCmd.OpenForm "libro", , , "[idautore]= " & Me!IDautore
Forms!libro!IDautore = Forms!autore!IDautore
Se non c'è il secondo rigo non funziona niente.
Il secondo rigo è un tuo suggerimento.
Poi il pulsante di chiusura sulla maschera "libri" deve essere una
macro incorporata e non codice VBA.
http://allenbrowne.com/bug-01.html
 : a questo indrizzo troverai la
spiegazione del problema e la soluzione.
Grazie per la tua decisiva collaborazione e buon lavoro.