PDA

View Full Version : [ACCESS] Impostare filtro su una maschera da combobox


Micene.1
04-10-2008, 11:15
allora ho una maschera che visualizza una tabella ...vorrei che la tabella fosse filtrata con un campo=X (esempio: mostrami tutti i record che nel campo Sito hanno come valore HWU)...il valore tuttavia del filtro lo vorrei fare impostare da una combobox presente nella maschera stessa

in altre parole:

ho la maschera con la tabella
ho un campo X nella tabella che voglio usare come filtro
ho creato sulla maschera un combobox del campo X che voglio usare come filtro in modo da avere l'elenco dei possibili valori di quel campo

seleziono un valore nella combobox
dico di visualizzare di nuovo la tabella nella maschera pero questa volta con il filtro sul campo X pari al valore messo nella combobox

come posso fare per dire prenditi sto valore dalla combobox e usalo come filtro?

MarcoGG
05-10-2008, 12:44
Semplicissimo.
Supponendo che tu abbia già la combo popolata e la maschera pronta, te la cavi con 2 righe di codice :

Private Sub cmb_sito_Change()

Form_M1.RecordSource = "SELECT * FROM T_nometabella WHERE Sito='" & cmb_sito.Text & "'"
Form_M1.Requery

End Sub

In rosso i nomi da sostituire con i tuoi... ;)

Micene.1
05-10-2008, 15:23
Semplicissimo.
Supponendo che tu abbia già la combo popolata e la maschera pronta, te la cavi con 2 righe di codice :

Private Sub cmb_sito_Change()

Form_M1.RecordSource = "SELECT * FROM T_nometabella WHERE Sito='" & cmb_sito.Text & "'"
Form_M1.Requery

End Sub

In rosso i nomi da sostituire con i tuoi... ;)

aspetta ti spiego che stavo creando in questi minuti

http://img384.imageshack.us/img384/4305/capture1eu4.jpg (http://imageshack.us)

praticamente nella sezione filtro complesso volevo impostare prima tutti i combo box (combo1, 2 ,3) e poi con un pulsante imposta filtro (command1) avviare la query visualizzando il risultato direttamente sulla tabella nella maschera (Table)...poi con un altro pulsante azzerare la query se ce ne fosse bisogno (vabbe questo l'ho chiamato per distrazione imposta filtro di nuovo)

nn riesco a capire il codice per il pulsante "imposta filtro"

stavo provando seguiendo il tuo spunto in questo modo:

Private Sub Filter_Imp_Click()
Dim strNuovoRecord As String

If Not IsNull(Combo1) And Combo1 <> "" Then ' FORNITORE è NUMERICO ATTENZIONE
strNuovoRecord = "SELECT * FROM Table WHERE Campo1='" & Combo1.Value & "'"
Me.RecordSource = strNuovoRecord

Me.Requery

End If
End Sub

ma mi dà errore...poi pensavo come faccio a dirgli di eseguire la query con la WHERE solo sui combo che hanno effettivamente un valore selezionato (dovrei dunque eseguire la query anche solo per il combo 1 oppure solo per il combo2 & 3 e cosi via)

MarcoGG
06-10-2008, 11:42
In questo caso le cose si fanno un po' più complicate, ma niente di difficile. Io risolverei la cosa condizionando il contenuto di 3 parametri che costituiscono la ricerca, e che poi andranno a "costruire" la SELECT definitiva.

In soldoni, questo codice per il pulsante "Applica Filtri" :

Dim C1 As Variant
cmbCampo1.SetFocus
If cmbCampo1.Text = "" Then
C1 = "IS NOT NULL"
Else
C1 = "=" & cmbCampo1.Text
End If

Dim C2 As Variant
cmbCampo2.SetFocus
If cmbCampo2.Text = "" Then
C2 = "IS NOT NULL"
Else
C2 = "=" & cmbCampo2.Text
End If

Dim C3 As Variant
cmbCampo3.SetFocus
If cmbCampo3.Text = "" Then
C3 = "IS NOT NULL"
Else
C3 = "='" & cmbCampo3.Text & "'"
End If

Dim strSql As String
strSql = "SELECT * FROM T_nometabella" & _
" WHERE Campo1 " & C1 & _
" AND Campo2 " & C2 & _
" AND Campo3 " & C3
Form_M1.RecordSource = strSql
Form_M1.Requery

E questo, per il pulsante "Reset Filtri" :

Form_M1.RecordSource = "SELECT * FROM T_nometabella"
Form_M1.Requery

Prova. ;)

