[Risolto]Macro inserimento valori su campi formulario

Discussioni sulle caratteristiche di database
Rispondi
Avatar utente
Zago_87
Messaggi: 111
Iscritto il: mercoledì 14 gennaio 2015, 23:53

[Risolto]Macro inserimento valori su campi formulario

Messaggio da Zago_87 »

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
Test.odb
(13.21 KiB) Scaricato 165 volte
Ultima modifica di Zago_87 il domenica 10 gennaio 2021, 0:01, modificato 3 volte in totale.
LibreOffice 6.3.6
Windows 7 PRO
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8803
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro inserimento valori su campi formulario

Messaggio da charlie »

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.
  • Intanto diciamo che un campo Data, non è una data ma un oggetto :shock: , 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
Avatar utente
Zago_87
Messaggi: 111
Iscritto il: mercoledì 14 gennaio 2015, 23:53

Re: Macro inserimento valori su campi formulario

Messaggio da Zago_87 »

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! :bravo:

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 :mrgreen:
LibreOffice 6.3.6
Windows 7 PRO
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8803
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro inserimento valori su campi formulario

Messaggio da charlie »

charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Avatar utente
Zago_87
Messaggi: 111
Iscritto il: mercoledì 14 gennaio 2015, 23:53

Re: [Risolto]Macro inserimento valori su campi formulario

Messaggio da Zago_87 »

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?
LibreOffice 6.3.6
Windows 7 PRO
Avatar utente
Zago_87
Messaggi: 111
Iscritto il: mercoledì 14 gennaio 2015, 23:53

Re: Macro inserimento valori su campi formulario

Messaggio da Zago_87 »

Ok...verrò preso per matto ma ho trovato per caso la risposta cercando altro...e l'ho trovata in un mio stesso post :knock:

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
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 :mrgreen:
LibreOffice 6.3.6
Windows 7 PRO
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8803
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro inserimento valori su campi formulario

Messaggio da charlie »

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
Rispondi