Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19
  1. #11
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363
    Premetto che per fare un'applicazione come tu vorresti è necessario che tu impari a programmare in VBA (Visual Basic for Application) che è parente strettissimo di VisualBasic e VBScript.

    Devi tenere sempre presente che ogni volta che cambi un valore in una sequenza,
    (e quindi anche la prima volta che scegli un valore, visto che il valore di ogni controllo è NULL a meno che tu non abbia impostato la proprietà "valore predefinito"),
    devi ricalcolare i valori delle tendine ed impostare il valore a NULL dei controlli seguenti.

    Questo deve succedere, quindi, ogni volta che cambi il valore di un controllo.
    Devi utilizzare gli "eventi" in questo modo:
    Seleziona la combo "Studente" e guarda nella finestrella l'elenco degli eventi disponibili (ad es. "Prima di aggiornare", "Dopo aggiornamento", ecc...)
    In questo punto puoi scrivere del codice che verrà eseguito quando si verifica quel tale evento.
    Scegli ad es "Dopo aggiornamento". Questo è l'evento che avviene dopo che il valore che hai scelto viene effettivamente scritto nella combo.
    Per intenderci, all'inizio la combo vale NULL; poi apri la tendina e nel momento in cui clicchi su un valore per selezionarlo, questo valore viene scritto nel controllo ed viene eseguito il codice che avresti associato all'evento "Dopo aggiornamento".

    Tutto chiaro?

    Come scrivere questo codice?

    -continua-

  2. #12
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363
    -continua-

    Come scrivere questo codice?

    Non è difficile: vedi l'evento "Dopo aggionamento"? si presenta anch'esso come un a combo con un solo valore ("[Routine evento]"). Selezionala e poi clicca sui puntini (...) per editarla.
    Vedrai che si apre un editor testuale in cui viene automaticamente creata la SUB NomeControllo_AfterUpdate.
    Come dice il nome stesso, è il codice che viene eseguito dopo che il controllo viene aggiornato.
    Il cursore è già posizionato tra l'intestazione e la chiusura della SUB, sei pronto per scrivere?

    Bene, che deve succedere quando questo controllo viene aggiornato?

    1 - bisogna aggiornare i controlli "successivi" della tua sequenza.

    Scrivi:

    Me.cmbCorso.Requery

    Che significa: Me è la maschera attuale, cmbCorso è il nome del controllo da ricalcolare, Requery è il metodo da usare affinchè la combo si ricalcoli.

    Tutto chiaro?

    Ovviamente devi ripeterlo per tutti i controlli che devi aggiornare.

    2 - bisogna impostare a NULL i controlli "successivi" della tua sequenza.

    Scrivi Me.cmbCorso = NULL

    Beh, questo è più chiaro, no? Anche questo va ripetuto per ogni controllo che vuoi "azzerare".

    A questo punto puoi chiudere la finestra del codice, salvare la tua maschera e provarla.

    Studiare studiare!!

  3. #13
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    328
    Approfitto di un momento libero per segnalare una cosa a cui forse non avevamo pensato: adottando questo sistema, accade che la tabella viene riempita correttamente, ma nella MASCHERA ogni volta che si inserisce una nuova verifica si perdono i dati delle altre perché la combo box si aggiorna!
    In poche parole, se aggiungo un nuovo record, quando vado a guardare i record precedenti trovo le combo di Corsi e di MAterie vuote (a quella di studenti, che non subisce il filtraggio, non accade niente). Siccome la tabella viene riempita correttamente, è un problema solo di visualizzazione. Qualche idea?
    Il programmatore lo vedi dal coraggio, dall'altruismo, dalla fantasia...

  4. #14
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    328
    Up!
    Il programmatore lo vedi dal coraggio, dall'altruismo, dalla fantasia...

  5. #15
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363
    Mi resta solo da capire come faccio a visualizzare il nome invece dell'ID nella Combo (di solito cambiavo formato/larghezza righe mettendo 0 in quella dell'ID, ma in questo modo poi le query vanno a farsi benedire)...
    Approfitto di un momento libero per segnalare una cosa a cui forse non avevamo pensato: adottando questo sistema, accade che la tabella viene riempita correttamente, ma nella MASCHERA ogni volta che si inserisce una nuova verifica si perdono i dati delle altre perché la combo box si aggiorna!
    In poche parole, se aggiungo un nuovo record, quando vado a guardare i record precedenti trovo le combo di Corsi e di MAterie vuote (a quella di studenti, che non subisce il filtraggio, non accade niente). Siccome la tabella viene riempita correttamente, è un problema solo di visualizzazione. Qualche idea?
    Non sono problemi facili da risolvere senza conoscere bene il codice. La soluzione più semplice è "dare la sveglia" alle combo:
    Scegli uno dei "record precedenti". Apri la tendina e clicca sul nome dello studente già selezionato. Vedrai che le tendine delle combo seguenti saranno ok (...dovrebbero ).
    Ovviamente lo devi fare ogni volta che cambi record...

    Ora sono un po' incasinato e non riesco a fare prove adeguatamente approfondite.
    Però posso dirti che nelle combo devi utilizzare correttamente queste proprietà:

    - origine riga: dove imposti la query che popola la tendina
    - numero colonne: si spiega da sè
    - colonna associata: indica tra le colonne che hai inserito nella combo, il numero di quella da cui prendere il valore. Nel tuo caso sarà giustamente la colonna dell'ID
    - larghezza colonne: serve a definire il layout. Se non vuoi che si veda l'ID, è giusto che metti la larghezza della rispettiva colonna a zero.

    Sappimi dire.
    Ciao.

  6. #16
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    328
    Originariamente inviato da longline


    Non sono problemi facili da risolvere senza conoscere bene il codice. La soluzione più semplice è "dare la sveglia" alle combo:
    Scegli uno dei "record precedenti". Apri la tendina e clicca sul nome dello studente già selezionato. Vedrai che le tendine delle combo seguenti saranno ok (...dovrebbero ).
    Ovviamente lo devi fare ogni volta che cambi record...

    è una cosa che avevo già notato. l'unico problema è che i DATI restano esatti (e già è un passo avanti ), mentre la visualizzazione maschera resta poco elegante dovendo ricliccare ogni volta sul nome studente... Ma per ora lo lascio così e pazienza...
    Vorrà dire che metterò una casella di testo tipo "attenzione: quando passi da un record ad un altro, riseleziona il nome studente altrimenti gli altri campi saranno invisibili!"

    Originariamente inviato da longline

    Ora sono un po' incasinato e non riesco a fare prove adeguatamente approfondite.
    Però posso dirti che nelle combo devi utilizzare correttamente queste proprietà:

    - origine riga: dove imposti la query che popola la tendina
    - numero colonne: si spiega da sè
    - colonna associata: indica tra le colonne che hai inserito nella combo, il numero di quella da cui prendere il valore. Nel tuo caso sarà giustamente la colonna dell'ID
    - larghezza colonne: serve a definire il layout. Se non vuoi che si veda l'ID, è giusto che metti la larghezza della rispettiva colonna a zero.

    Sappimi dire.
    Ciao.
    Queste sono cose che avevo già fatto. Da questa parte tutto ok
    Il programmatore lo vedi dal coraggio, dall'altruismo, dalla fantasia...

  7. #17
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    328

    RISOLTO!!

    Ok ho trovato la soluzione. Nelle proprietà Maschera, ho associato all'evento "Corrente", che significa "macro eseguita quando lo stato attivo viene spostato da un record ad un altro" , una macro che fa nell'ordine il requery delle tre combo (studenti, corsi, materie). In questo modo la visualizzazione resta sempre corretta.
    Ora aggiungiamo una piccola finezza per evitare che chi deve inserire i dati vada ad operare prima su corsi o su materie, e obbligarlo a inserire i dati nell'ordine da noi scelto:
    Impostiamo le proprietà abilitato delle combo corsi e materia a no. In questo modo verranno visualizzate in grigio e saranno non selezionabili. Ora, nella requery di corsi (quella per intenderci che abbiamo inserito per l'evento "dopo aggiornamento" della combo studenti) aggiungiamo il comando imposta valore in questo modo :[Maschere]![Verifiche]![ID Anacorsi].[Enabled] = true e facciamo la stessa cosa nella requery di materie. In questo modo, quando clicco su studenti verrà abilitata la combo corsi e successivamente al clic sulla combo corsi verrà abilitata la combo materie.
    Ora l'ultima cosa: dopo queste operazioni le combo corsi e materie resteranno attive anche se cambio record. Quindi torniamo alle proprietà di maschera e all'evento corrente aggiungo imposta valore [Maschere]![Verifiche]![ID Anacorsi].[Enabled] = false.
    Stessa cosa per la combo Materie ed il gioco è fatto.

    Sono contento :adhone:

    Grazie Longline!
    Il programmatore lo vedi dal coraggio, dall'altruismo, dalla fantasia...

  8. #18

    ...

    ...

  9. #19
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363
    Mi sembra che tu abbia capito come funziona tutta la faccenda...

    Beh, che dire... Buon lavoro!

    Ciao!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.