Micene.1
09-10-2008, 09:45
In questo caso le cose si fanno un po' più complicate, ma niente di difficile. Io risolverei la cosa condizionando il contenuto di 3 parametri che costituiscono la ricerca, e che poi andranno a "costruire" la SELECT definitiva.

In soldoni, questo codice per il pulsante "Applica Filtri" :

Dim C1 As Variant
cmbCampo1.SetFocus
If cmbCampo1.Text = "" Then
C1 = "IS NOT NULL"
Else
C1 = "=" & cmbCampo1.Text
End If

Dim C2 As Variant
cmbCampo2.SetFocus
If cmbCampo2.Text = "" Then
C2 = "IS NOT NULL"
Else
C2 = "=" & cmbCampo2.Text
End If

Dim C3 As Variant
cmbCampo3.SetFocus
If cmbCampo3.Text = "" Then
C3 = "IS NOT NULL"
Else
C3 = "='" & cmbCampo3.Text & "'"
End If

Dim strSql As String
strSql = "SELECT * FROM T_nometabella" & _
" WHERE Campo1 " & C1 & _
" AND Campo2 " & C2 & _
" AND Campo3 " & C3
Form_M1.RecordSource = strSql
Form_M1.Requery

E questo, per il pulsante "Reset Filtri" :

Form_M1.RecordSource = "SELECT * FROM T_nometabella"
Form_M1.Requery

Prova. ;)

perfetto...grazie mille...è un piacere incontrare persone disponibili come te;)

MarcoGG
09-10-2008, 10:26
perfetto...grazie mille...è un piacere incontrare persone disponibili come te;)

Beh, se rispondo a un thread, è per dare una risposta concreta. :)

Micene.1
09-10-2008, 10:39
Beh, se rispondo a un thread, è per dare una risposta concreta. :)

ah certo anch'io...il fatto è che questa questione l'ho posta anche in altri forum...nn ti dico come mi hanno risposto...praticamente volevano che mi studiassi mezzo VB ADO etc. quando bastava scrivere mezzo codice come hai fatto tu (anche perche se mi devo studiare mezzo manuale che posto fare nei forum dove cè gente che ne sa piu di me)

luca_dic
12-05-2009, 10:45
ah certo anch'io...il fatto è che questa questione l'ho posta anche in altri forum...nn ti dico come mi hanno risposto...praticamente volevano che mi studiassi mezzo VB ADO etc. quando bastava scrivere mezzo codice come hai fatto tu (anche perche se mi devo studiare mezzo manuale che posto fare nei forum dove cè gente che ne sa piu di me)


Buongiorno Ragazzi.

Sono un neofita di Access e in questi giorni ho la necessità di realizzare un file MDB che contiene proprio la stessa funzione che avete evidenziato in questo post.

Da neofita ( ho letto solo un breve libro su access 2003, ma tra la teoria dei libri e le necessità quotidiane c'è un abisso... ) faccio fatica a seguire la vostra discussione.

Dove va inserito il codice?
Associato a quale evento?
ecc..

Un file MDB mi sarebbe molto utile per capirne il funzionamento .
Riuscireste a mandarmene uno di esempio?

Grazie.

Luca

MarcoGG
12-05-2009, 13:53
Buongiorno Ragazzi.

Sono un neofita di Access e in questi giorni ho la necessità di realizzare un file MDB che contiene proprio la stessa funzione che avete evidenziato in questo post.

Da neofita ( ho letto solo un breve libro su access 2003, ma tra la teoria dei libri e le necessità quotidiane c'è un abisso... ) faccio fatica a seguire la vostra discussione.

Dove va inserito il codice?
Associato a quale evento?
ecc..

Un file MDB mi sarebbe molto utile per capirne il funzionamento .
Riuscireste a mandarmene uno di esempio?

Grazie.

Luca

I vari manualetti veloci con quei titoli così fascinosi... "Access Facile", "Access in mezz'ora", "Access blah blah"... ti consiglio di lasciarli sullo scaffale. Molto furbi per chi li pubblica, poco o niente per chi deve imparare sul serio... ;)

Qui trovi il file di Access, lo stesso che ho creato come prova per rispondere a Micene.1 :
http://www.filefactory.com/file/aghd1c4/n/Esempio_Combo_Filtro_mdb

Infine una precisazione : questo metodo può essere valido, posto che si sappia esattamente come concatenare direttive Sql e valori. In genere è una pratica che non ti consiglio di seguire come regola.
Il metodo più corretto in ogni caso è usare i parametri, come ad esempio qui ( Insert ) :
http://www.hwupgrade.it/forum/showthread.php?t=1977950

;)

