CASELLE DI RIEPILOGO

di il
85 risposte

85 Risposte - Pagina 6

  • Re: CASELLE DI RIEPILOGO

    La proliferazione di Funzioni poco utili non è una buona tecnica… in questo caso non serve scrivere funzioni per ogni campo… non sono riutilizzabili quindi non servono se non a far rimbalzare il codice…!

    Suggerirei poi di usare le funzioni NATIVE per la costruzione dei criteri… [BUILDCRITERIA] ad esempio…!

    La ListBox n on si controlla come hai suggerito se ha degli Items selezionati… ma serve contarli…

    Private Sub btnFilter_Click()
    	Dim filtro 	As string
    	Dim varSel	As Variant
    
    	if Me!LisAccert.ItemSelected.Count>0 then 
    		For Each varSel In Me.LisAccert.ItemsSelected
      			filtro = filtro & "'" & ctl.ItemData(varSel) & "';"
      			' se il campo è Numerico basta togliere gli apicetti... da privilegiare gli INDICI per queste cose.
      			' mi chiedo perchè viene usato un Descrittivo invece che un Campo Indicizzato per questo...?
    		Next varSel
    		filtro = Mid$(filtro, 1, Len(filtro) - 1)
    		filtro = "IN (" & filtro & ")"
    		filtro=BuildCriteria("accertamenti",dbText, filtro) & " AND "
    	End if
    	
    	if len(Me!txtDaData & vbnullstring)>0 and len(Me.txtAData & vbnullstring)>0 then
    		filtro = & filtro & BuildCriteria("ProssimaVisita",dbdate,"Between " &  Me!txtDaData & " AND " & Me!txtAData) & " AND "
    	End if
    	
    	if len(Me!CC_Dipendente & vbnullstring)>0 then 
    		filtro = filtro & "[ID] = " & Me![CC_Dipendente].Column(0) & " AND "
    	End if
    	
    	If filtro <> vbnullstring then
        	filtro=Mid$(filtro, 1, Len(filtro) - 5)
        	Me.Filter = filtro
        	Me.FilterOn = True
        Else
            Me.FilterOn = False
    	End if
    end sub
    

    Per il resto penso sempre che il codice riutilizzabile sia un MUST… 

  • Re: CASELLE DI RIEPILOGO

    03/07/2023 - By65Franco ha scritto:


    02/07/2023 - Pattygirl ha scritto:


    Ciao… come va ?   ho visto che stai facendo molte cose , bene bene!!!

    Non ho letto tutto tutto ma volevo segnalarti una cosa in riferimento alla combobox

    • se in ORIGINE RIGA hai due campi (colonne) 
      • prima colonna - Id chiave
      • seconda colonna - per esempio il nominativo del Dipendente
    • COLONNA ASSOCIATA devi impostare
      • la colonna 1 contiene l'Id chiave che verrà utilizzato per le operazioni richieste individuando univocamente solo quel nominativo che hai selezionato con la combobox
    • NUMERO COLONNE impostare 2 in quanto abbiamo detto che hai almeno 2 colonne in Origine Riga
    • LARGHEZZA COLONNE
      • questa proprietà consente di dimensionare le due colonne in questione in modo da renderle visibili come desiderato
        • il campo chiave Id imposta 0cm in quanto non ti serve di vederlo e impostandolo a 0 rimane nascosto
        • il campo nominativo dipendente imposta 3cm in modo da poterlo visualizzare e se non lo vedi per intero oppure no, varia la dimensione in cm come meglio desideri
    • LARGHEZZA ELENCO 
      • questa proprietà si imposta di larghezza sufficiente per visualizzare come meglio si desidera la finestra della combobox che si aprirà
        • di norma si calcola la somma delle LARGHEZZE COLONNE e si imposta il totale. In questo caso imposta 3cm, cioè pari alla larghezza della colonna impostata per visualizzare il nominativo del Dipendente 

    Se la ricerca/filtro che devi eseguire non la esegui con la chiave Id ma sulla base del nominativo del dipendente, allora :

    • in Origine Riga , nella Select, non mettere la chiave Id ma solo il nominativo del Dipendente
    • COLONNA ASSOCIATA metterai 1 che corrisponderà alla colonna del nominativo Dipendente
    • NUMERO COLONNE metterai 1 perchè è l'unica colonna che utilizzerai
    • LARGHEZZA COLONNE metterai 3cm, cioè una sola dimensione per l'unica colonna che hai
    • LARGEHZZA ELENCO metterai 3cm, cioè pari alla dimensione dell'unica colonna che hai, oppure una larghezza che meglio desideri

    in ogni caso ricorda sempre che la colonna associata è il numero della colonna, a partire da sinistra della Select in origine riga che rappresenterà il valore di default restituito dalla combobox
    e in visualizzazione della finestra della combobox metterai a 0cm le colonne che non ti interessa visualizza ma che saranno cmq sempre disponibili e reperibili con la combobox.Column(NumeroColonna)

    Ciao, tutto bene grazie! intanto grazie per la spiegazione piu che esauriente!!! 

    in primis la mia combo era settata come hai suggerito tu, stavamo facendo le prove in modo da poter agganciare al filtro. Ma senza successo. l'Ho giò riportata alle importazioni originali.

  • Re: CASELLE DI RIEPILOGO

    03/07/2023 - @Alex ha scritto:


    Private Sub btnFilter_Click() Dim filtro As string Dim varSel As Variant if Me!LisAccert.ItemSelected.Count>0 then For Each varSel In Me.LisAccert.ItemsSelected filtro = filtro & "'" & ctl.ItemData(varSel) & "';" ' se il campo è Numerico basta togliere gli apicetti... da privilegiare gli INDICI per queste cose. ' mi chiedo perchè viene usato un Descrittivo invece che un Campo Indicizzato per questo...? Next varSel filtro = Mid$(filtro, 1, Len(filtro) - 1) filtro = "IN (" & filtro & ")" filtro=BuildCriteria("accertamenti",dbText, filtro) & " AND " End if if len(Me!txtDaData & vbnullstring)>0 and len(Me.txtAData & vbnullstring)>0 then filtro = & filtro & BuildCriteria("ProssimaVisita",dbdate,"Between " & Me!txtDaData & " AND " & Me!txtAData) & " AND " End if if len(Me!CC_Dipendente & vbnullstring)>0 then filtro = filtro & "[ID] = " & Me![CC_Dipendente].Column(0) & " AND " End if If filtro <> vbnullstring then filtro=Mid$(filtro, 1, Len(filtro) - 5) Me.Filter = filtro Me.FilterOn = True Else Me.FilterOn = False End if end sub

    Grazie mille, provo il codice suggerito.

    “mi chiedo perchè viene usato un Descrittivo invece che un Campo Indicizzato per questo...?” Perchè ero abituata a usare le query, bastava mettere il parametro richiamando il campo e il gioco era fatto.

    Ovviamente il mio approccio con access è molto superficiale… qui sto imparando tante cose e sto arrichendo la mia cultura. Tante cose avrei fatto diversamente ora che ci penso

  • Re: CASELLE DI RIEPILOGO

    03/07/2023 - @Alex ha scritto:


    La proliferazione di Funzioni poco utili non è una buona tecnica… in questo caso non serve scrivere funzioni per ogni campo… non sono riutilizzabili quindi non servono se non a far rimbalzare il codice…!

    Suggerirei poi di usare le funzioni NATIVE per la costruzione dei criteri… [BUILDCRITERIA] ad esempio…!

    La ListBox n on si controlla come hai suggerito se ha degli Items selezionati… ma serve contarli…

    Private Sub btnFilter_Click()
    	Dim filtro 	As string
    	Dim varSel	As Variant
    
    	if Me!LisAccert.ItemSelected.Count>0 then 
    		For Each varSel In Me.LisAccert.ItemsSelected
      			filtro = filtro & "'" & ctl.ItemData(varSel) & "';"
      			' se il campo è Numerico basta togliere gli apicetti... da privilegiare gli INDICI per queste cose.
      			' mi chiedo perchè viene usato un Descrittivo invece che un Campo Indicizzato per questo...?
    		Next varSel
    		filtro = Mid$(filtro, 1, Len(filtro) - 1)
    		filtro = "IN (" & filtro & ")"
    		filtro=BuildCriteria("accertamenti",dbText, filtro) & " AND "
    	End if
    	
    	if len(Me!txtDaData & vbnullstring)>0 and len(Me.txtAData & vbnullstring)>0 then
    		filtro = & filtro & BuildCriteria("ProssimaVisita",dbdate,"Between " &  Me!txtDaData & " AND " & Me!txtAData) & " AND "
    	End if
    	
    	if len(Me!CC_Dipendente & vbnullstring)>0 then 
    		filtro = filtro & "[ID] = " & Me![CC_Dipendente].Column(0) & " AND "
    	End if
    	
    	If filtro <> vbnullstring then
        	filtro=Mid$(filtro, 1, Len(filtro) - 5)
        	Me.Filter = filtro
        	Me.FilterOn = True
        Else
            Me.FilterOn = False
    	End if
    end sub
    

    Per il resto penso sempre che il codice riutilizzabile sia un MUST… 

    Ma allora questo tuo codice che va messo su pulsante di filtra, “su clic”

    ma a questo punto devo cancellare la fuction che avevamo creata all'inizio?

  • Re: CASELLE DI RIEPILOGO

    03/07/2023 - @Alex ha scritto:


    La proliferazione di Funzioni poco utili non è una buona tecnica… in questo caso non serve scrivere funzioni per ogni campo… non sono riutilizzabili quindi non servono se non a far rimbalzare il codice…!

    Suggerirei poi di usare le funzioni NATIVE per la costruzione dei criteri… [BUILDCRITERIA] ad esempio…!

    La ListBox n on si controlla come hai suggerito se ha degli Items selezionati… ma serve contarli…

    Private Sub btnFilter_Click()
    	Dim filtro 	As string
    	Dim varSel	As Variant
    
    	if Me!LisAccert.ItemSelected.Count>0 then 
    		For Each varSel In Me.LisAccert.ItemsSelected
      			filtro = filtro & "'" & ctl.ItemData(varSel) & "';"
      			' se il campo è Numerico basta togliere gli apicetti... da privilegiare gli INDICI per queste cose.
      			' mi chiedo perchè viene usato un Descrittivo invece che un Campo Indicizzato per questo...?
    		Next varSel
    		filtro = Mid$(filtro, 1, Len(filtro) - 1)
    		filtro = "IN (" & filtro & ")"
    		filtro=BuildCriteria("accertamenti",dbText, filtro) & " AND "
    	End if
    	
    	if len(Me!txtDaData & vbnullstring)>0 and len(Me.txtAData & vbnullstring)>0 then
    		filtro = & filtro & BuildCriteria("ProssimaVisita",dbdate,"Between " &  Me!txtDaData & " AND " & Me!txtAData) & " AND "
    	End if
    	
    	if len(Me!CC_Dipendente & vbnullstring)>0 then 
    		filtro = filtro & "[ID] = " & Me![CC_Dipendente].Column(0) & " AND "
    	End if
    	
    	If filtro <> vbnullstring then
        	filtro=Mid$(filtro, 1, Len(filtro) - 5)
        	Me.Filter = filtro
        	Me.FilterOn = True
        Else
            Me.FilterOn = False
    	End if
    end sub
    

    Per il resto penso sempre che il codice riutilizzabile sia un MUST… 

    Da errore con la Lisbox….

    Non ho levato le "'" perchè è un campo tipo alfanumerico

  • Re: CASELLE DI RIEPILOGO

    03/07/2023 - Antony73 ha scritto:


    Private Sub btnFilter_Click() dim filtro as string if len(Me!LisAccert & vbnullstring)>0 then filtro = MyFilterListbox & " and " if len(Me!txtDaData & vbnullstring)>0 and len(Me.txtAData & vbnullstring)>0 then filtro = MyFilterData & " and " if len(Me!CC_Dipendente & vbnullstring)>0 then filtro = MyFiltercbo & " and " If filtro <> vbnullstring then filtro=Mid$(filtro, 1, Len(filtro) - 5) Me.Filter = filtro Me.FilterOn = True End if end sub

    Ho provato anche tuo codice :)

    Funziona la CBO, ovvero il filtro per dipendente…

    ma viene disativata la data e lisbox!

  • Re: CASELLE DI RIEPILOGO

    Il problema non è dove evidenziato in Giallo che va benissimo ma 2 righe sotto:

    filtro = filtro & "'" & ctl.ItemData(varSel) & "';"

    da modificare così:

    filtro = filtro & "'" & Me.LisAccert.ItemData(varSel) & "';"

    Saluti

  • Re: CASELLE DI RIEPILOGO

    03/07/2023 - @Alex ha scritto:


    filtro = filtro & "'" & Me.LisAccert.ItemData(varSel) & "';"

    sostituito…

    …ma da errore ;(

    Grazie cmq…

    Private Sub btnFilter_Click()
        Dim filtro  As String
        Dim varSel  As Variant
    
        If Me!LisAccert.ItemSelected.Count > 0 Then
            For Each varSel In Me.LisAccert.ItemsSelected
            filtro = filtro & "'" & Me.LisAccert.ItemData(varSel) & "';"
             Next varSel
            filtro = Mid$(filtro, 1, Len(filtro) - 1)
            filtro = "IN (" & filtro & ")"
            filtro = BuildCriteria("accertamenti", dbText, filtro) & " AND "
        End If
        
        If Len(Me!txtDaData & vbNullString) > 0 And Len(Me.txtAData & vbNullString) > 0 Then
            filtro = filtro & BuildCriteria("ProssimaVisita", dbDate, "Between " & Me!txtDaData & " AND " & Me!txtAData) & " AND "
        End If
        
        If Len(Me!CC_Dipendente & vbNullString) > 0 Then
            filtro = filtro & "[ID] = " & Me![CC_Dipendente].Column(0) & " AND "
        End If
        
        If filtro <> vbNullString Then
            filtro = Mid$(filtro, 1, Len(filtro) - 5)
            Me.Filter = filtro
            Me.FilterOn = True
        Else
            Me.FilterOn = False
        End If
    End Sub
  • Re: CASELLE DI RIEPILOGO

    Devi impare a fare DEBUG, altrimenti ad ogni piccolo inghippo ti pianti… metti i tuoi BreakPoint e segui passo passo per capire dove e cosa da il problema…!

  • Re: CASELLE DI RIEPILOGO

    03/07/2023 - @Alex ha scritto:


    Devi impare a fare DEBUG, altrimenti ad ogni piccolo inghippo ti pianti… metti i tuoi BreakPoint e segui passo passo per capire dove e cosa da il problema…!

    Non sapevo neanche si potesse fare ?? mi informo grazie per la dritta 

  • Re: CASELLE DI RIEPILOGO

    03/07/2023 - Pattygirl ha scritto:

    Non sapevo neanche si potesse fare ?? mi informo grazie per la dritta 

    Fondamentale, fai una ricerca in rete e vedrai che ti si apre il mondo.

Devi accedere o registrarti per scrivere nel forum
85 risposte