PDA

View Full Version : [MSACCESS]Filtro selezione su caselle combinate riguardanti lo stesso record


gabriweb
31-03-2008, 11:22
Ciao a tutti.

Ringrazio anticipatamente chi vorrà darmi una mano. :)

Ho un problema con una maschera MS ACCESS (2007).

Ho una tabella chiamata ELENCO SOCI nella quale ci sono dei classici campi di anagrafica (NOMINATIVO, INDIRIZZO, CITTA ecc).

Ho creato una maschera e al suo interno ho piazzato tante caselle combinate quanti sono i campi della tabella ELENCO SOCI; poi ho impostato la query SQL su ciascuna casella combinata in modo da avere un elenco a discesa con tutti i valori su ognuna di esse.

Fin qui tutto bene. Il problema - sul quale a dire il vero sto sbattendo la testa da un po! :muro: - è che vorrei eseguire una query (o programmare un codice VISUAL BASIC!) che mi consenta di aggiornare tutte le altre caselle combinate con i valori di uno stesso record partendo dalla scelta del NOMINATIVO.

In sostanza una volta scelto un determinato NOMINATIVO dalla prima casella combinata (ad es. quello relativo al record n.3) vorrei che anche nelle altre mi selezionasse automaticamente il valore per quel determinato campo ma sempre relativo allo stesso record n.3. Quindi l'effetto finale sarebbe avere tutti i campi del singolo record distribuiti sulle varie caselle combinate.

Spero di essere stato chiaro :)

Grazie a tutti.

gabriweb
02-04-2008, 14:59
:confused: Nessuno con qualche idea?

MarcoGG
02-04-2008, 18:59
Beh, se ho ben capito quello che chiedi è in pratica una semplice operazione di sincronizzazione tra più ComboBox, ossia se cambio il valore in una ComboBox "pilota", le altre dovranno visualizzare in automatico i valori corrispondenti...
Dal momento che che tutte le caselle contengono già tutti i valori dei record, e che la casella-pilota è "nominativo", dovresti cavartela con questo codice, da mettere nell'editor VBA associato alla maschera :

Private Sub nominativo_Change()

Dim cmbx As ComboBox
For Each cmbx In Form_ELENCO_SOCI.Controls

If cmbx.Name <> "nominativo" Then
cmbx = cmbx.Column(0, nominativo.ListIndex)
End If

Next

End Sub

Ovviamente "nominativo" e "Form_ELENCO_SOCI" da modificare a piacere...
Prova... ;)

gabriweb
02-04-2008, 20:18
Beh, se ho ben capito quello che chiedi è in pratica una semplice operazione di sincronizzazione tra più ComboBox, ossia se cambio il valore in una ComboBox "pilota", le altre dovranno visualizzare in automatico i valori corrispondenti...
Dal momento che che tutte le caselle contengono già tutti i valori dei record, e che la casella-pilota è "nominativo", dovresti cavartela con questo codice, da mettere nell'editor VBA associato alla maschera :

Private Sub nominativo_Change()

Dim cmbx As ComboBox
For Each cmbx In Form_ELENCO_SOCI.Controls

If cmbx.Name <> "nominativo" Then
cmbx = cmbx.Column(0, nominativo.ListIndex)
End If

Next

End Sub

Ovviamente "nominativo" e "Form_ELENCO_SOCI" da modificare a piacere...
Prova... ;)

Intanto grazie mille, ti devo una birra ;)

Domattina in ufficio apro subito Access e provo la tua soluzione :)

Grazie tante!

gabriweb
03-04-2008, 08:38
Beh, se ho ben capito quello che chiedi è in pratica una semplice operazione di sincronizzazione tra più ComboBox, ossia se cambio il valore in una ComboBox "pilota", le altre dovranno visualizzare in automatico i valori corrispondenti...
Dal momento che che tutte le caselle contengono già tutti i valori dei record, e che la casella-pilota è "nominativo", dovresti cavartela con questo codice, da mettere nell'editor VBA associato alla maschera :

Private Sub nominativo_Change()

Dim cmbx As ComboBox
For Each cmbx In Form_ELENCO_SOCI.Controls

If cmbx.Name <> "nominativo" Then
cmbx = cmbx.Column(0, nominativo.ListIndex)
End If

Next

End Sub

Ovviamente "nominativo" e "Form_ELENCO_SOCI" da modificare a piacere...
Prova... ;)

Buongiorno

Ho provato la tua soluzione però c'è una riga che non gli piace

Private Sub cc_Nominativo_Change()
Dim cmbox As ComboBox
For Each cmbox In Form_QuoteAss2008.Controls
If cmbox.Name <> "cc_Nominativo" Then
cmbox = cmbox.Column(0, cc_Nominativo.ListIndex)
End If
Next
End Sub

La riga evidenziata in grassetto...

:)

gabriweb
03-04-2008, 08:50
Dimenticavo l'errore...

Errore di run-time '13'

Tipo non corrispondente

MarcoGG
03-04-2008, 08:56
Dimenticavo l'errore...

Errore di run-time '13'

Tipo non corrispondente


Sì, ora che l'ho provato su Access è l'errore che da anche a me.
Non capisco perchè invece su Excel quello stesso identico codice ( su UserForm ) non dia alcun problema... :confused:

Dammi un po' di tempo e vedo di trovarti un'alternativa...

gabriweb
03-04-2008, 09:03
Sei troppo gentile, grazie!

Intanto faccio qualche prova anche io :)

MarcoGG
03-04-2008, 10:05
Fatto. :)
Prova questo :

Private Sub nominativo_Change()

Dim cmbx As Control
For Each cmbx In Form_ELENCO_SOCI.Controls

If cmbx.Name <> "nominativo" Then
If TypeName(cmbx) = "ComboBox" Then

cmbx.Value = cmbx.ItemData(nominativo.ListIndex)

End If
End If

Next

End Sub

Al solito, sostituisci i nomi con i tuoi...
Fai Attenzione che, se la tua tabella contiene una PKey tipo "id", questa NON deve essere associata ad una combobox, pena il malfunzionamento della routine. Per ora è il massimo che riesco a fare, anche se onestamente non ho capito perchè ti serva una funzione del genere... Non sarebbe meglio una Gridview ??

gabriweb
03-04-2008, 10:17
Fuuuuuuuuuuuuuuuuuuunzionaaaa! :sofico: ;)

Non so come ringraziarti non ce l'avrei mai fatta senza il tuo aiuto :)

Grazie!!!

MarcoGG
03-04-2008, 10:26
Fuuuuuuuuuuuuuuuuuuunzionaaaa! :sofico: ;)

Non so come ringraziarti non ce l'avrei mai fatta senza il tuo aiuto :)

Grazie!!!

Eh già. :cool: