Newsgroup: it.comp.appl.access
Titolo: Maschere continue checkbox selezione singola

Chiedo scusa in anticipo per la banalità del problema che sicuramente sarà già stato trattato ma ho dato fondo alla mia fantasia di chiavi di ricerca nel gruppo senza riuscire a trovare ciò che mi serve.
Ho una maschera in visualizzazione maschere continue con una casella si/no, associata ad un campo, che mi permette di selezionare i record per effettuare varie azioni. Ho la necessità che, selezionato un record, non possano esserne selezionati altri, magari con un msgbox che avvisi l'utente che non è possible effettuare azioni su più di un record alla volta.
Come posso fare?
 


Invece della checkbox associata (che va pure a scrivere in una tabella con conseguenti oneri soprattutto se il BE è in rete), potresti usare dei pulsanti. Al click del pulsante prendi l'ID del record corrente e lo metti in una casella non associata, ad uso delle future varie azioni che dovrai attivare.
Ciao.
-Marco-
 
 

Scrivette Marco Pizzamiglio lunedì 03/02/2014 alle 13:45:24:

Oppure sempre con una checkbox ma non associata, al click della quale 
fa quello che ti dice Marco (io uso questo metodo perché mi consente di 
fare click "sul record" anzichè sul pulsante in fondo alla maschera, lo 
ritengo più immediato per l'utente).
Ciao
 
-- 
---
/'davide/


Ciao Marco e grazie della tua risposta. Non capisco però bene quello che mi stai suggerendo, dovrei mettere un pulsante in corrispondenza di ogni record elencato nella maschera? Inoltre La checkbox associata mi serve anche perchè la uso in alcune query, sarebbe un problema per me andare a modificare la struttura così com'è ora.
Ho provato così:
 
Private Sub Form_Current()
If Me.Selex.Value = True Then
Me.Selex.Enabled = False
End If
End Sub
 
rinunciando eventualmente al msgbox ma non va.


In una maschera continua se la checkbox è non associata non può funzionare. Ne supnti una, si spuntano tutte, e viceversa. Allora meglio una struttura intermedia, valida anche con BE in rete: fai una tabella locale che riempi e svuoti alla bisogna. Li metti tutte le check che vuoi, associate alla tab locale e te le gestisci come meglio credi. Oppure, crei viste o tabelle sul BE che interpretino da quale client arriva la richiesta, restituendo solo i record di sua competenza

Scrivette Fair87 lunedì 03/02/2014 alle 15:37:37:

Sì, ma io la uso a mo' di pulsante. A me serve solo l'evento OnClick e 
su quello ci metto prima un'azione "togli spunta" e poi la procedura 
che mi serve.
Così facendo: 1) impedisco di selezionare piu' record; 2) evito di 
mettere un pulsante in fondo alla maschera (che potrebbe essere 
cliccato mentre il focus è sul record sbagliato); 3) evito di mettere 
un pulsante su ogni record.



Ragazzi, vi ringrazio per gli spunti interessanti ma ho delle necessità veramente basiche, è un programmino che useremo io ed un mio collega, nessun BE/FE quindi e la checkbox mi servirebbe lasciarla così se fosse possibile. Posso anche rimettere mano a ciò che ho già fatto finora, non è esattamente una cattedrale, ma se ci fosse una semplice soluzione al mio problema così come l'ho posto, mi farebbe molto piacere.

 farebbe molto piacere.
 
Se ti capisco bene il campo e controllo si chiama "Selex" e puoi provare
circa questo codice nell'evento "Prima di aggiornare" del controllo:
 
If Me!Selex = True Then
 
    If Not IsNull(DLookup("Selex", "Tabella", "Selex=True")) Then
 
        If MsgBox("Vuoi che sia questo?", vbYesNo, _
                            "Ne rimarrŕ solo UNO!") = vbYes Then
 
            CurrentDb.Execute _
                      ("UPDATE Tabella SET Selex = False" & _
                       " WHERE Selex=True AND Id<>" & Me!Id)
 
        Else
 
            Me!Selex.Undo
            Cancel = True
 
        End If
 
    End If
 
End If
 
