Newsgroup: it.comp.appl.access
Titolo: automatizzare gli inserimenti

ho 3 tabelle T_EVENTI, T_PROTAGONISTI, T_GIUDIZIO
T_EVENTI contiente, DATA, COMUNE
T_PROTAGONISTI contiene, ID, COGNOME, NOME,DATADINASCITA, IDT_E
T_GIUDIZIO contiene, CATEGORIA, GIUDIZIO, IDT_E, IDT_P (questi due ultimi 
campi sono chiavi esterne delle due tabelle precedenti)
con delle maschere a catena
dalla tabella eventi inseriso i protagonisti (filtrando sull'id degli 
eventi) e dalla tabella protagonisti inserisco i giudizi (Filtrando sulla 
tabella protagonisti) i giudizi li inserisco con due caselle di testo a 
catena
le due chiavi esterne servono perchè dalla tabella eventi posso anche 
inserire direttamente i giudizi (quelli che non devono essere legati ai 
protagonisti)
vorrei fare in modo, magari con un casella di controllo di associare il 
giudizio dato ad un protagonista anche a tutti gli altri legati all'evento
cioè se spunto la casella di controllo a sì, dopo che ho inserito la mia 
lista di protagonisti ed ho dato il giudizio p.e. "BUONO"al primo, vorrei 
che anche tutti gli alti avessero BUONO senza
bisogno di inserirlo per tutti.
se invece la casella è a no, allora lo faccio manualmente perchè è diverso 
per ognuno 

 per ognuno
Intercetti l'evento afterupdate del controllo che contiene il
giudizio, controlli che la casellina sia a "SI" (meglio ancora: appare
una finestra "Estendere il voto a tutti i protagonisti
dell'evento?",vbYesNo+vbQuestion, altrimenti e' matematico che prima o
poi ti dimentichi di togliere la spunta alla casellina...), e in caso
affermativo fai girare un semplice SQL...
"UPDATE T_GIudizio SET Giudizio='" & me.ctlGiudizio & "' WHERE IDT_E="
& me.ctlEvento & " AND Giudizio IS NULL"
Grazie al "and giudizio is null" puoi anche dare un voto a tutti
quelli che si sono distinti nell'evento, e poi andare a riempire con
un voto uguale per tutti quelli che han fatto massa :D
(questo funziona se normalizzi tutto come ho scritto sopra, altrimenti
le cose si complicano un pelo e bisogna tirare in ballo la tabella
Protagonisti)
cia'
Max


c'è qualcosa che non mi torna (ma questo per me non è una novità)
ad ogni evento possono partecipare anche le stesse persone.
ma ogni evento è indipendente dall'altro, non ha alcuna relazione
per me era normale inserire di nuovo i protagonisti nel caso di un
nuovo evento
non riesco ad immaginare una soluzione diversa
e come farei a inserire il protagonista se nella tabella non c'è
IDT_E, come lo lego agli eventi
A questo punto avrei bisogno di qualche indicazione in più
sull'impostazione del db tenendo presente
che il giudizio può essere legata ai protagonisti  ma anche solo
all'evento
cioè io posso attribuire un giudizio al protagonista "BUONO"
ma anche solo all'evento "BUONO" in questo caso il protagnonista non
c'è ecco perchè vado direttamente al giudizio
con le due chiavi esterne mi sebrava di aver risolto il problema

 c'è ecco perchè vado direttamente al giudizio
Questa parte mi sfugge... secondo me bisognerebbe gestirla sempre
nella tabella "Partecipazioni", prevedendo un campo "Ruolo" nel quale
inserire "Protagonista","Comparsa","Ruolo secondario" ecc.
in questo modo puoi rapidamente sapere quante volte il signor Rossi e'
stato protagonista, che votazioni ha preso come protagonista, quante
volte comparsa ecc.
Non capisco la parte dell' "evento BUONO", per come la vedo io il voto
e' correlato alla persona, non all'evento: se l'evento e' buono, si
assegna un "BUONO" a ciascun partecipante... ma senza sapere quali
sono le esigenze e le finalita' trovo difficile approfondire.
cia'
Max


se volessi conservare questa struttura,
come faccio a inserire nella tabella T_giudizio, lo stesso giudizio
attribuito nella maschera Giudizi a tutti i protagonisti inseriti
nella maschera protoganisti

 nella maschera protoganisti
Boh, a me pare un caos, comunque...dovresti fare qualcosa del tipo
INSERT INTO T_Giudizio (Giudizio, IDT_E, IDT_P) SELECT forms!
NomeMaschera!ctlGiudizio, T_Protagonisti.IDT_E, T_Protagonisti.IDT_P
FROM T_Protagonisti WHERE IDT_E=forms!NomeMaschera!ctlEvento AND NOT
IDT_P IN( SELECT IDT_P FROM T_Giudizio WHERE IDT_E=forms!NomeMaschera!
ctlEvento )
In altre parole:
accodi alla t_giudizio un record contenente il giudizio e IDT_E presi
dalla maschera aperta, e l' IDT_P preso dalla tabella T_Protagonisti,
filtrando solo i protagonisti che hanno IDT_E corrispondente a quello
presente nella maschera aperta, e togliendo quelli che per l'evento
corrente hanno gia' una valutazione. Naturalmente NomeMaschera e' la
maschera con la quale stai lavorando, ctlEvento e ctlGiudizio sono i
controlli associati ai campi evento  e giudizio.
cia'
Max


INSERT INTO T_GIUDIZIO (CATEGORIA, GIUDIZIO, ID_P, ID_E )
SELECT FORMS!M_GIUDIZIO!CATEGORIA AS Espr1, FORMS!M_GIUDIZIO!Giudizio AS 
Espr2, T_protagonisti.ID, T_protagonisti.ID_F
FROM T_protagonisti
WHERE (((T_protagonisti.ID)=[FORMS]![M_protagonisti]![ID]) AND 
((T_protagonisti.ID_F)=[FORMS]![M_protagonisti]![ID_F]));
Con questo istruzione Sql, che è l'adattamento alle mie esigenze del 
suggerimento di rocciamax sopra indicato, effettivamente riesco ad 
aggiungere i dati nella tabella T_giudizio ma non nel
modo in cui servono a me.
c'è un piccolo problema infatti: io ho bisogno di aggiungere l'ID del 
protagonista per tutti i partecipanti all'evento che ho già a video nella 
maschera M_protagonisti.
in questo modo io invece posso aggiungere un solo record tra l'altro che ha 
lo stesso ID del protagonista iniziale
potrei provare con (T_protagonisti.ID)=[FORMS]![M_protagonisti]![ID]+1) ma 
pure se funzionasse come faccio a dire quanti protaginisti ci sono nella 
maschera e quindi per quante volte deve essere incrementato l'ID?
HO USATO QUESTO POST UN PO' DATATO SPERANDO CHE SIA POSSIBILE ANCORA ESSERE 
COMPRENSIBILE.
Se così non fosse proverò a spiegare tutto da capo in un nuovo post