Newsgroup: it.comp.appl.access
Titolo: Come "filtrare" gli elementi di una casella combinata?

Buongiorno a tutti,
un mio amico, più esperto di me in Access 97, mi ha consigliato di
rivolgermi a voi per risolvere un problema al quale sto cercando di
dare soluzione.
Sto allestendo un database per la mia azienda. Tra le tabelle ve n’è
una chiamata ANAGRAFICO che contiene i dati dei miei clienti (ragione
sociale, sede, telefoni, etc.), ed un’altra chiamata NOMINATIVI che
contiene invece le schede delle persone che lavorano presso questi
clienti.
La tabella ANAGRAFICO contiene un campo di tipo contatore chiamato
IDCLIENTE ed un altro campo di tipo testo chiamato CLIENTE che contiene
la ragione sociale.
Nella tabella NOMINATIVI ho aggiunto un campo CLIENTE in modo tale che
si crei una corrispondenza biunivoca tra il nominativo della persona e
la ditta per la quale lavora.
Quello che vorrei ottenere, in breve, è poter aggiungere nuovi records
alla tabella NOMINATIVI in maniera tale che quando capito sul campo
CLIENTE io non sia costretto né a ricordarmi a memoria tutti i codici
IDCLIENTE, né tantomeno a dover scorrere per intero una casella
combinata che mi mostri tutte le ragioni sociali.
Un tale sistema, infatti, potrebbe essere maneggevole in presenza di 20
clienti, ma quando se ne hanno 600 la cosa diventa impossibile,
soprattutto se – come nel mio caso – le ragioni sociali non sono
strutturate tutte allo stesso modo.
Mi spiego meglio:
potrei infatti ricordarmi di una ditta ROSSI che però potrebbe essere
registrata nella tabella NOMINATIVI sia come ROSSI SpA, sia come
Società ROSSI, ecc. E visto che la casella combinata mostrerebbe le
ragioni sociali in ordine alfabetico, dovrei scorrere tutto l’elenco.
Quello che Vi chiedo in quanto esperti della materia è:
esiste la possibilità, in fase di inserimento nuovi di record, di
attivare una casella combinata (o una cosa simile) nella quale inserire
solo PARTE della ragione sociale e dalla quale ottenere il (o i) record
desiderato? Che ne so, una finestra che a comando si apra e attivi una
sorta di query?
Molti software, e penso a quelli di gestione magazzino, nel caso in cui
l’utente non ricordi il codice di un prodotto, danno la possibilità di
effettuare una ricerca mentre si sta creando un nuovo record o comunque
effettuando altre operazioni.
Immagino che una potenza come Access non manchi di questa possibilità.
Sareste così gentili e disponibili ad aiutarmi e a darmi la vostra
opinione?
Vi ringrazio fin d’ora e vi auguro una buona giornata.
Andrea W. GUAGLIO
Milano
Sent via Deja.com 
http://www.deja.com/
Before you buy.

 Immagino che una potenza come Access non manchi di questa possibilità.
Nel campo "Origine riga" della casella combinata dovrai inserire una 
query che selezioni tutti i dati che ti serve visualizzare mettendo come 
criterio nel campo CLIENTE "LIKE *" & nome_cercato & "*".
Dovrai comunque aggiornare la casella combinata ogni volta che cambi la 
stringa di ricerca (requery).
Ciao


Grazie per la risposta. Purtroppo non ho capito come usare il tuo
suggeriemnto.
Abbi pazienza, sono il principiante dei principianti...
Io vorrei solo trovare un sistema per poter filitare a mio piacimento
le voci di una casella combinata senza essere necessariamente vincolato
alla prima lettera.
La tua soluzione, cosě' come me l'hai proposta, sembra non funzionare.
Se ho ben capito, io dovrei entrare nella struttura query della casella
combinata e alla voce Criterio inserire quanto mi hai scritto. Ma ho
ricevuto in cambio una marea di insulti....
Grazie per una risposta.
Andrea


 ricevuto in cambio una marea di insulti....
Mettiamo che tu abbia una maschera con due campi , un campo di testo 
chiamato "Ricerca" e una ComboBox chiamata "Combo" (che fantasia...).
Tu vorresti che nella combo venissero elencati solamente i clienti che 
hanno nel nome la stringa indicata in Ricerca, quindi devi entrare nella 
query della combo e, dopo avere selezionato i campi da visualizzare, 
mettere un criterio sul campo CLIENTE :
LIKE "*" & [Forms]![Nome del form]![Ricerca] & "*"
A questo punto dobbiamo fare in modo che quando cambio il campo Ricerca 
la combo venga aggiornata automaticamente, quindi nell'evento SuUscita o 
SuModifica del campo Ricerca dovrai inserire
Combo.Requery
Se non sono stato abbastanza chiaro dimmelo che ti posso mandare un 
esempio per E-Mail.
PS : secondo me è meglio utilizzare una ListBox per vedere i nominativi 
filtrati, così non devi aprire la combo dopo avere inserito il testo.

sorta di query?
per quanto riguarda il metodo, jbad ti ha dato la risposta giusta, e
cioe' componi al volo una query e la usi come origine dati della
casella combinata.
dovresti fare piu' o meno cosi':
- inserisci una casella di testo nella maschera e dagli un nome tipo
txtRicerca (o quello che ti pare, basta che te lo ricordi);
- cerca nella tabella delle proprieta' l'evento dopoaggiornamento di
questa casella di testo e scegli di aggiungere del nuovo codice;
- nel codice eseguito in seguito all'evento dopoaggiornamento (e cioe'
quando confermi un nuovo valore nella textbox txtRicerca) scrivi
qualcosa del genere:
dim ssql as string
ssql="SELECT * FROM tClienti WHERE RagSoc LIKE '*" & me.txtRicerca &
"*' "
me.listbox.rowsource=ssql
me.listbox.requery
tClienti e' il nome della tabella clienti, RagSoc e' il nome del campo
contenente la ragione sociale, listbox e' la casella di riepilogo
nella quale vorrai visualizzare i clienti che contengono la stringa
digitata in txtRicerca.
nota che se in txtricerca hai digitato ad es. osso, la stringa ssql
diventa:
SELECT * FROM tClienti WHERE RagSoc LIKE '*osso*'
cioe' osso e' inserito in mezzo a due *, e il tutto e' inserito in
mezzo a due apici.  questo perche' usando l'operatore di confronto
Like, * vale come wildcard, cioe' rappresenta qualsiasi combinaizone
di caratteri, e perche' in sql l'apice si usa per delimitare i valori
di tipo stringa.
la query di cui sopra comprendera' nomi tipo:
Grosso
Ossobuco
Bossolo
e via dicendo.
requery serve ad aggiornare il contenuto della listbox.
-----------------------------------
ATTENZIONE: il ng it.comp.database.access cambia nome e diventa it.comp.appl.access
linkatelo!
-----------------------------------
il sito comune di it.comp.database.access:
http://members.xoom.it/it_db_access