Maschera di input di support a report.

di il
12 risposte

Maschera di input di support a report.

Ho pedissequamente eseguito le indicazioni del supporto microsoft per access 2007, per costruire una maschera che accetti i parametri da inserire nel report sottostante, dove visualizza i dati. Diciamo che funziona discretamente (a mano), poichè quando eseguo la macro "OK", richiamata dal pulsante sulla maschera, mi da il seguente messaggio: "Impossibile trovare il nome di funzione immesso nell'espressione" . Ho notato che nel gruppo delle macro che si appoggiano alla maschera (4), 3, tra cui quella del tasto "OK", che dovrebbe chiudere la maschera e ritornare al report con i dati dei parametri, hanno all'inizio riga un triangolino giallo con il !, segnalandomi che il da non è attendibile. Ho creato un percorso in centro protezione dove è situato il db, ma non c'è verso.
Le macro in questione sono così stutturate:
Nome macro condizione azione argomento
1) Apri maschera ApriMaschera Raccolta_ parametri_MASCH; Maschera; ; ; Modifica; Dialogo
Not Caricata("Raccolta_ Parametri_MASCH") AnnullaEvento
2) Chiudi raccolta parametri Chiudi Maschera; Raccolta_ parametri_MASCH; No
3) OK ImpostaValore [Visible]; No
4) ANNULLA Chiudi Maschera; Raccolta_ parametri_MASCH; No
Ribadisco che all'inizio del rigo 2-3-4 appare il triangolino giallo.
La maschera viene richiamata su evento apertura report con la macro 1. Dopo aver inserito i parametri e cliccando sul tasto OK viene fuori l'errore e non si vede più niente.
Ho provato a convertire le macro in moduli vba ma, forse perchè non so sostituirli, con poco costrutto in quanto non riesco a comprendere dove devono essere inserite le nuove istruzioni in sostituzione delle macro. Ho provato a sostituirle con [routine evento] ma senza successo. Inoltre ho notato che le macro convertite HANNO LO STESSO NOME DELLE MACRO ORIGINARIE. Solo nel modulo c'è il nome:MACRO RICERCA_PARAMETRI_CONVERTITE
nella speranza di essere stato esaustivo, vi ringrazio anticipatamente per l'aiuto.
Gianni Terranova

