Newsgroup: it.comp.appl.access
Titolo: filtrare con parole chiave

Scusate da subito l'ignoranza, ma vi sarei grato se qualcuno mi potesse
aiutare.
Vorrei fare un db per catalogare riviste. Ho fatto una tabella riviste con
ID, nome rivista, anno, parola chiave (cioe' una parola che riassuma il
contenuto della rivista). Le parole chiave sono finite e stanno su una
seconda tabella.
Vorrei poter selezionare da una maschera la parola chiave ed ottenere tutte
le riviste che contengono quella parola chiave. Come posso fare?
Posso mettere nella casella di testo anche piu' di una parola chiave?
Grazie
Paolo

 ha scritto nel messaggio
news:2Ycd6.50618$ew1.3...@news.infostrada.it...

Ti consiglio questa soluzione.
Nella tabella dove cataloghi le tue riviste, al posto di un campo di tipo
testo che contiene una parola chiave metti un campo di tipo memo.
Quando inserisci i dati di una rivista, nel campo memo scrivi una
chiacchierata (con tanto di segni di interpunzione, virgolette ecc..) che
descriva il tipo di rivista, il suo contenuto ed al limite un abstract
dell'indice della rivista. Nel fare questo adopera le parole che ritieni più
opportune, ovvero senza sceglierle da una lista predefinita.
Ipotizziamo che la ricerca la vuoi effettuare usando fino a 4 frasi di
ricerca. Naturalmente ogni frase può essere composta da più parole, da una
sola parola o da nessuna parola (nel caso in cui le frasi di ricerca debbano
essere meno di quattro); l'importante è scrivere qualcosa almeno nella prima
frase di ricerca.
Creati una maschera (Maschera1), di sola consultazione e che abbia come
origine record la tua tabella; questa maschera servirà a visualizzare il
risultato della ricerca basata su frasi o parole contenute nel campo memo.
Maschera1 deve contenere tra gli altri anche una casella di testo associata
al campo memo: a detto controllo dai il nome Dida.
Nell'intestazione di Maschera1 inserisci un pulsante di controllo che apra
una maschera chiamata Maschera2.
Creati un'altra maschera e chiamala Maschera2; detta maschera non deve avere
origine record, deve essere di tipo popup, a scelta obbligatoria e con stile
bordo dialogo.
In Maschera2 insrisci 4 caselle di testo non associate che chiamerai
rispettivamente Prima, Seconda, Terza e Quarta.
Poichè opererai una ricerca con più parole chiave, dovrai esplicitare se
dette parole chiave dovranno operare la ricerca in And o in Or. A tale scopo
in Maschera2 inserisci un'altra casella di testo non associata che chiamerai
ANDOR; come valore predefinito del controllo ANDOR metti la costante "AND".
Inserisci in Maschera2 un pulsante di comando chiamato Cerca.
A fronte dell'evento "Su caricamento" di Maschera2 genera il seguente codice
VBA:
Me!Prima = Null
Me!Seconda = Null
Me!Terza = Null
Me!Quarta = Null
A fronte dell'evento "Su clic" del pulsante Cerca genera il seguente codice
VBA:
Private Sub Cerca_Click()
Dim strTitolo As String, strMsg As String, IntFinestraMsg As Integer
Dim IntNuovo As Integer
If IsNull(Me!Prima) Then
    strTitolo = "Campo obbligatorio non digitato"
    strMsg = "Non hai digitato la prima parola chiave"
    IntFinestraMsg = vbExclamation
    IntNuovo = MsgBox(strMsg, IntFinestraMsg, strTitolo)
    Me!Prima.SetFocus
Else
    If Left(Me!Prima, 1) <> "*" Then
        Me!Prima = "*" & Me!Prima
    End If
    If Right(Me!Prima, 1) <> "*" Then
        Me!Prima = Me!Prima & "*"
    End If
    If Not IsNull(Me!Seconda) Then
        If Left(Me!Seconda, 1) <> "*" Then
            Me!Seconda = "*" & Me!Seconda
        End If
        If Right(Me!Seconda, 1) <> "*" Then
            Me!Seconda = Me!Seconda & "*"
        End If
    End If
    If Not IsNull(Me!Terza) Then
        If Left(Me!Terza, 1) <> "*" Then
            Me!Terza = "*" & Me!Terza
        End If
        If Right(Me!Terza, 1) <> "*" Then
            Me!Terza = Me!Terza & "*"
        End If
    End If
    If Not IsNull(Me!Quarta) Then
        If Left(Me!Quarta, 1) <> "*" Then
            Me!Quarta = "*" & Me!Quarta
        End If
        If Right(Me!Quarta, 1) <> "*" Then
            Me!Quarta = Me!Quarta & "*"
        End If
    End If
    Dim ChiaveRic As String
    ChiaveRic = "[Dida] Like " & Chr$(34) & Me!Prima & Chr$(34)
    If Not IsNull(Me!Seconda) Then
        ChiaveRic = ChiaveRic & " " & Me!ANDOR & " [Dida] Like " & Chr$(34)
