Newsgroup: it.comp.appl.access
Titolo: Indirizzario

ciao a tutti
ho costruito un indirizzario
lo scopo di questo programmino è quello di fare una selezione per campo
(cap, città, categoria, etc) da una form e ricavare i relativi dati :
nome, indirizzo, cap, città e spedirli ad un report per la stampa delle
etichette.
Il mio db ha due tabelle collegate fra loro:
indirizzi(campo categorie)
categorie
la mia difficoltà nasce dal fatto che non so come fare a selezionare
mediante una maschera contemporaneamente più categorie in modo da poter
successivamente stampare le relative etichette
c'è qualcuno che mi può dare una dritta?
ciao e grazie
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:b18b4aa72beb3ac1d24...@mygate.mailgate.org...

Non sono sicuro di aver capito bene il tuo problema, ma se vuoi filtrare un
report in base alle scelte fatte in una casella di riepilogo con selezione
multipla, vai sul Sito Comune (link qui sotto) e nella Sezione Reports leggi
la FAQ intitolata "Come si può filtrare un report in base alla selezione
multipla effettuata su una casella di riepilogo?".
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 multipla effettuata su una casella di riepilogo?".
ciao Roberto
grazie per la risposta
vorrei fare una cosa del genere selezionando da una lista analoga
all'esempio che mi hai indicato...però non so se si può fare nel mio
caso.
cercherò di essere più chiaro:
io ho bisogno di associare ad ogni nuovo nominativo una o più categorie
di interesse
esempio di record :
nome : Mario Rossi
indirizzo : via roma 14
cap:34213
città : Milano
categorie di interesse : fotografia, mostre, giornalismo, cinema
(in pratica devo poter inserire nel record più di una categoria)
ho costruito quindi una tabella indirizzi con i seguenti campi :
nome, indirizzo, cap, città, categoria1, categoria2, categoria3,
categoria4, categoria5 e categoria6.
non so se questa è una buona idea ma avevo bisogno di poter
inserire più di una categoria (ne ho 30 in tutto)associata ad 
un nominativo e non conoscevo altro modo se non quello di aumentare 
i campi categoria fino a 6 per poter contenere più scelte.
ci ho costruito sopra una maschera con delle caselle di testo legate
 ai campi nome, indirizzo, cap e città
inoltre per l'inserimento delle mie categorie ho utilizzato all'interno
della
 maschera delle caselle combinate legate alla tabella categorie 
queste 6 caselle combinate vanno poi ad inserire i dati nei campi
categoria della tabella indirizzi.
non so se questa è una buona idea ma non sapevo che altro escogitare..
a questo punto sorgono i problemi!
come faccio a fare una form che mi permetta di selezionare 
da una casella di riepilogo (come nel tuo esempio) più categorie :
per esempio vorrei poter selezionare tutte quelle persone che 
hanno per interesse sia la fotografia sia il cinema sia il teatro?
ci vuole del codice? ho sbagliato nell'impostare il db?
spero di essere stato abbastanza chiaro
ciao e ancora grazie


 ha scritto nel messaggio
news:0e5b5d80f2eedd4a6e3...@mygate.mailgate.org...
[CUT]

