Newsgroup: it.comp.appl.access
Titolo: Individuare i record selezionati in una Sottomaschera

Ciao,
Ho uma maschera con sottomaschera continua. Quando evidenzio i records per 
cancellarli voglio chiedere prima una conferma. Per fare questo ho scritto 
il seguente codice...
    Dim F As Form
    Dim strSQL As String
    Set F = Forms("MAS_Inventario_Pallet").MAS_Inventario_Codice.Form
    ' Chiamo la funzione che mi ritorna la stringa SQL che contiene le 
chiavi dei records da eliminare.
    strSQL = SelectedRecordsSQLStringKey(F, "IDVoce")
Il mio problema è nella seguente funzione, alla riga evidenziata con 
asterischi
Public Function SelectedRecordsSQLStringKey(F As Form, ID As String) As 
String
    Dim i As Long
    'Dim F As Form
    Dim RS As Recordset
    Dim strSQL As String
    Dim firstCondition As Boolean
    firstCondition = True
    ' Get the form and its recordset.
    Set RS = F.RecordsetClone
    ' Move to the first record in the recordset.
    RS.MoveFirst
    ' Move to the first selected record.
    RS.Move F.SelTop - 1
    ' Enumerate the list of selected records presenting
********************************
' Non mi cicla perchè il SelHeight è 0.
    For i = 1 To F.SelHeight
        If firstCondition = True Then
            strSQL = ID & " = " & RS.Fields(ID)
            firstCondition = False
        Else
            strSQL = strSQL & " OR " & ID & " = " & RS.Fields(ID)
        End If
    RS.MoveNext
    Next i
    SelectedRecordsSQLStringKey = strSQL
End Function
Se eseguivo il seguente codice dall'evento OnDelete della sottomaschera 
funzionava. Perchè se l'eseguo da un bottone sulla maschera principale non 
va?
Grazie

 ha scritto nel messaggio news:f72jkt$c8s$1...@aioe.org...

Io vedo un riferimento all'oggetto Form di una sottomaschera:
...
Forms("MAS_Inventario_Pallet").MAS_Inventario_Codice.Form
...
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Ciao Sergio,
come dovrei fare?
Perchč dalla sottomaschera funziona?
Grazie per l'aiuto. 

 Grazie per l'aiuto.
Se non ti studi e cerchi di capire il codice, non riuscirai ad adattarlo alle tue esigenze...
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Ciao e grazie per il tuoi aiuto.

 Ciao e grazie per il tuoi aiuto.
Perņ sono un poco perplesso sulla modalitą che hai scelto per una conferma 
di cancellazione di record.
Perché non hai controllato semplicemente l'evento "Prima di conferma 
eliminazione"? Era necessario contarli?
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Per completezza siccome ho documentato la funzione del KB più la mia la 
allego, così se a qualcuno interessa.....
 La seguente procedura spiega come vedere quali sono i records selezionati 
in una maschera continua
 Creare in un modulo il seguente codice:
' Nelle dichiarazioni originali
' Variabili per memorizzare i records selezionati.
Dim MySelTop As Long
Dim MySelHeight As Long
Dim MySelForm As Form
Dim fMouseDown As Integer
' Autore: Marco Papetti allias Marco Papo
' Questo codice è scritto sulla base della seguente KB 
http://support.microsoft.com/kb/294202
' Questa funzione restituisce una stringa SQL contenente gli ID dei records 
selezionati
' Parametri:
' F Maschera o sottomaschera.
' ID campo chiave della tabella.
'
Public Function SelectedRecordsSQLStringKey(F As Form, ID As String) As 
String
    Dim i As Long
    Dim RS As Recordset
    Dim strSQL As String
    Dim firstCondition As Boolean
    firstCondition = True
    ' Imposta il recordset sulla base dell'origine dati della maschera
    Set RS = F.RecordsetClone
    ' Move to the first record in the recordset.
    RS.MoveFirst
    ' Move to the first selected record.
    RS.Move F.SelTop - 1 ' SelTop restituisce il numero primo record 
selezionato
    ' Costruisco la stringa SQL.
    For i = 1 To F.SelHeight
        If firstCondition = True Then
            strSQL = ID & " = " & RS.Fields(ID)
            firstCondition = False
        Else
            strSQL = strSQL & " OR " & ID & " = " & RS.Fields(ID)
        End If
        RS.MoveNext
    Next i
    SelectedRecordsSQLStringKey = strSQL
End Function
'Questa funzione serve per memorizzare nelle variabili il SelTop e il 
SelHeight di una selzione di records se viene premuto 'il tasto del mouse.
' Se si preme il tasto del mouse si perde il focus sulla selezione dei 
records.
' Il SelTop mantiene la posizione del primo record memorizzato.
Public Function SelRecord(F As Form, MouseEvent As String)
   Select Case MouseEvent
      Case "Move"
         ' Store the form and the form's Sel property settings
         ' in the MySel variables ONLY if mouse down has not
         ' occurred.
         If fMouseDown = True Then Exit Function
         Set MySelForm = F
         MySelTop = F.SelTop
         MySelHeight = F.SelHeight
      Case "Down"
         ' Set flag indicating the mouse button has been pushed.
         fMouseDown = True
      Case "Up"
         ' Reset the flag for the next time around.
         fMouseDown = False
   End Select
End Function
'Questa funziona reimposta la selezione sui records, precedentemente 
selezionati, per cui poi si è perso il focus.
' La posizione era stata memorizzata dalla funzione SelRecord.
Public Function SelRestore()
   ' Restore the form's Sel property settings with the values
   ' stored in the MySel variables.
   MySelForm.SelTop = MySelTop
   MySelForm.SelHeight = MySelHeight
End Function
 Creare un pulsante.
 Aggiungere Sull'evento "Su Pulsante Mouse Giù" 
=SelRecord([Maschere]![MAS_Inventario_Pallet]![MAS_Inventario_Codice].[Form];"Down")
 Aggiungere Sull'evento "Su Mouse Spostato" 
=SelRecord([Maschere]![MAS_Inventario_Pallet]![MAS_Inventario_Codice].[Form];"Move")
 Aggiungere Sull'evento "Su Pulsante Mouse Su" 
=SelRecord([Maschere]![MAS_Inventario_Pallet]![MAS_Inventario_Codice].[Form];"Up")
 Dove [Maschere]![MAS_Inventario_Pallet]![MAS_Inventario_Codice] è una 
sottomaschera. Ovviamente si può mettere anche solo una msachera.
 Sull'evento Click mettere la seguente sub:
 Private Sub cmdEliminaRighe_Click()
     Dim F As Form
     Dim strSQL As String
     SelRestore
     Set F = Forms("MAS_Inventario_Pallet").MAS_Inventario_Codice.Form
     ' Chiamo la funzione che mi ritorna la stringa SQL che contiene le 
chiavi dei records da eliminare.
     strSQL = SelectedRecordsSQLStringKey(F, "IDVoce")
     ' Apro la maschera dell'eliminazione passandogli l'OpenArgs.
     DoCmd.OpenForm "MAS_Inventario_Codice_Elimina", , , , , , strSQL
 End Sub