Newsgroup: it.comp.appl.access
Titolo: Check list in access

Ciao
volevo inserire nel mio db una checklist siffatta:
ho una tabella che contiene ad esempio un elenco di aziende
ID contatore
Nome  azienda  testo
ecccc..
per ogni azienda dovrei compilareuna check list con mettiamo una 50 ina di
domande
alle quali se si verifica la condizione descritta dalla domanda spunto una
casella di controllo.
Poi dovrei con una query estrarre le domande che hanno avuto risposta
affermativa
e visualizzarle in una maschera o in un report.
Avevo provato a creare tabella con
id
codice azienda relazionato con id azienda
domanda 1 si/no
domanda 2 si/no
.......
Il problema č che poi dovrei fare 1 query inserendo tutti i campi per ogni
domanda e impostando come criterio che siano = a sě
Inoltre avrei voluto associare a domanda 1 il testo della domanda che č +
lungo dello spazio consentito come titolo per ogni campo.
Il sistema da me provato non funziona e non ha senso insomma.
Vi viene in mente qualcos'altro?
grazie anticipatamente
Andrea

Andrea ha scritto:

Fai una tabella "domande" con due campi: Codice domanda e testo domanda.
Poi una tabella "risposte" con 3 campi, dove associ le aziende, un
riferimento alle domande e la risposta:
Cod azienda
Cod domanda
Risposta (si/no)
Questo sistema č molto flessibile e ti consente di fare statistiche e
applicare i criteri piů facilmente, inoltre se cambi il numero delle
domande non hai bisogno di modificare la struttura della tabella
"risposte".
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio
news:brk7bt$n7e$1...@news.newsland.it...

grazie per la risposta.
il sistema da te proposto č corretto ma mi rimangono alcuni dubbi.
Cercherň di spiegarmi meglio
L'utilizzatore che inserisce poi i dai del db dovrebbe secondo le mie
intenzioni trovarsi davanti all'elenco delle domande e per ognuna di queste
dare una risposta sě/no
Una volta effettuato ciň con una query estraggo solo le risposte sě o solo
le risposte no.
A livello di interfaccia utente come dovrei impostarlo il sistema da te
proposto?
Io immgino che da 1 maschera con il nome azienda ne apro un'altra con tutte
le domande in cui do le risposte, perň le domande devono esserci giŕ.
La tabella di appoggio che tu mi proponi č correttissima per quanto riguarda
la registrazione della risposta alle domande.
Il mio problema rimane l'interfaccia con l'utente che non so come
realizzare.
Grazie
Andrea

 Andrea
Si, per preparare il tutto devi popolare la tabella con le corrispondenze
Cod_azienda-Cod_domanda, poi con una struttura maschera-sottomaschera
presenti all'utente, per ogni azienda, le varie domande a cui inserire le
risposte.
Puoi sfruttare la caratteristica delle query di fare il prodotto
cartesiano dei record delle tabelle quando non espliciti relazioni, per
ottenere tutte le combinazioni possibili di Cod_azienda-Cod_domanda.
Con un'unica query di inserimento prepari la tabella risposte:
INSERT INTO Risposte (Cod_azienda, Cod_domanda)
SELECT Cod_azienda, Cod_domanda FROM Aziende, Domande;
Modificala secondo le tue esigenze, sull'help trovi la sintassi esatta di
INSERT INTO. Per evitare di avere record duplicati in "Risposte" se esegui
la query più volte, o imposti una chiave primaria sui due campi
Cod_azienda-Cod_domanda e ignori gli errori di inserimento, o modifichi la
query aggiungendo un WHERE in modo che accodi solo i record
Cod_azienda-Cod_domanda che non sono già presenti.


 ha scritto nel messaggio
news:brkain$tke$1...@news.newsland.it...

Grazie per il consiglio
L'unico problema che vedo è che non dispongo già a priori delle aziende.
Ovvero le aziende che inserisco poi successivamente non hanno poi domande
collegate.
Mi sbaglio?

 > > > > spunto una casella di controllo.
[cut]