Per prima cosa risolviamo il problema della struttura delle tabelle e di
come esse debbono stare in relazione tra di loro.
Il tuo è il classico caso di relazione molti-a-molti; infatti un nominativo
ha più categorie di interesse ed ogni categoria di interesse appartiene a
più nominativi. inoltre occorre trovare una soluzione che faccia in modo che
tu non debba modificare la struttura delle tabelle e degli altri oggetti del
database nel caso in cui le categorie di interesse per un nominativo passano
da 4 a 6 ed in seguito da 6 a 10.
Quindi io opererei con le seguenti tre tabelle.
Tabella Categorie che ha la seguente struttura:
IdCategoria        Contatore e chiave primaria
Categoria            Testo
Tabella Nominativi che ha la seguente struttura:
IdNominativo     Contatore e chiave primaria
Nome                 Testo
Indirizzo              Testo
CAP                   Testo
Città                    Testo
ecc. ecc.
Tabella NomiCat che ha la seguente struttura:
IdNominativo        Numerico
IdCategoria          Numerico
La chiave primaria di questa tabella e costituita dall'insieme di ambedue i
campi in essa contenuti.
Per facilitare l'aggiornamento per il campo IdCategoria di questa tabella
crea l'Autocomposizione Ricerca... basata sulla tabella Categoria (cosa che
mi sembra tu avessai già fatto per i campi categoria1, categoria2,
caregoria3 ecc. ecc.).
La tabella NomiCat dovrà essere in relazione uno-a-molti con la tabella
Nominativi tramite i campi IdNominativo ed in relazione uno-a-molti con la
tabella Categorie tramite i campi IdCategoria; avrai così creato una
relazione molti-a-molti tra le tabelle Nominativi e la tabella Categorie.
Per aggiornare agevolmente le due tabelle Nominativi e NomiCat, creati una
maschera principale che ha la tabella Nominativi come origine record e che
contiene anche una sottomaschera che abbia come origine record la tabella
NomiCat.
Con una struttura simile a questa, un nominativo potra avere un numero
indefinito di categorie di interessi, e non dovrai modificare mai le
strutture se aumenterai il numero massimo di interessi per nominativo.
Se vuoi visualizzare i nominativi che abbiano TUTTE le categorie di
interessi che selezionerai in una casella di riepilogo con selezione
multipla:
1) Creati una maschera con visualizzazione a maschere continue che abbia
come origine record la tabella Nominativi.
2) Nell'intestazione della maschera inserisci una casella di riepilogo non
associata chiamata Elenco; per la casella di riepilogo imposta a Estesa la
proprietà Selezione multipla; la casella di riepilogo deve avere due colonne
di cui la prima non deve essere visibile e deve avere come origine riga il
seguente codice SQL:
SELECT DISTINCTROW IdCategoria, Categoria
FROM [Categorie];
3) Nell'intestazione della maschera inserisci anche un pulsante di comando
che pigerai dopo che avrai selezionate le categorie nella casella di
riepilogo ed a fronte del suo evento "Su clic" genera il seguente codice
VBA:
Dim strLista As String
Dim varItem As Variant
Dim strCriteri As String
Dim gstr As String
Dim Conta As Long
Conta = 0
If Me!Elenco.ItemsSelected.Count = 0 Then Exit Sub
For Each varItem In Me!Elenco.ItemsSelected
    Conta = Conta + 1
    strLista = strLista & _
        Me!Elenco.Column(0, varItem) & ","
Next varItem
strLista = Left$(strLista, Len(strLista) - 1)
    strCriteri = "Sum(IIf(IdCategoria In (" & _
    strLista & "), 1, 0)) =" & Conta
gstr = "[IdNominativo] IN (SELECT [IdNominativo] " & _
    "FROM NomiCat GROUP BY [IdNominativo] HAVING " & _
    strCriteri & ";)"
Me.Filter = gstr
Me.FilterOn = True
Naturalmente la variabile gstr, invece di usarla per impostare la proprieà
Filter della maschera puoi usarla per impostare la condizioneWHERE di un
metodo OpenForm o OpenReport, in modo così da filtrae una maschera o un
report, così come viene fatto nel mio esempio pubblicato sul Sito Comune e
che ti avevo consigliatao di prendere in visione.
Se invece di visualizzare i nominativi che hanno TUTTE le categorie di
interessi selezionate nella casella di riepilogo, vuoi viualizzare i
nominativi che abbiano ALMENO UNA delle categorie di interessi selezionate
nella casella di riepilogo, a fronte dell'evento "Su clic" genera il
seguente codice VBA:
Dim strLista As String
Dim varItem As Variant
Dim strCriteri As String
Dim gstr As String
If Me!Elenco.ItemsSelected.Count = 0 Then Exit Sub
For Each varItem In Me!Elenco.ItemsSelected
    strLista = strLista & _
        Me!Elenco.Column(0, varItem) & ","
Next varItem
strLista = Left$(strLista, Len(strLista) - 1)
strCriteri = "[IdCategoria] IN (" & _
strLista & ")"
gstr = "[IdNominativo] IN (SELECT [IdNominativo] " & _
"FROM NomiCat WHERE " & strCriteri & ";)"
Me.Filter = gstr
Me.FilterOn = True
Spero che sia ciò che ti serviva.


 ho costruito un indirizzario
una volta si diceva rubrica. ;-)
Sib