luca_dic
12-05-2009, 14:41
I vari manualetti veloci con quei titoli così fascinosi... "Access Facile", "Access in mezz'ora", "Access blah blah"... ti consiglio di lasciarli sullo scaffale. Molto furbi per chi li pubblica, poco o niente per chi deve imparare sul serio... ;)

Qui trovi il file di Access, lo stesso che ho creato come prova per rispondere a Micene.1 :
http://www.filefactory.com/file/aghd1c4/n/Esempio_Combo_Filtro_mdb

Infine una precisazione : questo metodo può essere valido, posto che si sappia esattamente come concatenare direttive Sql e valori. In genere è una pratica che non ti consiglio di seguire come regola.
Il metodo più corretto in ogni caso è usare i parametri, come ad esempio qui ( Insert ) :
http://www.hwupgrade.it/forum/showthread.php?t=1977950

;)

Ciao.

Grazie per la precisa e puntuale risposta.
Purtoppo da neofita si casca spesso in quei libricini "gialli" che millantano tutto il sapere facile e subito.

Se hai giò qualche titolo di pubblicazione testata che mi consigli, te ne sarei grato.

Per ora sono orinetato ad acquistare un libro Apogeo:
Access 2007 Guida completa
Uscita: Ottobre 2007
Pagine: 624
ISBN: 9788850326891
Apogeo


Ti ringrazio molto per i files di esempio, appena trovo 1 minuto li scarico a me li studio.

A presto e ancora grazie.

Luca

MarcoGG
12-05-2009, 15:46
Se hai giò qualche titolo di pubblicazione testata che mi consigli, te ne sarei grato.

Per ora sono orinetato ad acquistare un libro Apogeo:
Access 2007 Guida completa
Uscita: Ottobre 2007
Pagine: 624
ISBN: 9788850326891
Apogeo


Manuali su Access non ne ho mai comprato uno.
Spesso mi capita, girando per librerie, di sfogliare e curiosare... Poi arriva il classico commesso che... "Insomma, lo legge o lo compra ?" :D

In linea di massima ti sconsiglio di prendere un manuale da 40 € o più.
Quello a cui fai riferimento non lo conosco, ma così, d'istinto, 624 pagine non sono poche, ma nemmeno tante ( se consideriamo che negli U.S.A. ci sono fior d'autori che fanno manuali da 1100, 1200 pagine su VBA, Excel e forse anche su Access... ).
L'offerta è davvero vasta, a volte debordante, e può creare confusione...
Io ti consiglio di dare un'occhiata alla collana "I Miti Informatica" di Mondadori, con prezzi accessibili, e se poi scopri che il manuale non ti è servito più di tanto, non pigli il muro a testate :muro: .
Ad esempio questo :
http://www.ibs.it/code/9788861140035/dobson-rick/programmare-microsoft-acces.html
;)

luca_dic
12-05-2009, 16:52
Manuali su Access non ne ho mai comprato uno.
Spesso mi capita, girando per librerie, di sfogliare e curiosare... Poi arriva il classico commesso che... "Insomma, lo legge o lo compra ?" :D

In linea di massima ti sconsiglio di prendere un manuale da 40 € o più.
Quello a cui fai riferimento non lo conosco, ma così, d'istinto, 624 pagine non sono poche, ma nemmeno tante ( se consideriamo che negli U.S.A. ci sono fior d'autori che fanno manuali da 1100, 1200 pagine su VBA, Excel e forse anche su Access... ).
L'offerta è davvero vasta, a volte debordante, e può creare confusione...
Io ti consiglio di dare un'occhiata alla collana "I Miti Informatica" di Mondadori, con prezzi accessibili, e se poi scopri che il manuale non ti è servito più di tanto, non pigli il muro a testate :muro: .
Ad esempio questo :
http://www.ibs.it/code/9788861140035/dobson-rick/programmare-microsoft-acces.html
;)