Proprio per questo ti avevo dato i due suggerimenti.
Li esplicito:
1.
nella form dove inserisci la nuova azienda, nell'evento after_insert lanci
una query che inserisca i record con le domande per la sola nuova azienda
appena inserita:
INSERT INTO Risposte (Cod_azienda, Cod_domanda)
SELECT <codice nuova azienda> AS NewAzi, Cod_domanda FROM Domande;
2.
Imposti nella tabella "Risposte" la chiave primaria sui due campi
Cod_azienda-Cod_domanda, disabiliti i messaggi d'errore con setwarnings e
rilanci la query senza il WHERE. In questo modo inserisce solo le coppie
Cod_azienda-Cod_domanda mancanti perchè non può duplicare le chiavi
primarie già esistenti.
E se invece che una nuova azienda aggiungi una nuova domanda al
questionario, per integrare la tabella puoi usare il metodo 2. che
funziona già così com'è, o una query simile alla 1.:
INSERT INTO Risposte (Cod_azienda, Cod_domanda)
SELECT Cod_azienda, <codice nuova domanda> AS NewDom FROM Aziende;


 ha scritto nel messaggio
news:brki0h$ikp$1...@news.newsland.it...

Ora ho capito cosa intendevi. Grazie Adesso ci provo.

 > SELECT Cod_azienda, <codice nuova domanda> AS NewDom FROM Aziende;
scusa, non sono molto esperto e non sono riuscito a sfruttare il tuo
suggerimento.
io ho 3 tabelle
azienda
ID  (contatore dupl non ammessi)
azienda   (testo)
risposte
cod_azienda  (numero)
cod_domanda  (numero)
risposta     (si/no)
domande
ID (contatore con dupl non ammessi)
domanda (testo)
 1-----> OO tra ID di azienda e cod_azienda e tra Id di domande e
cod_domanda
Faccio 1 maschera per inserire aziende
nell'evento dopo inserimento mi dici di lanciare una query.
Io ho provato a fare una query come quella da te proposta
INSERT INTO Risposte (Cod_azienda, Cod_domanda)
SELECT <codice nuova azienda> AS NewAzi, Cod_domanda FROM Domande;
al posto di <codice nuova azienda> ho messo !forms!azienda!id
Però non credo che sia giusto. Non capisco come lanciarla poi dalla
maschera.
Poi tu mi dici di Impostare nella tabella "Risposte" la chiave primaria sui
due campi
Cod_azienda-Cod_domanda,
ok fatto
 disabiliti i messaggi d'errore con setwarnings
Non so come si fa
rilanci la query senza il WHERE.
sempre la query di prima? come?
grazie. Scusa ma sono poco esperto.

 ok fatto

Ok, la struttura tabelle va bene, e anche le relazioni. Sarebbe meglio,
anche se non è indispensabile, cambiare ID in IDazienda nella tbl aziende
e ID in IDdomanda nella tabella domande, per maggior chiarezza.
Per eseguire una query di comando da codice ti conviene assegnarla ad una
variabile stringa per facilitare il debug casomai dovesse darti errori:
Dim SQL as string
SQL="INSERT INTO tabella " & _
    "SELECT ........"
poi puoi usare uno di questi due metodi:
docmd.runSQL SQL
currentdb.execute SQL
La tua query sarà tutta una stringa fissa tranne il codice azienda, che
leggi dal record corrente della maschera con Me.ID:
SQL="INSERT INTO Risposte (Cod_azienda, Cod_domanda) " & _
    "SELECT " & Me.ID & " AS NewAzi, Cod_domanda FROM Domande;"
Il setwarnings funziona così:
docmd.setwarninga false 'disabilita i msg
'qui esegui la query
docmd.setwarninga true  'riabilita i msg
Non mischiare i due metodi: se usi questo sistema per inserire le domande
per ogni nuova azienda, e i record delle aziende per ogni nuova domanda,
non ti serve altro. Al limite potresti prevedere di eliminare i record da
"risposte" quando cancelli una domanda o un'azienda, con una query "DELETE
* FROM risposte WHERE .....".


 ha scritto nel messaggio
news:brmob7$s84$1...@news.newsland.it...

ti ringrazio. Il sistema funziona benissimo.
Quando cancello una domanda o un'azienda dato che le tabelle sono collegate
con
applica integrità referenziale, aggiorna campi correlati a catena e elimina
record correlati a catena nella tabella risposte elimina i record
corrispondenti. A me sembra funzionare in modo corretto. Dici che possono
nascere problemi?
grazie di tutto.
Andrea

 > Andrea ha scritto:
[cut]


No, va bene così, non dà problemi. Anzi, va meglio, perchè qualsiasi cosa
accada sarai sempre sicuro che non ti restino nella tabella "risposte"
record "orfani", come potrebbe accadere se si verificassero errori durante
l'esecuzione delle query DELETE.
Volevo giusto dirti di usare l'integrità referenziale per eliminare i
record, invece che farlo con le query. E' inutile riscriversi a mano delle
funzionalità che sono già intrinseche in Access.
