Filtro maschera in base a dato esterno

di il
25 risposte

Filtro maschera in base a dato esterno

Buongiorno,
ho una maschera appoggiata ad una tabella in cui inserisco le bolle e relative fatture (per ogni bolla c'e' sempre un corrispettivo fattura): quando devo inserire le fatture (relative ad un mese determinato) ho necessita' di filtrare i records che hanno [data_bolla] in quel mese e contemporaneamente [link_fattura] come valore nullo. Attualmente applico i "classici" filtri di Access ma volevo realizzare il tutto con pulsante passando la data del mese che devo filtrare. Chiedo quindi se la procedura che avevo pensato era corretta o se ci sono strade alternative: io pensavo di inserire un pulsante che apre una maschera popup con un controllo in cui inserisco la data del mese da filtrare, nella stessa maschera popup avro' anche il pulsante per applicare il filtro con cui vado a filtrare i records della prima maschera. Puo' andare bene cosi'?

25 Risposte

  • Re: Filtro maschera in base a dato esterno

    Prima di tutto devi usare come criterio il Mese w l'anno altrimenti trovi le fatture/bolle del 2010...

    Ora come vuoi fare la selezione devi vederlo tu...
    Io popolerei 2 combo Mese e Anno, usandole in modalità elenco valori, con la combo Mese con 2 colonne la prima nascosta connil Numero e la seconda con il Nome del mese, prepara la stringa ed incollala non serve codice...
    1;Gennaio;2;Febbraio;...12;Dicembre
    La combo anno popoli dal 2015 al 2030 e forzi come default value l'anno correntr cosi non dovrebbe servire la selezione, ma nel caso èfattibile.

    Per filtrare usa la conversione in stringa della data da cercare... e componi il criterio per concatenazione mmyyyy quindi:
    
    Dim sWhr as String
    SWhr="Format(CampoData,'mmyyyy')=" & me!combomese & me!comboanno
    Me.filter=sWhr
    Me.FilterOn=true
    Verifica il criterio dovrebbe andare bene cosi... ma non riesco a testarlo
  • Re: Filtro maschera in base a dato esterno

    Non entro nel merito perché non conosco come è strutturato il database.
    Però non usare una popup. Rimane sempre in primo piano ed è difficilmente gestibile per l immissione dati.
    EDIT: lascio il commento, ma quello da me suggerito non è una strada percorribile perche bolla e fattura hanno due date differenti e le cose si complicherebbero inutilmente.
    Io avrei creato una tabella in cui inserire le date ed un altra tabella collegata dove inserire le bolle collegata con la relativa tabella delle fatture relative. Avresti una superkey formata da data, idbolla, id fattura e basterebbe selezionare (filtrare)solo la data o il mese per avere subito tutti i documenti relativi, in un unica query di selezione.
  • Re: Filtro maschera in base a dato esterno

    Ma non è così... se si usano le Popup per orientare la scelta si aprono in modalità acDialog per renderle SINCRONE...
  • Re: Filtro maschera in base a dato esterno

    Buongiorno a tutti,
    ringrazio Alex per il supporto. Io ho proceduto nel seguente modo: ho inserito due combo nella maschera principale (ho abbandonato la popup...) nella prima a due colonne ho inserito i mesi da gennaio a dicembre ed il rispettivo numero da 1 a 12 che ho utilizzato come dato memorizzato, nella seconda ho inserito gli anni.
    Nel pulsante ho inserito il seguente codice:
    
    	Dim strDataFiltro as String
            strDataFiltro = "Format(DATAtabDFda,'myyyy')=" & Me!cboMese & Me!cboAnno
            Me.Filter = strDataFiltro & "AND [MEMOtabDFlf] Is Null"
            Me.FilterOn = True
    
    Mi da pero' l'errore: "Tipi di dati non corrispondenti nell'espressione criterio". Facendo il debug sulla variabile strDataFiltro nell'impostazione del filtro trovo il seguente dato "Format(DATAtabDFda,'myyyy')=92022". Nelle due combo e' impostato settembre 2022, quindi la concatenazione della data e' corretta.
    Presumo che il problema sia nella formattazione del campo DATAtabDFda.
    Ho modificato il codice di Alex da mmyyyy a myyyy perche' avendo numerato i mesi da gennaio a settembre da 1 a 9 pensavo potesse creare problemi.
    Qualche suggerimento?
  • Re: Filtro maschera in base a dato esterno

    Aggiungo un test che ho fatto sulla funzione format per capire cosa mi restituiva:
        
        dDataFiltro = DateSerial(cboAnno, cboMese, 1)
        dDataFiltro1 = Format(dDataFiltro, 'myyyy')
    
    le due variabili sono dichiarate Date, la seconda riga me la da rossa perche' non riconosce il format 'myyyy'; se metto i doppi apici ("myyyy") invece ma la da corretta come riga di codice.
    La prima variabile mi da come data: 01/09/2022 (cboMese=9, cboAnno=2022)
    La seconda variabile invece diventa: 11/12/2151
    C'e' qualcosa che non funziona nella Format...
  • Re: Filtro maschera in base a dato esterno

    Ho risolto il filtro nel modo seguente:
    
            dDataFiltro = DateSerial(cboAnno, cboMese, 1) 'valorizzo primo giorno del mese
            dDataFiltro1 = DateSerial(Year(dDataFiltro), Month(DateAdd("m", 1, dDataFiltro)), 0) 'valorizzo ultimo giorno del mese
            Me.Filter = "DATAtabDFda >=#" & Format(dDataFiltro, "mm/dd/yyyy") & "# AND DATAtabDFda <=#" & Format(dDataFiltro1, "mm/dd/yyyy") & "#" & "AND MEMOtabDFlf Is Null" 'creo il filtro
            Me.FilterOn = True 'applico
    
    Ora vorrei migliorare l'inserimento verificando che entrambe le combo siano compilate e ho scritto questo:
    
        Dim dDataFiltro As Date
        Dim dDataFiltro1 As Date
        
        If Me.cboMese.Value Is Empty Then
            MsgBox "Inserire mese da filtrare", vbOKOnly
            cboMese.SetFocus
            Exit Sub
        Else
        If Me.cboAnno.Value Is Empty Then
            MsgBox "Inserire anno da filtrare", vbOKOnly
            cboAnno.SetFocus
            Exit Sub
        Else
    
            dDataFiltro = DateSerial(cboAnno, cboMese, 1)
            dDataFiltro1 = DateSerial(Year(dDataFiltro), Month(DateAdd("m", 1, dDataFiltro)), 0)
            Me.Filter = "DATAtabDFda >=#" & Format(dDataFiltro, "mm/dd/yyyy") & "# AND DATAtabDFda <=#" & Format(dDataFiltro1, "mm/dd/yyyy") & "#" & "AND MEMOtabDFlf Is Null"
            Me.FilterOn = True
        End If
        End If
    
    Pero mi da il seguente errore sull prima If: "Necessario oggetto". Dove sbaglio?
  • Re: Filtro maschera in base a dato esterno

    Andava usato 'mmyyyy' faincome ti ho detto la logica è diversa... ed è più corretta non l'hai capita...?
  • Re: Filtro maschera in base a dato esterno

    Buongiorno Alex,
    Penso di aver capito la tua logica: cambiare la formattazione del campo da filtrare modificandolo in meseanno come la stringa composta dai due valori delle combo. L' ho provata ma non funziona, come da mio post precedente, sia con "mmyyyy" che con "myyyy" (vuole i doppi apici la funzione Format). Mi dà il messaggio di errore "Dati non corrispondenti....". Unico test che non ho provato è inserire la stringa delle combo fra gli hashtag. Forse è quello? Se riesco oggi faccio una prova....
  • Re: Filtro maschera in base a dato esterno

    Vuole apici singoli nella stringa.
    Serve per evitare di usare la data intera ma solo mese/anno quindi converte il campo data della tabella in un campo calcolato stringa e confronta le 2 stringhe...
  • Re: Filtro maschera in base a dato esterno

    Buongiorno Alex,
    ho fatto come hai detto
    
    Dim sWhr As String
    
        sWhr = "Format(DATAtabDFda,'mmyyyy')=" & Me!cboMese & Me!cboAnno
        Me.Filter = sWhr
        Me.FilterOn = True
    
    ma da errore:



    Puo' essere perche' confronta la la formattazione del campo data come meseanno (per cui e' comunque una data) e la confronta con una stringa e quindi dice che i tipi di dati non sono corrisponenti?
  • Re: Filtro maschera in base a dato esterno

    Di seguito allego anche come e' formattato il campo DATAtabDFda in tabella (a maggiore chiarezza):

  • Re: Filtro maschera in base a dato esterno

    Fai un Debug.print della stringa e mostrala...
  • Re: Filtro maschera in base a dato esterno

    Buongiorno a tutti,
    di seguito print screen del codice e della stringa:
  • Re: Filtro maschera in base a dato esterno

    Non hai capito qual'è il problema...? A me pare estremamente semplice da vedere...!!!!!!!!
    Il Format ha come definizione "mmyyyy" mentre tu con Settembre hai "9" e non "09"... quindi Formatta il dato con 2 Caratteri"
    sWhr = "Format(DATAtabDFda,'mmyyyy')=" & Format(Me!cboMese,"00") & Me!cboAnno
Devi accedere o registrarti per scrivere nel forum
25 risposte