Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923

    [access] - ordinamento report a runtime. Sintassi snellibile?

    Ciao a tutti e buona domenica. Avrei la necessità di ordinare un report in maniera dinamica a seconda dei criteri scelti dall'utente tramite una maschera.

    I parametri sono un menù a tendina che comprende tre opzioni più un radio button per scegliere se l'ordinamento debba essere crescente o decrescente.

    Ho fatto la mia bella ricerchina su internet e ho trovato quest'utile link

    http://allenbrowne.com/ser-33.html

    Ho adattato il codice alle mie necessità in questo modo associando all'evento apertura del report il seguente codice:

    codice:
    Private Sub Report_Open(Cancel As Integer)
    
    ' verifico su quale campo l'utente desidera effettuare l'ordinamento
    Select Case Forms![apriReport2].cmbCampo.Value
    
    
    Case "cognome"
            Me.GroupLevel(0).ControlSource = "cognome"
            
            ' verifico se l'ordinamento prescelto è crescente o decrescente
            Select Case Forms![apriReport2].grpOrd.Value
            Case 1
            Me.GroupLevel(0).SortOrder = False 'default crescente
            Case 2
            Me.GroupLevel(0).SortOrder = True 'decrescente
            End Select
            
            Me.GroupLevel(1).ControlSource = "nome"
            Me.GroupLevel(2).ControlSource = "invalidita"
    
    Case "nome"
            Me.GroupLevel(0).ControlSource = "nome"
            
            Select Case Forms![apriReport2].grpOrd.Value
            Case 1
            Me.GroupLevel(0).SortOrder = False
            Case 2
            Me.GroupLevel(0).SortOrder = True
            End Select
            
            Me.GroupLevel(1).ControlSource = "cognome"
            Me.GroupLevel(2).ControlSource = "invalidita"
    
    Case "invalidità"
            Me.GroupLevel(0).ControlSource = "invalidita"
            
            Select Case Forms![apriReport2].grpOrd.Value
            Case 1
            Me.GroupLevel(0).SortOrder = False
            Case 2
            Me.GroupLevel(0).SortOrder = True
            End Select
            
            Me.GroupLevel(1).ControlSource = "cognome"
            Me.GroupLevel(2).ControlSource = "nome"
    
    End Select
    
    
    End Sub
    Ciò che vorrei sapere è se è possibile snellire il codice relativo alla modalità di ordinamento (crescente o decrescente) senza essere costretto a ripetere tutto il codice per ciascuna possibilità.

    Ho provato a mettere questo codice

    Select Case Forms![apriReport2].grpOrd.Value
    Case 1
    Me.GroupLevel(0).SortOrder = False 'default crescente
    Case 2
    Me.GroupLevel(0).SortOrder = True 'decrescente
    End Select

    verso la fine della sub prima della chiusura dell'altro case ma l'ordinamento non viene più rispettato. Concludendo, è perfettibile il codice o si è obbligati a ripetere il codice relativo all'ordinamento per ciascuna voce?

    Grazie per l'attenzione.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Scusate. Ho risolto. Bastava eseguire l'ordinamento all'esterno del select case e non all'interno. Posto il codice finale nel caso possa servire a qualcun altro.

    codice:
    Private Sub Report_Open(Cancel As Integer)
    
    ' verifico su quale campo l'utente desidera effettuare l'ordinamento
    Select Case Forms![apriReport2].cmbCampo.Value
    
    
    Case "cognome"
            Me.GroupLevel(0).ControlSource = "cognome"
            Me.GroupLevel(1).ControlSource = "nome"
            Me.GroupLevel(2).ControlSource = "invalidita"
    
    Case "nome"
            Me.GroupLevel(0).ControlSource = "nome"
            Me.GroupLevel(1).ControlSource = "cognome"
            Me.GroupLevel(2).ControlSource = "invalidita"
    
    Case "invalidità"
            Me.GroupLevel(0).ControlSource = "invalidita"
            Me.GroupLevel(1).ControlSource = "cognome"
            Me.GroupLevel(2).ControlSource = "nome"
    
    End Select
    
    ' Setto l'ordinamento crescente o decrescente
    Select Case Forms![apriReport2].grpOrd.Value
            Case 1
            Me.GroupLevel(0).SortOrder = False 'default crescente
            Case 2
            Me.GroupLevel(0).SortOrder = True 'decrescente
    End Select
    
    End Sub

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ho trovato un modo ancora più rapido. In pratica per la parte relativa al campo su cui ordinare basterebbe una sola riga di codice.

    Me.GroupLevel(0).ControlSource = Forms![apriReport2].cmbCampo.Value

    Nel mio caso specifico mi occorrerebbe comunque un case per via della differenza tra il nome nel menù a tendina (invalidità) e il nome del campo (invalidita) senza lettera accentata.

    codice:
    Private Sub Report_Open(Cancel As Integer)
    
    ' verifico su quale campo l'utente desidera effettuare l'ordinamento
    Select Case Forms![apriReport2].cmbCampo.Value
    Case "invalidità"
        Me.GroupLevel(0).ControlSource = "invalidita"
    Case Else
        Me.GroupLevel(0).ControlSource = Forms![apriReport2].cmbCampo.Value
    End Select
    
    Select Case Forms![apriReport2].grpOrd.Value
            Case 1
            Me.GroupLevel(0).SortOrder = False 'default crescente
            Case 2
            Me.GroupLevel(0).SortOrder = True 'decrescente
    End Select
    
    End Sub
    e su questo chiudo il mio monologo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.