12 Risposte

  • Re: Maschera di input di support a report.

    Vari problemi di comprensione (almeno per me):
    1. "Maschera di input" è un concetto ben preciso che non ha nulla a che vedere con le "maschere".
    2. Io non riesco affatto a figurarmi l'intero tuo scenario, cosa devi fare (passo passo), ecc...
    3. Nel forum quasi nessun utente usa le macro (io le usavo tanti anni fa) e, considerando l'elaborazione un passettino al di là delle potenzialità delle macro, si preferisce vivamente cedere il passo al codice VBA.

    Racconta tutto più chiaramente, dettagliatamente:
    - nome proprio maschera: Raccolta_ parametri_MASCH: OK.
    - nome proprio report
    - nomi propri dei controlli/campi che entrano in gioco
    - hai parlato di ImpostaValore e Annulla...non si capisce a cosa si riferiscono
    - rispiega tutto quello che DEVI FARE (...sempre passo passo!) usando i nomi propri
  • Re: Maschera di input di support a report.

    La ringrazio per la tempestività nella risposta. Circa 15 anni fa ho partecipato ad un progetto, per la realizzazione presso un ospedale di Palermo, per la realizzazione di un centro per i disturbi alimentari. Tale ambulatorio, inizialmente verteva su tre endocrinologi e tre pomeriggi a settimana. Si verificò un afflusso inaspettato che portò, siamo in Italia, alla quasi chiusura del centro. Io, dovevo occuparmi della parte amministartiva ed informatica. Inzia pertanto, nonostante la scolastica conoscenza di access, a tentare di informatizzare la gestione dell'ambulatorio che avveniva solo ed esclusivamente sul cartaceo. Uno deri tre endocrinologi, capiarbamente ed in modo assolutamente volontario, continuò l'operato, sempre su schede cartacee, che ad oggi sommano più di 10 raccoglitori. Naturalmente, non potendo tralasciare il mio lavoro, desistetti dal portare avanti la costruzione del db. Durante il periodo della quarantena però, ho ripreso il progetto, e devo dire che, di riffa o di raffa, sono riuscito a fare, scolasticamente, quello che mi ero prefisso. L'ultimo step era appunto quello di creare una maschera dove inserire i "criteri" per la query sottostante al report, per elaborare i dati inseriti nella maschera. Ad esempio: Pazienti m/f; range di date di accesso; valori glicemici; età. Ho seguito pedissequamente il supporo microsoft per la costruzione della maschera e devo dire che i comandi vengono eseguiti, ma purtroppo sorgono i problemi che Le ho già accennato.
    I campi della query di supporto al report sono più di 50, ed ogni campo potrebbe essere ipoteticamente impegnato nell'introduzione dei dati.
    Scusandomi per la prolissità volevo chiederLe come si fa a sostituire le macro originarie con i codici vba convertiti dalle macro, e come sia possibile stampare nel report, solo i dati inseriti nella maschera di input.
    Qualora Lo ritenga opportuno, potrei inviarLe il file costruito con nomi di fantasia.
    Grazie anticipatamente
    Cordialità
    Gianni Terranova
  • Re: Maschera di input di support a report.

    Comprendo il problema passaggio da cartaceo a informatico. Mi ci sono imbattuto anch'io in ambito medico, poi sorgono le complicazioni di impostazione del tutto perché i medici sanno fare i medici e non hanno la più pallida idea di come si deve impostare un DATABASE soprattutto NORMALIZZATO.
    Secondo me il tuo problema non è soltanto "come passare da macro a VBA", ma cercare di rivedere tutto il progetto...e magari scoprirai che ci sono altre strade più "consone" da intraprendere.
    Il forum non può risolvere i "grandi" problemi. Per queste cose occorre affidare il lavoro ai professionisti.

    La descrizione che hai fornito è molto imprecisa. Tanto per cominciare, siamo sicuri che il database è normalizzato? Per saperlo ho bisogno della seguente descrizione dettagliata:
    - nomi propri di tutte le tabelle
    - nomi propri di tutti i loro campi con indicazione della chiave primaria
    - le relazioni
    In alternativa puoi allegare una immagine della Finestra Relazioni.
  • Re: Maschera di input di support a report.

    Ancora grazie. Tutto ciò che Lei mi chiede è difficilissimo da fornirLe. In quanto i campi, le tabelle, le query, maschere e report sono innumerevoli. Ribadisco che sicuramente ciò che ho progettato è sicuramente scolastico, e perfettibile. Di riffa o di raffa, sono riuscito ad arrivare dove volevo. L'ultimo step/ostacolo riguarda la maschera dove inserisco i dati che sono i criteri della query a supporto al report. Ho visto che quello che scrivo nelle caselle di testo, vengono richiamati nel report. Solo non riesco a filtrare i dati in base agli operatori logici. Mi spiego meglio. Casella di testo: Età. Se inserisco nella casella un valore preceduto dal " < > <>" non ne tiene conto e restituisce nel report tutto blank. Esempio: se nella casella età inserisco >50, per ricercare tutti quelli con età maggiore di 50, non funziona. Se inserisco solo l'età esatta, allora il filtro funziona. Ho notato che se l'operatore lo digito nella riga criteri della query, funziona. In sintesi da casella di testo non riesco ad immettere nella riga dei criteri del campo età, l'operatore logico.
    Di nuovo un sentito ringraziamento per la pazienza.
    Gianni Terranova
  • Re: Maschera di input di support a report.

    Mi piacerebbe vedere la Query che hai scritto o come passi i parametri di criterio... siamo a 3 messaggio e non si è capito.
    Allora se devi filtrare il Report devi usare il Parametro WHERE della funzione OPENREPORT.
    La WHERE Condition impone una sintassi che deve essere corretta, tu cosa fai...?
    Il Tipo di campo poi condiziona molto anche il criterio, e la sintassi... se numero se stringa se data... insimma, ora fermiamoci e diamo qualche dettaglio TECNICO serio.

    P.S: lascia stare le macro, altrimenti questa cosa non la farai mai.
  • Re: Maschera di input di support a report.

    Grazie. La query, che fa riferimento ad una tabella [anagrafica pazienti], ove è presente una campo [età] numerico, ha nella riga criteri del campo [età] il riferimento alla casella testo della maschera [forms]![nomemaschera]![età]. la ctxt della maschera [età] è numerico. Se nella ctxt [età] della maschera inserisco un valor esistente allora il filtro funziona. Ma se, ad esempio, volessi filtrare i pazienti in base all'età >50, inserendo nella ctxt il valore >50, giustamente restituisce nulla. Se invece l'operatore > è presente nella riga del criterio prima del riferimento alla ctxt della maschera filtra. Ma, naturalmente quelli solo > di e non anche <di o <>. Spero di essere stato questa volta esaustivo. Mi scuso per le eventuali imprecisioni, ma dopo circa 15 anni, causa lookdown, ho riesumato questo progetto insieme alla voglia di approfondire la conoscenza di access.
    Ancora grazie.
    Cordialità.
    Gianni Terranova
  • Re: Maschera di input di support a report.

    Purtroppo il look down ha fatto danni... oltremodo.
    LA QUERYYYYY...!!!!!!!! Se non la mostri non capiamo il perché di quello che dici...!!!!!!
  • Re: Maschera di input di support a report.

    Scusa Alex se insisto.
    Ho una maschera [PARAMETRI] nella quale inserisco dei parametri per filtrare i record di una tabella, tramite una query sottostante [queryparametri].
    Ho un campo età (numerico), dove inserisco l'età del cliente, e fin qui tutto bene. L'espressione nella riga del criterio di età, è la seguente:
    (LIKE "*" & [FORMS]![PARAMETRI]![ETA'] & "*"). In questo modo (credo poco ortodsso) riesco ad avere tutti i records anche se scrivo 50 nel campo. O meglio mi vengono restituiti i records dove nell'età è presente il numero "5". E già questo è un errore.
    Inoltre vorrei ottenere un filtro, sempre sul campo età (naturalmente in maschera non associato) inserendo prima della cifra nel campo [ETA'] un operatore di confronto. (< > >= <= etc). Quando lo faccio, giustamente, non trova records.
    Però se ">50" lo inserisco direttamente nella riga del criterio, restituisce i valori corretti. Ho visualizzato la sequenza SQL e chiaramente nel WHERE riporta il parametro >50.
    Cosa devo scrivere nella riga del criterio per ottenere ciò? E' possibile che debba creare nella maschera un casella di testo con gli operatori e poi unirla con quella dell'età? Se si, ti prego di scrivere dettagliatamente cosa devo fare.
    Scusami per il disturbo.
    Grazie.
    Giater55
  • Re: Maschera di input di support a report.

    Ho già provato a spiegarti che il CRITERIO ha una sintassi in relazione al TIPO di dato.
    Nel tuo caso è un NUMERO ed il predicato che scrivi non va bene.
    Nel tuo caso poi per avere la flessibilità di inserimento devi usare i FILTRI da passare ad OPENREPORT anche questa cosa già detta.

    Non aggiungo altro.
  • Re: Maschera di input di support a report.

    Grazie Alex.
    Come già da tua precedente risposta, avevo capito che vi era una discrasia, tra il tipo di campo e la riga del criterio.
    Purtroppo ancora, non sono in grado di capire quali siano le giuste istruzioni per fare ciò che vorrei. L'operatore dove lo indico? Ho bisogno di un codice VBA nella routine evento sul campo [ETA']?
    Grazie ancora.
    Giater55
  • Re: Maschera di input di support a report.

    Il Campo [ETA] non si deve chiamare con l'Accento, solo la Descrizione deve avere l'accento...

    Puoi mettere un Pulsante e su Evento Click Applichi il Criterio ricostruendolo.
    Esempio
    
    Dim strWHR  As String
    If Len(Me.txtAnni & vbNullstring)>0 Then  '<--- Questo controlla se la TextBox per l'inseriemnto ANNI è valorizzata
       If IsNumeric(Me.TxtAnni) Then              '<--- Questo controlla se la TextBox per l'inseriemnto ANNI è valorizzata con colo un numero
           strWHR="Anni = " & me.txtAnni         ' in questo caso deve mettere "=" come confronto
       Else
           strWHR="Anni " & me.txtAnni           ' Se non era un numero significa che hai scritto anche il metodo di confronto "<50"
       End if
    End if
    Me.Filter=strWHR
    Me.FilterOn=True
    Ovviamente manca la validazione del DataEntry, potresti scrivere anche Pizza50...

    Personalmente trovo questo metodo tecnicamente errato, facile d manomettere e bisognoso di molti controlli.

    Fossi in te avrei usato 2 Controlli, una TextBox ed una ComboBox precaricata con "=;<=;>=,<;>" per i campi Numerici.

    Io feci un sistema che sfruttava 3 Controlli:
    1° Combo(Elenco Campi oggetto di Filtro/Ricerca)
    2° Criterio di Confronto( "=;<;<=;>;>=;<>;NULL;NOT NULL" ecc...)
    3° Valore di Ricerca

    A quel punto a seconda del tipo di campo selezionato dalla 1° Combo, vado a popolare la 2° combo...:
    
    Private Function FillCritCBO(fldType As dao.DatabaseTypeEnum) As String
    
        Dim sRowSource          As String
        
        Select Case fldType
            Case dbText:            sRowSource = "=;<>;BEGIN WITH;NOT BEGIN WITH;CONTAINS;NOT CONTAINS;END WITH;NOT END WITH;NULL;NOT NULL"
            Case dbChar:            sRowSource = "=;<>;BEGIN WITH;NOT BEGIN WITH;CONTAINS;NOT CONTAINS;END WITH;NOT END WITH;NULL;NOT NULL"
            Case dbMemo:            sRowSource = "BEGIN WITH;NOT BEGIN WITH;CONTAINS;NOT CONTAINS;END WITH;NOT END WITH;NULL;NOT NULL"
            Case dbDate:            sRowSource = "=;<;<=;>;>=;<>;NULL;NOT NULL"
            Case dbCurrency, _
                 dbLong, _
                 dbInteger, _
                 dbByte, _
                 dbDecimal, _
                 dbDouble, _
                 dbSingle, _
                 dbNumeric
                                    sRowSource = "=;<;<=;>;>=;<>;NULL;NOT NULL"
                                    
            Case Else:              sRowSource = "="    ' BOOLEAN ....
        End Select
        FillCritCBO = sRowSource
    End Function
    Ovviamente poi devi gestire tutto... e serve solo un poco di visione della funzione.
    Tutto quello che ti ho detto lo trovi in questo DEMO:
    forum.masterdrive.it/access-79/msaccess-gestione-filtri-ordinamento-101267/
    Ci sono le funzioni di ricostruzione dei criteri, per popolare le combo ecc...
  • Re: Maschera di input di support a report.

    Grazie.
    Giater55
Devi accedere o registrarti per scrivere nel forum
12 risposte