Ciao.

Grazie per il consiglio.
Anche a me capita spesso di sfogliare libri rimanendo nel dubbio se comprarli o no.
Purtroppo, sempre più spesso, il libri non contengono tutte le informazioni per risolvere uno specifico problema, ad esempio quello da me evidenziato.

In questo caso si vaga nei vari siti internet alla ricerca di info o sorgenti mdb.

Ma fare il "reverse" di quei codici è difficile per un principiante.


Per ora ho solo il libricino "giallo" aAccess 2007 - I miti informatica 9€- i portatili.

Quello che ho selezzionato di apogeo affronta approfonditamente ( sembra ) anche moduli, macro e eventi.

Speriamo sia un buon acquisto.

Grazie.

Luca

cellax
23-01-2010, 14:41
continuo il topic, io ho creato una maschera, tutto funzionante, non ho errore di debug, ma il problema è che non vengono mostrati risultati.

ecco la mia funzione VB:
Option Compare Database

Private Sub Comando2_Click()
On Error GoTo Err_Comando2_Click

Dim stDocName As String

stDocName = "per autori"
DoCmd.OpenQuery stDocName, acNormal, acEdit

Exit_Comando2_Click:
Exit Sub

Err_Comando2_Click:
MsgBox Err.Description
Resume Exit_Comando2_Click

End Sub

Private Sub CasellaCombinata0_AfterUpdate()

End Sub

Private Sub CasellaCombinata0_Click()

End Sub

Private Sub CasellaCombinata0_Change()

Form_Maschera1.RecordSource = "SELECT * FROM Articoli INNER JOIN Autori ON Articoli.[ID articolo]=Autori.[Codice articoli] WHERE (Autori.Cognome)='" & CasellaCombinata0.Text & "'"
Form_Maschera1.Requery

End Sub


Private Sub Corpo_Click()

End Sub

Private Sub Form_AfterUpdate()

End Sub

in pratica quando cambio il valore nel menu a tendina mi aspetto che qualcosa venga fuori invece i risultati non vengono, come mai? csa sbaglio?

la query funziona, l'ho solo modificata per funzionare con la funzione dinamica della maschera

presta
08-12-2013, 13:46
In questo caso le cose si fanno un po' più complicate, ma niente di difficile. Io risolverei la cosa condizionando il contenuto di 3 parametri che costituiscono la ricerca, e che poi andranno a "costruire" la SELECT definitiva.

In soldoni, questo codice per il pulsante "Applica Filtri" :

Dim C1 As Variant
cmbCampo1.SetFocus
If cmbCampo1.Text = "" Then
C1 = "IS NOT NULL"
Else
C1 = "=" & cmbCampo1.Text
End If

Dim C2 As Variant
cmbCampo2.SetFocus
If cmbCampo2.Text = "" Then
C2 = "IS NOT NULL"
Else
C2 = "=" & cmbCampo2.Text
End If

Dim C3 As Variant
cmbCampo3.SetFocus
If cmbCampo3.Text = "" Then
C3 = "IS NOT NULL"
Else
C3 = "='" & cmbCampo3.Text & "'"
End If

Dim strSql As String
strSql = "SELECT * FROM T_nometabella" & _
" WHERE Campo1 " & C1 & _
" AND Campo2 " & C2 & _
" AND Campo3 " & C3
Form_M1.RecordSource = strSql
Form_M1.Requery

E questo, per il pulsante "Reset Filtri" :

Form_M1.RecordSource = "SELECT * FROM T_nometabella"
Form_M1.Requery

Prova. ;)

Chiedo scusa se ritiro fuori questo topic dopo anni.
Ho trovato questo esempio, che è proprio quello che fa per me, per un caso 'speculare'. Il problema è che quando esegue le routine associate ai pulsanti mi dà l'errore sulla riga "Form_M1.RecordSource=strSql", e idem in quella speculare del pulsante di reset dà un errore :muro: . Ovviamente ho sostituito correttamente il nome del mio form. L'errore è "necessario oggetto". Qualcuno sa darmi una mano? :help:

Grazie mille!