& Me!Seconda & Chr$(34)
    End If
    If Not IsNull(Me!Terza) Then
        ChiaveRic = ChiaveRic & " " & Me!ANDOR & " [Dida] Like " & Chr$(34)
& Me!Terza & Chr$(34)
    End If
    If Not IsNull(Me!Quarta) Then
        ChiaveRic = ChiaveRic & " " & Me!ANDOR & " [Dida] Like " & Chr$(34)
& Me!Quarta & Chr$(34)
    End If
    Me.Visible = False
    DoCmd.Hourglass True
    Forms!Maschera1.SetFocus
    DoCmd.ApplyFilter , ChiaveRic
    If Forms!Maschera1.RecordsetClone.RecordCount = 0 Then
        DoCmd.Hourglass False
        strTitolo = "Ricerca con esito negativo"
        strMsg = "Non esistono riviste che soddisfano questi criteri"
        IntFinestraMsg = vbExclamation
        IntNuovo = MsgBox(strMsg, IntFinestraMsg, strTitolo)
        DoCmd.ShowAllRecords
    End If
    DoCmd.Hourglass False
    Me.Visible = True
    Me!Prima.SetFocus
    DoCmd.Close
End If
End Sub
A questo punto apri Maschera1, pigia il pulsante di comando: ti si aprirà
Maschera2. Se le parole chiave debbono operare in Or nella ricerca, nella
casella di testo ANDOR digita la parola OR. Digita nelle altre caselle di
testo da una a quattro frasi chiave (l'iportante che digiti qualcosa nella
prima, altrimenti avrai un messaggio d'avvertimento). Pigia il pulsante di
comando Cerca.
Se esistono riviste che soddisfano i criteri di ricerca, le vedrai
visualizzate in Maschera1, altrimenti riceverai un messaggio di avvertimnto
e in Maschera1 vedrai tutte le riviste.
Puoi anche digitare le parole chiave anche non per intero: ovvero digitando
la parola chiave scioper, vedrai sia le riviste che nel campo memo
contengono la parola sciopero che quelle che contengono la parola scioperi.
Se la soluzione ti soddisfa, provala e facci sapere se funziona.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/
---------------------------------------------

  cut
Veramente GRAZIE!
Pero' ricevo un errore che dovrebbe venire da queste righe
ChiaveRic = ChiaveRic & " " & Me!ANDOR & " [Dida] Like " & Chr$(34)
 & Me!seconda & Chr$(34)
End If
If Not IsNull(Me!terza) Then
ChiaveRic = ChiaveRic & " " & Me!ANDOR & " [Dida] Like " & Chr$(34)
& Me!Terza & Chr$(34)
End If
If Not IsNull(Me!Quarta) Then
ChiaveRic = ChiaveRic & " " & Me!ANDOR & " [Dida] Like " & Chr$(34)
& Me!Quarta & Chr$(34)
End If
sapreste aiutarmi?

 ha scritto nel messaggio
news:3Iyd6.59247$ew1.3...@news.infostrada.it...

Bisognerebbe che ci dicessi che errore ricevi e quale riga ti si evidenzia
premendo il pulsante di Debug.
Potrebbe essere solamente un errore di trascrizione o il fatto che in
Maschera2 non esistano caselle di testo chiamate Terza e/o Quarta.


 Maschera2 non esistano caselle di testo chiamate Terza e/o Quarta.
Roberto avevi ragione era un errore di trascrizione, ma ora ho un altro
problema (confido nella tua pazienza): quando inserisco la parola chiave e
premo il tasto *cerca* mi appare una finestra dal titolo *immissione valore
parametro* e poi Dida e una casella in cui inserire il parametro (?)
Dida e' una casella di testo che ha come origine controllo il campo *parole
chiave* della tabella principale.
Dovrei darle altre impostazioni?
Grazie
Paolo