Buongiorno, sto modificando un database gestionale fatto per un amico anni fa, sono in difficoltà perché non ricordo molte cose che avevo appreso per fare quel progetto. Quindi chiedo per prima cosa se potete mettermi dei link riguardo la scrittura delle macro, ho già letto la guida SQL di HTML.it ma mi sembra che poi la sintassi cambi per Base, su wiki.openoffice ho navigato parecchio senza però capirci molto.
Fatta questa richiesta iniziale, il mio problema attuale è questo:
Ho due campi data, compilato il primo tramite form vorrei che il secondo fosse compilato in automatico sommando un certo numero di giorni alla prima data.
Ho già creato la macro e l'ho assegnata al momento il cui il cursore si sposta dalla prima data, ma ho questi problemi nella macro:
- riesco a leggere solo il campo ID, non quello data
- quando avrò capito come leggere il campo data correttamente non so come sommare un numero di giorni fisso a quel valore
- nella parte dove scrivo all'interno della tabella collegata al form il comando SQL funziona solo se non metto la condizione WHERE, che credo serva a identificare tramite ID la riga da aggiornare, e se metto una data fissa, non so come indicare correttamente la variabile impostata sopra.
Attualmente il file mi sovrascrive quindi la seconda data con il valore fisso su tutte le righe.
Allego il file, grazie per il supporto
[Risolto]Macro inserimento valori su campi formulario
[Risolto]Macro inserimento valori su campi formulario
Ultima modifica di Zago_87 il domenica 10 gennaio 2021, 0:01, modificato 3 volte in totale.
LibreOffice 6.3.6
Windows 7 PRO
Windows 7 PRO
Re: Macro inserimento valori su campi formulario
Ciao, io per le macro sono un novellino e mi hai fatto sudare.
Recentemente ho tradotto in italiano il capitolo delle macro di Base Handbook, lo trovi qui: viewtopic.php?f=29&t=10531; ma non ho trovato lì le risposte da darti.
Cercando in rete e smanettando ho modificato la macro che allego e funziona.
Recentemente ho tradotto in italiano il capitolo delle macro di Base Handbook, lo trovi qui: viewtopic.php?f=29&t=10531; ma non ho trovato lì le risposte da darti.
Cercando in rete e smanettando ho modificato la macro che allego e funziona.
- Intanto diciamo che un campo Data, non è una data ma un oggetto , va letta la sua proprietà Date e poi per poterla inserire in una tabella bisogna trasformarla in stringa e formattarla come si deve.
- Poi per far accettare WHERE all'istruzione SQL UPDATE bisogna destreggiarsi fra apici, doppi apici, & commerciali, ... una vera sudata.
- La macro va in errore inserendo un nuovo record tramite il menu a tendina, perché uscendo dal campo il record non è ancora salvato. Ma credo che questo non sia un problema trattandosi di un database di prova.
Codice: Seleziona tutto
REM --------------------------------------------------------------------------------
REM Aggiorna il campo Prossima Data automaticamente
REM --------------------------------------------------------------------------------
Sub Form_CalcoloProssimaData
Dim Form As Object, CMD, Statement
Dim DataMan As Date, ID As String, Stringa As String, DataStringa As String, Data As Object
Form = ThisComponent.DrawPage.Forms.GetByName("MainForm")
ID = Form.GetByName("fmtID_Doc").CurrentValue
'MsgBox ID
Data = form.GetByName("datData_Doc").Date
Stringa = ""+ Data.Year +"-"+ Data.Month +"-"+ Data.Day
DataStringa = Format(Stringa, "YYYY-MM-DD")
'MsgBox DataStringa
Statement = Form.ActiveConnection.CreateStatement()
CMD = "UPDATE ""Tab_Doc"" SET ""ProssimaData_Doc"" = '" + DataStringa + "' WHERE ""ID_Doc"" = '" & ID &"'"
Statement.ExecuteUpdate(CMD)
Form.Reload
End Sub
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Macro inserimento valori su campi formulario
Intanto grazie 1000 Charlie, ho trovato poche richieste analoghe in rete e spesso c'erano soluzioni proposte senza la spiegazione di come ci fossero arrivati e non sono riuscito a farle funzionare, le tue dritte mi hanno fatto comprendere meglio il problema dalle basi.
Darò molto volentieri una occhiata alla tua traduzione!
Per ora ho solo letto il codice e mi sembra chiara la procedura, il come poter lavorare sulle date da macro, domani lo inserisco nel DB originale e vedo che succede. Spero che si, il problema non si presenti nel DB vero e proprio
Darò molto volentieri una occhiata alla tua traduzione!
Per ora ho solo letto il codice e mi sembra chiara la procedura, il come poter lavorare sulle date da macro, domani lo inserisco nel DB originale e vedo che succede. Spero che si, il problema non si presenti nel DB vero e proprio
LibreOffice 6.3.6
Windows 7 PRO
Windows 7 PRO
Re: Macro inserimento valori su campi formulario
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: [Risolto]Macro inserimento valori su campi formulario
Scusa Charlie se riapro questo Post vecchio ma avevo accantonato questa funzione per il mio DB.
La tua macro funziona, il problema era proprio nel capire che la data era vista come oggetto, grazie a te sono poi anche riuscito a modificarla come desideravo, aggiungendo un anno alla data di partenza.
Il mio problema è però che questa macro deve funzionare su di un record non ancora salvato, situazione che avevi già indicato come problematica.
Voglio evitare di salvarlo perché le due date sono i primi due campi di un lungo form, che a volte si rende necessario non memorizzare se qualcosa non va, sarebbe quindi per me un problema confermare il record appena aperto il tutto.
Quello che cerco è quindi il modo di assegnare la variabile data elaborata al campo ProssimaData_Doc come se l'avessi scritta a mano.
In definitiva, è possibile assegnare tramite macro un valore ad un campo del formulario e non ad una tabella?
La tua macro funziona, il problema era proprio nel capire che la data era vista come oggetto, grazie a te sono poi anche riuscito a modificarla come desideravo, aggiungendo un anno alla data di partenza.
Il mio problema è però che questa macro deve funzionare su di un record non ancora salvato, situazione che avevi già indicato come problematica.
Voglio evitare di salvarlo perché le due date sono i primi due campi di un lungo form, che a volte si rende necessario non memorizzare se qualcosa non va, sarebbe quindi per me un problema confermare il record appena aperto il tutto.
Quello che cerco è quindi il modo di assegnare la variabile data elaborata al campo ProssimaData_Doc come se l'avessi scritta a mano.
In definitiva, è possibile assegnare tramite macro un valore ad un campo del formulario e non ad una tabella?
LibreOffice 6.3.6
Windows 7 PRO
Windows 7 PRO
Re: Macro inserimento valori su campi formulario
Ok...verrò preso per matto ma ho trovato per caso la risposta cercando altro...e l'ho trovata in un mio stesso post
Ovviamente senza la dritta di Charlie sulla questione oggetto non avrei potuto mai risolvere e quindi ringrazio di nuovo.
Posto il codice per completezza di informazioni:
La differenza dal codice precedente è che non serve SQL e quindi la formattazione della data deve tornare ad essere quella accettata nel formulario dove si sta operando.
Poi io ho fatto l'operazione di aggiungere un anno ma in maniera analoga si possono aggiungere giorni o mesi (magari in maniera variabile tramite apposito campo nel formulario).
Quindi il codice di Charlie opera sulla tabella che sta dietro il formulario, questo codice direttamente nel formulario non salvato.
Richiudo
Ovviamente senza la dritta di Charlie sulla questione oggetto non avrei potuto mai risolvere e quindi ringrazio di nuovo.
Posto il codice per completezza di informazioni:
Codice: Seleziona tutto
Sub Form_CalcoloProssimaData
Dim Form As Object, Data As Object
Dim Stringa As String, DataStringa As String
Dim Anno As Long, ProssimaData As Object
Form = ThisComponent.DrawPage.Forms.GetByName("MainForm")
Data = Form.GetByName("datData_Doc").Date
Anno = Data.Year + 1
Stringa = "" + Data.Day + "/" + Data.Month + "/" + Anno
DataStringa = Format(Stringa, "DD/MM/YYYY")
ProssimaData = Form.GetByName("datProssimaData_Doc")
ProssimaData.Text = DataStringa
ProssimaData.Commit = True
End Sub
Poi io ho fatto l'operazione di aggiungere un anno ma in maniera analoga si possono aggiungere giorni o mesi (magari in maniera variabile tramite apposito campo nel formulario).
Quindi il codice di Charlie opera sulla tabella che sta dietro il formulario, questo codice direttamente nel formulario non salvato.
Richiudo
LibreOffice 6.3.6
Windows 7 PRO
Windows 7 PRO
Re: Macro inserimento valori su campi formulario
Grazie per aver condiviso la soluzione .
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org