Devi ancora sostituire "Tabella" con il nome della tua tabella e
"Id" con il nome di un campo univoco come la chiave primaria
della tabella.
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
 
 

 Access FAQ:  
http://www.donkarl.com/it
 
 
Ho letto la tua FAQ, devo dire che ho sempre pensato che le piccole cose che creo non fossero abbastanza "importanti" da consigliare di dividere il db ma magari questa volta ci proverò. Tante volte basta solo prendere l'abitudine alle cose.
Il codice funziona perfettamente avrei tuttavia un'altra richiesta da farti. Invece di un MsgBox vbYesNo, preferirei e mi basterebbe un OkOlny. Ho provato a modificare il tuo codice ma non ci sono riuscito.
Grazie infinite.

        End If
 
con
 
MsgBox "e subito ci siamo", vbOkOnly, "Ne rimarrà solo UNO!"
 
CurrentDb.Execute _
           ("UPDATE Tabella SET Selex = False" & _
            " WHERE Selex=True AND Id<>" & Me!Id)
 


 Access FAQ:  
http://www.donkarl.com/it
 
 
Ci siamo quasi, ci sarebbe ancora un piccolo aggiustamento da apportare. Con il codice così, se io scelgo Pippo e poi Pluto, dopo il msgbox, mi rimane flaggato Pluto quando invece normalmente mi aspetterei che fosse la prima scelta quella a rimanere selezionata.
Mi scuso se approfitto della tua pazienza.
 

T_A_O used his keyboard to write :

Sul Form , in AfterUpdate del CheckBox Sì/No
=============================================
Private Sub SelectionControl_AfterUpdate()
Dim RS As Recordset, chkBoxName As String
Dim TableName As String, SQL As String
 
' --- Definizioni --------------
TableName = "t_Autori"
chkBoxName = "SelectionControl"
' ------------------------------
 
SQL = "SELECT " & TableName & "." & chkBoxName & " "
SQL = SQL & "FROM " & TableName & " WHERE ((("
SQL = SQL & TableName & "." & chkBoxName & ")=True));"
Set RS = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
If RS.RecordCount Then
    CurrentDb.Execute "UPDATE " & TableName & " SET " & _
              TableName & "." & chkBoxName & " = False;"
End If
RunCommand acCmdSaveRecord
End Sub
===============================================
 
Bruno
 
 

 aspetterei che fosse la prima scelta quella a rimanere selezionata.
 
Il "piccolo aggiustamento" sarebbe che si cambia quasi tutta la logica. ;-)
 
If Me!Selex = True Then
 
    If Not IsNull(DLookup("Selex", "Tabella", "Selex=True")) Then
 
        MsgBox "e non è questo", vbOkOnly, "Ne rimarrà solo UNO!"
 
        Me!Selex.Undo
        Cancel = True
 
    End If
 
End If



Spero che non mi mandi al diavolo Karl (se lo facessi avresti comunque tutte le tue buone ragioni), succede questo:
Io scelgo Pippo ma mi accorgo invece che era Pluto che volevo scegliere. Non posso togliere il flag a Pippo perchè la CheckBox mi rimane come "bloccata". C'è un modo per superare anche questo scoglio? (non ho detto piccolo, anche se per te sono sicuro che lo sia mentre per me è un problema insormontabile)
GRAZIE!


Bruno perdona, ci credi che non mi ero accorto del tuo intervento? Va benissimo, anche senza msgbox questo evita la possibilità di una doppia selezione ed è perfetto per ciò che mi serve.
Mi da un errore sul salvataggio del record ma eliminando la stringa 
RunCommand acCmdSaveRecord
mi sembra funzionare comunque perfettamente.
Grazie a te ed a Karl (che per fortuna non deve neanche più mandarmi al diavolo)
Ciao.

 deve neanche più mandarmi al diavolo) Ciao.
 
Ti dà errore perché forse devi compilare prima qualche altro campo 
obbligatorio.
Prova a lasciar per ultima la spunta del CheckBox.
 
Bruno
 
 


Hai ragione, ho verificato, ora fila liscio come l'olio.
Grazie mille ancora.