+ Rispondi al Thread
Pagina 2 di 2 primaprima 12
Visualizzazione dei risultati da 11 a 18 su 18

Discussione: Aggiornare menu a tendina da macro

  1. #11
    gionatan84 non è in linea Novello
    Post
    9
    Per quanto riguarda la storia delle chiavi primarie, ti confermo che al momento sono solo testi descrittivi inseriti da me, senza alcun controllo. Condivido in pieno tutte le problematiche che hai suggerito, ma mi sono fermato prima di proseguire perché, sebbene sia un "gioco da ragazzi", non mi raccapezzo con il WHERE.

    La query che ho provato a creare è
    codice:
    UPDATE [Scheda Personale], Classi SET [Scheda Personale].Classe = [Classi]![ClasseSuccessiva]
    WHERE (((Classi.Classe)=[Maschere]![Scheda Personale]![Classe]) AND ((Classi.Nazione)=[Maschere]![Scheda Personale]![Nazione]))
    Mi rendo conto che qualcosa non va, manca qualcosa, ma non riesco a capire come correggere.

  2. #12
    Phil_cattivocarattere non è in linea Scribacchino
    Luogo
    Verona-Mantova
    Post
    1,688
    Quote Originariamente inviato da gionatan84 Visualizza il messaggio
    Per quanto riguarda la storia delle chiavi primarie, ti confermo che al momento sono solo testi descrittivi inseriti da me, senza alcun controllo.
    Ma c'è una chiave primaria nella tabella Classi? Ci le relazioni tra le tabelle?
    Quote Originariamente inviato da gionatan84 Visualizza il messaggio
    ...non mi raccapezzo con il WHERE.
    ...
    Mi rendo conto che qualcosa non va, manca qualcosa, ma non riesco a capire come correggere.
    Io ho sempre pensato alla query come un'operazione massiva, da avviare con un pulsante una volta l'anno ad esempio.
    Questa protrebbe essere una query di quel tipo, che ho creato in QBE (nelle mie prove ho chiamato la tabella Studenti, non Scheda Personale)
    codice:
    UPDATE Nazioni INNER JOIN (Studenti INNER JOIN Classi ON (Studenti.nazione = Classi.Nazione) AND 
    (Studenti.classe = Classi.Classe)) ON Nazioni.ID = Classi.Nazione SET Studenti.classe = [ClasseSuccessiva]
    Se vuoi creare un comando per "aumentare" la classe di un singolo studente nella maschera è sufficiente aggiungere una where condition a questa query ed eseguirla con il metodo Execute.
    codice:
    DbEngine(0)(0).Execute "UPDATE Nazioni INNER JOIN (Studenti INNER JOIN Classi ON (Studenti.classe = Classi.Classe) AND 
    (Studenti.nazione = Classi.Nazione)) ON Nazioni.ID = Classi.Nazione SET Studenti.classe = [ClasseSuccessiva] 
    WHERE Studenti.ID="  & Me!IDStudente
    Me.Requery
    (nella scrittura del codice sono andato a capo intenzionalmente per non dover scorrere con la barra in orizzontale ma la stringa dopo Execute ovviamente, come tutte le stringhe, segue le regole generali di VBA)
    Ultima modifica di Phil_cattivocarattere; 06-07-2017 10:40 

  3. #13
    gionatan84 non è in linea Novello
    Post
    9
    Quote Originariamente inviato da Phil_cattivocarattere Visualizza il messaggio
    Ma c'è una chiave primaria nella tabella Classi? Ci le relazioni tra le tabelle?
    Si, certamente.

    Quote Originariamente inviato da Phil_cattivocarattere Visualizza il messaggio
    codice:
    UPDATE Nazioni INNER JOIN (Studenti INNER JOIN Classi ON (Studenti.nazione = Classi.Nazione) AND 
    (Studenti.classe = Classi.Classe)) ON Nazioni.ID = Classi.Nazione SET Studenti.classe = [ClasseSuccessiva]
    Così funziona perfettamente. Purtroppo è necessario scorrere al record successivo per visualizzare l'aggiornamento, ma va bene.

    Grazie mille per l'aiuto!

  4. #14
    gionatan84 non è in linea Novello
    Post
    9
    Già che ci siamo chiedo un'altra cosa. Premendo il pulsante, dopo i messaggi di notifica, la query aggiorna il campo classe in tutti i record.
    E' possibile visualizzare un messaggio che mi indica in che data è stato fatto l'ultimo aggiornamento?
    Servirebbe per evitare errori accidentali.

    Ancora grazie!

  5. #15
    Phil_cattivocarattere non è in linea Scribacchino
    Luogo
    Verona-Mantova
    Post
    1,688
    Quote Originariamente inviato da gionatan84 Visualizza il messaggio
    ..
    E' possibile visualizzare un messaggio che mi indica in che data è stato fatto l'ultimo aggiornamento?
    Servirebbe per evitare errori accidentali.
    Solo se memorizzi da qualche parte la data di modifica dei record specifico per l'aggiornamento della classe, a livello di singolo studente aggiungendo un campo alla tabella "Scheda Personale", oppure a livello di intera tabella (quando avviene l'aggiornamento massivo) ed in questo caso potresti valutare la possibilità di creare una tabella apposita che memorizza l'informazione (o un file esterno). Non è sufficiente memorizzarlo in qualche variabile vba perché è un dato che deve essere mantenuto anche dopo la chiusura di Access.
    Modificando adeguatamente la query potresti inserire anche un intervallo di tempo per selezionare i record da aggiornare, affinché l'operazione massiva sia fatta solo sugli studenti che hanno l'ultima data di modifica della classe inferiore, superiore, o uguale ad una certa data oppure ancora all'interno o all'esterno di un intervallo di tempo.

  6. #16
    gionatan84 non è in linea Novello
    Post
    9
    Ho provato a fare come hai detto tu, ma la cosa è un po' oltre le mie conoscenze attuali.
    Mi sono mosso così:
    1. Inserito pulsante di comando "Aggiorna Classe" nella maschera che esegue la query di aggiornamento;
    2. Nella tabella "SchedaPersonale" ho aggiunto un campo data chiamato "Data_Aggiornamento", collegato anche alla maschera
    3. Nel pulsante "Aggiorna Classe" che sul click, in evento, ha la macro incorporata che esegue la query, ho aggiunto l'azione ''ImpostaValore; Elemento="Data_Aggiornamento", Espressione=Date()

    Qui mi sono fermato perché, se aggiorno la prima volta, funziona tutto e ritrovo la data attuale nel campo "Data_Aggiornamento", ma se rieseguo l'aggiornamento, segnala un errore dovuto alle due azioni sul click del pulsante. Ho provato a modificare il messaggio di errore creando un MsgBox ad hoc con la modifica del form_Error e in parte ci sono riuscito, ma non scorre liscio e si ripresenta l'errore di access.

  7. #17
    Phil_cattivocarattere non è in linea Scribacchino
    Luogo
    Verona-Mantova
    Post
    1,688
    Quote Originariamente inviato da gionatan84 Visualizza il messaggio
    ... Qui mi sono fermato perché, se aggiorno la prima volta, funziona tutto e ritrovo la data attuale nel campo "Data_Aggiornamento", ma se rieseguo l'aggiornamento, segnala un errore ...
    io mi sarei fermato ancora prima perché con le macro non so fare quasi niente. Già di suo la procedura è "delicata" (massiva, singola, verifica della data precedente) se poi ci mettiamo che tu dici che va un po' oltre le tue conoscenze attuali e che io non so usare le macro... non ti sono più di alcun aiuto, se non dicendoti di affrontare tutto con codice vba: ci sono troppe cose a cui fare attenzione perché possano essere agevolmente e flessibilmente gestite con macro (o forse perché non le so usare).

  8. #18
    gionatan84 non è in linea Novello
    Post
    9
    Tranquillo Phil, sei già stato di grande aiuto.
    Grazie mille!

+ Rispondi al Thread
Pagina 2 di 2 primaprima 12

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi