[Risolto] Macro che aggiorna due formulari

Discussioni sulle caratteristiche di database
Rispondi
Stefano V.
Messaggi: 136
Iscritto il: domenica 31 marzo 2019, 15:51

[Risolto] Macro che aggiorna due formulari

Messaggio da Stefano V. »

 Editato: Argomento staccato da altro analogo e reso autonomo (Admin) 
Domanda, esiste una macro che aggiorni contemporaneamente due formulari ma da attivarsi schiacciando un unico tasto piuttosto che modificando il contenuto di una listbox?

O si può fare senza una macro?
Grazie
Ultima modifica di Stefano V. il venerdì 31 maggio 2019, 0:55, modificato 1 volta in totale.
LibreOffice Versione: 7.5.9.2 installata su macOS Big Sur 11.7.10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro che aggiorna due formulari

Messaggio da charlie »

Ciao, certo. È possibile assegnare ad un pulsante una macro come questa:

Codice: Seleziona tutto

SUB Update
DIM oDoc AS OBJECT
      DIM oDrawpage AS OBJECT
      DIM oForm AS OBJECT
      oDoc = thisComponent
      oDrawpage = oDoc.drawpage
      oForm = oDrawpage.forms.getByName("MainForm1")
      oForm.reload()
      oForm = oDrawpage.forms.getByName("MainForm2")
      oForm.reload()
END SUB
dove MainForm1 e MainForm2 sono i nomi dei tuoi formulari.
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Stefano V.
Messaggi: 136
Iscritto il: domenica 31 marzo 2019, 15:51

Re: Macro che aggiorna due formulari

Messaggio da Stefano V. »

Grazie Charlie. :D Era quello che cercavo, domani posto un db di esempio.
LibreOffice Versione: 7.5.9.2 installata su macOS Big Sur 11.7.10
Stefano V.
Messaggi: 136
Iscritto il: domenica 31 marzo 2019, 15:51

Re: Macro che aggiorna due formulari

Messaggio da Stefano V. »

Ciao Charlie,
ho applicato la macro suggerita a un tasto (nella sezione Eventi > Eseguire l'azione). Ho visto che, per funzionare, il tasto predetto deve essere collegato al "Main form" per poter aggiornare contemporaneamente i due SubForm1 e SubForm2. A questo punto avrei bisogno di un chiarimento: ogni volta che modifico il contenuto della list box, e premo il tasto affinché l'operazione di contemporaneo aggiornamento venga eseguita (come effettivamente succede), devo sempre confermare la richiesta di modifica del formulario nella finestra pop-up che viene fuori. Si può evitare questo fastidioso passaggio?
Grazie molte.

posto il db di esempio dell'argomento originario
Allegati
PROVA-2.odb
(129.84 KiB) Scaricato 156 volte
LibreOffice Versione: 7.5.9.2 installata su macOS Big Sur 11.7.10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro che aggiorna due formulari

Messaggio da charlie »

Ciao, la macro che ti ho suggerito non è molto efficiente.
Dovrebbe esserlo questa, da assegnare all'evento Modificato della ListBox:

Codice: Seleziona tutto

Sub RefreshForm (oEvent As Object) 'assign this macro to List Box > Events > Execute
      oListBox = oEvent.Source.Model 'create an object model from List Box event
      oListBox.commit() 'save the List Box selection to the host data-Form
      oForm = oListBox.Parent 'get the host Form object from the List Box model object   
      oForm.UpdateRow() 'save the data-Form content to the current data-source record
      oForm.Reload 'reload the Form to trigger SubForm refresh
End Sub
In questo modo non serve più nemmeno il pulsante.

Nel file che allego, ho modificato anche la query (Ricerca2) semplificando la tua precedente Ricerca1.
Allegati
Prova-3.odb
(129.54 KiB) Scaricato 165 volte
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Stefano V.
Messaggi: 136
Iscritto il: domenica 31 marzo 2019, 15:51

Re: Macro che aggiorna due formulari

Messaggio da Stefano V. »

Grazie Charlie, mi sembra di capire che questa macro era quella suggerita nel post originale ma nel "vero" database che sto elaborando non ci sono effettivamente listbox, invece il "tasto" aggiorna è indispensabile. Ora provo a snellirlo per poterlo postare così capisci meglio. Ho usato il db originale del post, cioè quello che tu mi hai gentilmente restituito corretto solo perchè nella sua prima versione aveva 2 "tasti aggiorna" successivamente ridotti a uno, ed era di piccole dimensioni. Grazie in ogni caso.
LibreOffice Versione: 7.5.9.2 installata su macOS Big Sur 11.7.10
Stefano V.
Messaggi: 136
Iscritto il: domenica 31 marzo 2019, 15:51

Re: Macro che aggiorna due formulari

Messaggio da Stefano V. »

Ciao Charlie,
Questo il database snellito, dove mi servirebbe quella macro sul tasto "aggiorna" che contemporaneamente aggiorni i sub formulari "ricerca","calcolo maschi", "calcolo femmine", ecc... e come vedi, ogni volta, che inserisci un parametro di ricerca devi necessariamente confermare prima di premere "cerca".
Questo è un problema anche se in realtà è secondario....

Visto che te l'ho mandato, il database, però, avrei un altro quesito più importante al quale non sono riuscito da solo a dare una risposta.

Mi piacerebbe aggiungere un parametro di ricerca dei trovatelli, per anno di nascita, senza dover inserire nelle caselle "data tra" ed "e" i soliti 01/01/XXXX e 31/12/XXX, ma inserendo direttamente in un'apposita casella del form ricerca, chiamata "Anno", direttamente l'anno di interesse e trovare così, tutti i bambini nati nel dato anno.

come vedi l'istruzione sql che gestisce il subformulario "ricerca" è basata sulla tabella "t_Proietto" che ha la colonna della data di nascita in formato GG/MM/AAAA e se io vi inserisco una riga tipo "and (( "Data Nascita" = :Var_ANX) OR (:Var_ANX IS NULL)) aggiungendo "Anno" a "Collega da" e la variabile Var_ANX a "Collega per", ovviamente quando inserisco un anno XXXX nella casella di testo creata al riguardo (e collegata alla corrispondente colonna della tabella "t_Filtro") la ricerca non funziona. Ora questa riga e la variabile l'ho cancellata.

Avevo tentato di aggirare l'ostacolo basando tutta la ricerca non sulla tabella "t_Proietto" ma su una query (che c'è ancora) che si chiama Estrai, che in pratica riproduce l'esatto contenuto della "t_Proietto" con in più una colonna dove ho estratto dalla data di nascita il solo anno, ma la cosa non funziona perché all'avvio non mi vengono caricati i contenuti e mi viene detto che la colonna "data nascita è già esistente".

Ti ringrazio se potrai aiutarmi.
Allegati
Trovatelli funzionante.odb
(46.43 KiB) Scaricato 148 volte
LibreOffice Versione: 7.5.9.2 installata su macOS Big Sur 11.7.10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro che aggiorna due formulari

Messaggio da charlie »

Ciao, secondo me (ho fatto qualche prova positiva) puoi adoperare l'ultima macro che ho allegato ed usarla assegnandola all'evento Testo modificato di AA, di MM e di GG, e all'evento Alla perdita del punto focale per le date.
Fai una verifica.

Per quanto riguarda la ricerca per anno, sono in difficoltà a mettere le mani su questo codice:
Schermata 2019-05-27 alle 14.35.10.png
:shock: :shock: :shock:
dovresti inserire qualcosa di simile

Codice: Seleziona tutto

OR "t_Filtro"."Anno" = YEAR("t_Proietto"."Data Nascita") ....
cioè ricavare l'anno direttamente dalla data di nascita.
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Stefano V.
Messaggi: 136
Iscritto il: domenica 31 marzo 2019, 15:51

Re: Macro che aggiorna due formulari

Messaggio da Stefano V. »

Grazie Charlie, posto il db con al macro suggerita. A volte è un po' sgangherato :D , quando si inseriscono data "tra" ed "e", però il concetto è chiaro e tutto sommato funzionante.

Per quanto riguarda la ricerca per anno, le istruzioni sql erano semplicemente:

Codice: Seleziona tutto

SELECT * FROM "t_Proietto" WHERE  ( "Anni" = :Var_ANN OR :Var_ANN IS NULL ) 
AND ( "Mesi" = :Var_MES OR :Var_MES IS NULL ) 
AND ( "Giorni" = :Var_GRN OR :Var_GRN IS NULL ) and
(( "Data Nascita" >= :Var_MIN) OR (:Var_MIN IS NULL)) and
(( "Data Nascita" <= :Var_MAG) OR (:Var_MAG IS NULL)) and
(( "Data Nascita" = :Var_ESA) OR (:Var_ESA IS NULL))
effettivamente si sono moltiplicate :D :D come i pani e i pesci... in ogni caso ho provato la riga suggerita ma mi da un feroce e immancabile errore di sintassi. Ho desistito. :crazy:
Allegati
Trovatelli%20funzionante.odb
(46.92 KiB) Scaricato 136 volte
LibreOffice Versione: 7.5.9.2 installata su macOS Big Sur 11.7.10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro che aggiorna due formulari

