Newsgroup: it.comp.appl.access
Titolo: Scomposizione di nomi in campo di ricerca

buongiorno a tutti,
approfitto ancora una volta del forum sperando che qualche utente di buona volontà abbia voglia di aiutarmi.
 
Ho una tabella con un campo composto da nominativi di più auto ( che cercherò di far compilare suddivise  da "/".
Ad esempio potrei avere:
 
1 - Punto/Mini/toyota/Lancia
2 - Lancia/Mini
3 - Punto
4 - Lancia
 
 
Avrei bisogno, tramite una query collegata a una combo, di selezionare i record che contengono un solo marchio, nell'esempio di cui sopra ad esempio, selezionando Lancia filtrerei i record 1, 2 e 4.
 
Pensavo di crearmi per ciascun record, un campo parallelo ad esempio:
1 - "Punto"; "Mini"; "toyota"; "Lancia;
2 - "Lancia"; "Mini"
3 - "Punto"
4 - "Lancia"
 
e far attingere da lì(con selectdistinct) i dati della combo di scelta.
 
Qualche anima buona ha qualche idea sicuramente più professionale e meno pasticciata ?
grazie infinite.
 


Bisognerebbe che spiegassi il senso di quel campo: cos'è quella cosa che può essere "Punto/Mini/toyota/Lancia"?
A prima vista, direi che dovrebbero essere campi distinti.
 
Ho una perplessità su quel "compilare"; passi se fosse una serie predefinita di possibilità, e allora l'utente sceglie da una combo, ma se possono essere compilate variamente la vedo male: come la mettiamo se qualcuno scrive "Punto/MiDi/toyota/Lancia"? Quella "Midi" non la trovi più.
 
Per quanto riguarda una ricerca, se in una query metti il campo "Marche" (perché non so come lo chiami tu) e nella condizione scrivi qualcosa tipo
Like "*" & Forms!MiaMaschera!Scelta & "*"
ecco che tu nella casella Scelta scrivi Lancia e la query ti darà quello che cerchi.
 
Buon lavoro.
Riccardo Baldinotti

ciao Riccardo, grazie per la gentilissima risposta.
Espongo meglio il mio problema.
Ho enunciato marche di auto ma il problema riguarda vertenze legali composte da più cognomi. Il campo [cognomi] é composto da più cognomi concatenati da un simbolo, io ho scelto "/", ad esempio:
 
Rossi/Verdi/Bianchi
Rossi/Verdi
Rossi/Blu/Gialli
Neri/Verdi
   ecc.
 
Vorrei una ricerca che, in base al cognome singolo contenuto nel campo [cognomi], mi estragga i casi nei quali compare.
 
Quindi cercando Rossi otterrei:
Rossi/Verdi/Bianchi
Rossi/Verdi
Rossi/Blu/Gialli
 
e cercando Verdi:
Rossi/Verdi/Bianchi
Rossi/Verdi
Neri/Verdi
 
Il mio problema è questo:
1) vorrei una combo che come origine dati mi facesse vedere i cognomi univoci estratti direttamente dal campo [cognomi].
2) alimentare la query con quel solo cognome in moda tale da ottenere il risultato che cerco.
 
grazie mille per l'attenzione.


 
c'è da lavorare di codice
un ciclo per scandire ogni riga della tabella che contiene i nomi
un sottociclo per estrapolare il singolo nome sfruttando il fatto che un 
nome termina sempre con "/"
ricavato il singolo nome aggiungerlo alla combo con additem
 
a questo punto avrei la combo popolata con i singoli nomi.
sull'evento dopo aggiornamento la query di estrazione diventa banale con 
il like '*  valore combo *'
 
va detto che se nella tabella i nomi si ripetono, la combo ti da dei 
doppioni ed inoltre non sarebbe in ordine alfabetico.
quindi due soluzioni
o carico i nomi estratti in una array...elimino i doppioni...riordino 
l'array..leggo l'array ordinato popolando la combo.
 
oppure più facile salvo i singoli nomi dentro una tabella di appoggio 
che poi uso come sorgente della mia combo
 
 
ciao
BFS
 


visto che non avevo da fare..ecco il codice:
 
crea una tabella tmpCognome con un campo cognome di tipo testo
crea una compo che come origine dati ha tmpCognome che raggruppa e 
ordina il campo cognome.
Sull'evento caricamento della form:
 
 
Private Sub Form_Open(Cancel As Integer)
Dim db As New ADODB.Connection
Set db = CurrentProject.Connection
Dim nominativi As New ADODB.Recordset
nominativi.Open "nominativi", db, adOpenKeyset, adLockOptimistic
Dim i As Integer
Dim cognomeCorrente As String
Dim stringaNomi As String
cognomeCorrente = "pippo"
DoCmd.SetWarnings False
While Not nominativi.EOF
    stringaNomi = nominativi.Fields("cognome")
    While Not Len(stringaNomi) = 0
         cognomeCorrente = Left(stringaNomi, InStr(1, stringaNomi, "/") - 1)
         DoCmd.RunSQL "insert into tmpcognome(cognome) values ('" & 
cognomeCorrente & "')"
         stringaNomi = Replace(stringaNomi, cognomeCorrente & "/", "")
    Wend
    nominativi.MoveNext
Wend
DoCmd.SetWarnings True
nominativi.Close
Set noninativi = Nothing
db.Close
Set db = Nothing
 
End Sub
 
risultato:
http://oi61.tinypic.com/azea1i.jpg
 
 
ciao
BFS
 
 

 BFS
 
 