Messaggio da charlie »

Ho aggiunto una riga al tuo codice:

Codice: Seleziona tutto

 and (( YEAR("Data Nascita") = :Var_ANNO) OR (:Var_ANNO IS NULL))
e l'ho provato in una query, funziona.
Dovrebbe funzionare anche nel subform Ricerca
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Stefano V.
Messaggi: 136
Iscritto il: domenica 31 marzo 2019, 15:51

Re: Macro che aggiorna due formulari

Messaggio da Stefano V. »

Grazie GENIUS Charlie!!!! E pensare che mi ero impazzito e tutto sommato non era così complicato. Posto il db. (versione senza la tua ultima macro perché al momento non la ritrovo ma in ogni caso l'avevo pubblicato precedentemente) Non metto il Risolto perché temo di doverti chiedere altre cosina ma non voglio infastidirti oltre per oggi...

Grazie per il prezioso tempo dedicatomi.
Allegati
Trovatelli funzionante.odb
(46.95 KiB) Scaricato 131 volte
LibreOffice Versione: 7.5.9.2 installata su macOS Big Sur 11.7.10
Stefano V.
Messaggi: 136
Iscritto il: domenica 31 marzo 2019, 15:51

Re: Macro che aggiorna due formulari

Messaggio da Stefano V. »

Chiedo scusa, ho postato una versione che nonostante il nome non era funzionante per la ricerca per anno. Questa è la versione giusta.
Allegati
Trovatelli funzionante 1.odb
(46.92 KiB) Scaricato 138 volte
LibreOffice Versione: 7.5.9.2 installata su macOS Big Sur 11.7.10
Stefano V.
Messaggi: 136
Iscritto il: domenica 31 marzo 2019, 15:51

Re: Macro che aggiorna due formulari

Messaggio da Stefano V. »

Ciao a tutti e a Charlie che spesso pazientemente mi accontenta,
Avrei una richiesta: nell'ultimo database postato (Trovatelli funzionante 1) ho inserito una formula per il calcolo di alcune percentuali: Ad esempio la percentuale dei proietti di sesso maschile rispetto al totale dei proietti.
il codice del relativo subformulario chiamato appunto "Calcolo percentuale maschi" è questo:

SELECT "Ricerca femmine per form"."NUM1", "Ricerca maschi per form"."NUM", "NUM" * 100 / ( "NUM" + "NUM1" ) "percentuale maschi" FROM "Ricerca femmine per form", "Ricerca maschi per form"

che si avvale di due query: "Ricerca femmine per form" e "Ricerca maschi per form", ma non è questo il problema.

Ho fatto l'operazione "NUM" * 100 / ( "NUM" + "NUM1" ) e, come si vede se si prova a fare una qualsiasi ricerca, il risultato e sempre e solo un numero intero. In realtà se si fa il calcolo con la calcolatrice il risultato è un intero seguito da alcuni decimali (che possono essere anche infiniti). Dunque, quello che vorrei è che il risultato fosse almeno con due decimali che, pur essendo sempre un'approssimazione (cioè il frutto di un arrotondamento) è pur sempre più vicino alla realtà.
Dunque, ho provato a cambiare l'impostazione nei numeri delle tabelle, mettendo il formato numerico seguito da due decimali ma il programma, mi sembra, si limiti ad aggiungere ",00". C'è un modo per ottenere una percentuale più precisa?

Grazie anche solo se leggete il post.
LibreOffice Versione: 7.5.9.2 installata su macOS Big Sur 11.7.10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro che aggiorna due formulari

Messaggio da charlie »

Ciao, mi pare che l'argomento non sia più lo stesso, pur essendo lo stesso database. Dovresti aprire un nuovo argomento :) .
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Stefano V.
Messaggi: 136
Iscritto il: domenica 31 marzo 2019, 15:51

Re: [Risolto]Macro che aggiorna due formulari

Messaggio da Stefano V. »

:super: Fatto
LibreOffice Versione: 7.5.9.2 installata su macOS Big Sur 11.7.10
Rispondi