Ciao BFS,
sono rimasto allibito e senza parole, grazie infinite di vero cuore.
Appena ho un secondo, aggiorno il mio db e ti farò sapere.
Maurizio

ciao BFS, 
 
scusa ma non riesco.
ho creato una tabella "tmpDitta" che contiene il campo "Impresa" che è il campo da cui la combo attinge i dati .
Il campo che contiene i nomi separati da "/" è [Ditta] ed è contenuto nella tabella "Contenziosi".
 
Ho provato a modificare un pò il tuo codice ma non ne vengo fuori. 
Sicuramente faccio un erroee banale nma non ne vengo fuori...ne ho provate di tutti i colori, s ehai voglia di darmi una mano ( e sei tranquillo...) ti chiedo un aiuto.
 
Private Sub Form_Open(Cancel As Integer)
'processo per definire singola Ditta estratta dal campo Ditta tabella Contenziosi
Dim db As New ADODB.Connection
Set db = CurrentProject.Connection
Dim Nominativi As New ADODB.Recordset
 
-----si ferma qui e mi dà "Errore di Runtime" Istruzione SQL non valida. Prevista "Delete", "Insert","Procedure", "Select" o "Update". ------
 
Nominativi.Open "Nominativi", db, adOpenKeyset, adLockOptimistic
Dim i As Integer
Dim ImpresaCorrente As String
Dim stringaNomi As String
ImpresaCorrente = "pippo"
DoCmd.SetWarnings False
While Not Nominativi.EOF
stringaNomi = Nominativi.Fields("Impresa")
While Not Len(stringaNomi) = 0
ImpresaCorrente = Left(stringaNomi, InStr(1, stringaNomi, "/") - 1)
DoCmd.RunSQL "insert into tmpDitta(Impresa) values ('" & ImpresaCorrente & "')"
stringaNomi = Replace(stringaNomi, ImpresaCorrente & "/", "")
Wend
Nominativi.MoveNext
Wend
DoCmd.SetWarnings True
Nominativi.Close
Set Nominativi = Nothing
db.Close
Set db = Nothing
 
 
'su apertura maschera inizializza caselle di scelta
Me.AnnoSelezione = "*"
Me.StatusScelta = "*"
Me.SceltaLavoratore = " "
Me.LavoratoreScelta = "*"
Me.SceltaDitta = ""
Me.DittaScelta = "*"
End Sub

ciao BFS, 
 
scusa ma non riesco.
ho creato una tabella "tmpDitta" che contiene il campo "Impresa" che è il campo da cui la combo attinge i dati .
Il campo che contiene i nomi separati da "/" è [Ditta] ed è contenuto nella tabella "Contenziosi".
 
Ho provato a modificare un pò il tuo codice ma non ne vengo fuori. 
Sicuramente faccio un erroee banale nma non ne vengo fuori...ne ho provate di tutti i colori, s ehai voglia di darmi una mano ( e sei tranquillo...) ti chiedo un aiuto.
 
Private Sub Form_Open(Cancel As Integer)
'processo per definire singola Ditta estratta dal campo Ditta tabella Contenziosi
Dim db As New ADODB.Connection
Set db = CurrentProject.Connection
Dim Nominativi As New ADODB.Recordset
 
-----si ferma qui e mi dà "Errore di Runtime" Istruzione SQL non valida. Prevista "Delete", "Insert","Procedure", "Select" o "Update". ------
 
Nominativi.Open "Nominativi", db, adOpenKeyset, adLockOptimistic
Dim i As Integer
Dim ImpresaCorrente As String
Dim stringaNomi As String
ImpresaCorrente = "pippo"
DoCmd.SetWarnings False
While Not Nominativi.EOF
stringaNomi = Nominativi.Fields("Impresa")
While Not Len(stringaNomi) = 0
ImpresaCorrente = Left(stringaNomi, InStr(1, stringaNomi, "/") - 1)
DoCmd.RunSQL "insert into tmpDitta(Impresa) values ('" & ImpresaCorrente & "')"
stringaNomi = Replace(stringaNomi, ImpresaCorrente & "/", "")
Wend
Nominativi.MoveNext
Wend
DoCmd.SetWarnings True
Nominativi.Close
Set Nominativi = Nothing
db.Close
Set db = Nothing
 
 


 e meno pasticciata ?
 
Beh ... 
La soluzione "professionale" (diciamo) sarebbe quella che ogni record 
debba contenere una sola marca. Non c'e' dubbio.  

 composte da più cognomi.
 
Ah ecco, ora ho capito : in realta' OGNI VERTENZA e' fatta "contro" 
(o "pro") piu' individui. Perfetto. 
 
Allora dovresti fare cosi': 
 
ti crei tre tabelle : 
tabella vertenze 
tabella individui 
tabella connessione (tra le prime due)  
 
Per es : 
tabella vertenze :
 
codice_vertenza
nome_vertenza
data_inizio_vertenza
...
 
tabella individui : 
codice_individuo
nome
cognome 
...
 
tabella connessioni : 
codice_vertenza
codice_individuo
 
Quando fai la query per un certo individuo farai : 
 
select
 nome as ...,
 cognome as ... ,
 nome_vertenza as ... 
 from individui as I 
 (left join connessioni as C 
 on I.codice_individui = C.codice_individuo) 
 left join vertenze as V 
 on C.codice_individuo = V.codice_individuo;
 
Ciao
 
 
 
 


 
 
hai aggiunto il riferimento ad ado?
ciao
 

si si già inserito ma faccio casino con il codice....
grazie ciao
M