Macro per eseguire operazione

Creare una macro - Scrivere uno script - Usare le API
Rispondi
lseed78
Messaggi: 2
Iscritto il: martedì 1 aprile 2014, 14:18

Macro per eseguire operazione

Messaggio da lseed78 »

Buongiorno a tutti,

sono alle prese con la realizzazione di un db per gestire il magazzino aziendale delle materie prime e sono quasi riuscito nell'intento...
Quello che mi manca è creare una macro che esegua una sottrazione mediante un pulsante di due valori presenti in tabella.

Ho trovato il comando sql per eseguire l'operazione su tutta la tabella e funziona perfettamente:

Codice: Seleziona tutto

UPDATE "Gestione_Carta" SET "Metri Rotolo" =  "Metri Rotolo" - "Metri Impegnati"
Ora vorrei inserire questa funzione in un formulario e che esegua l'operazione di sottrazione dei "Metri Impegnati" dai "Metri Rotolo" solo sulla riga selezionata.
Ho provato a realizzarla....

Codice: Seleziona tutto

REM  *****  BASIC  *****

Sub UPDATE_Test
sSQL= "UPDATE Gestione_Carta SET Metri Rotolo = Metri Rotolo - Metri Impegnati"
End Sub
ma non riesco neanche ad eseguire il codice sql per fargli eseguire l'operazione.

In allegato il db di test contenete la tabella e il formulario

Grazie
Allegati
consumo_materiale.odb
(11.8 KiB) Scaricato 134 volte
OpenOffice 4.0.1
Windows 7
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 9069
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro per eseguire operazione

Messaggio da charlie »

Ciao, cercando sul Forum ho trovato come far funzionare il tuo comando SQL in una macro:

Codice: Seleziona tutto

Sub UPDATE (oEvent As Object) 'Button > Execute > event
	oForm = oEvent.Source.Model.Parent 'MainForm from Button
	oStatement = oForm.ActiveConnection.createStatement() 'Create an SQL statement object
	sSQL= "UPDATE ""Gestione_Carta"" SET ""Metri Rotolo"" = ""Metri Rotolo"" - ""Metri Impegnati""" 
	oStatement.executeUpdate( sSQL ) 'Execute the SQL command
	oForm.reload
End Sub
N.B. ho scoperto che il comando SQL va in questo caso va scritto con i nomi Tabella e nomi Campo fra doppi apici (""... "").
Rimane da fare (io non sono un esperto) di far agire la macro solo sulla riga selezionata.
Allegati
consumo_materiale2.odb
(13.18 KiB) Scaricato 175 volte
charlie
macOS 15.5 Sequoia: Open Office 4.1.16 - LibreOffice 25.8
http://www.charlieopenoffice.altervista.org
lseed78
Messaggi: 2
Iscritto il: martedì 1 aprile 2014, 14:18

Re: Macro per eseguire operazione

Messaggio da lseed78 »

Grazie charlie!
Era proprio quello che cercavo!

Grazie al tuo aiuto adesso so come inserire correttamente il codice SQL!

Riguardo alla selezione della riga ci lavorerò su e spero di risolvere....
ho in mente delle alternative ma renderebbero solo più macchinosa la gestione.

Grazie ancora.
OpenOffice 4.0.1
Windows 7
vladboscaneanu
Volontario
Volontario
Messaggi: 380
Iscritto il: martedì 22 ottobre 2013, 1:35

Re: Macro per eseguire operazione

Messaggio da vladboscaneanu »

Devi raggiungere l'operatore WHERE

Codice: Seleziona tutto

sSQL= "UPDATE ""Gestione_Carta"" SET ""Metri Rotolo"" = ""Metri Rotolo"" - ""Metri Impegnati"" WHERE ""id_rotolo""=2" 'QUI INSERISCE LA RIGA RICHIESTA 
saluti
Allegati
consumo_materiale2.odb
(13.71 KiB) Scaricato 152 volte
LibreOffice ultima versione su Windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 9069
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro per eseguire operazione

Messaggio da charlie »

@vladboscanenu
Troppo facile! Il nostro amico Iseed78 vuole selezionare la riga con un click.
charlie
macOS 15.5 Sequoia: Open Office 4.1.16 - LibreOffice 25.8
http://www.charlieopenoffice.altervista.org
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Macro per eseguire operazione

Messaggio da Gaetanopr »

lseed78 ha scritto: Ora vorrei inserire questa funzione in un formulario e che esegua l'operazione di sottrazione dei "Metri Impegnati" dai "Metri Rotolo" solo sulla riga selezionata.
Invece di usare un istruzione sql, si può aggiornare il valore nel formulario e poi aggiornare la corrispondente riga nella tabella.

Codice: Seleziona tutto

Option Explicit
Sub Consumo (oEv as object)
Dim oForm as object
Dim MetriIm As Double, MetriR As Double
If MsgBox ( "Vuoi Aggiornare la riga selezionata",1,"Calcolo Metri") = 2 Then Exit Sub
oForm = oEv.source.model.parent
MetriR = oForm.GetByName("Campo di controllo tabella 1").GetByName("Metri Rotolo").CurrentValue 
MetriIm = oForm.GetByName("Campo di controllo tabella 1").GetByName("Metri Impegnati").CurrentValue 
MetriR = (MetriR - MetriIm)
oForm.GetByName("Campo di controllo tabella 1").GetByName("Metri Rotolo").BoundField.UpdateInt(MetriR)
 
 If oForm.IsNew then
    oForm.InsertRow()
 Else
    oForm.UpdateRow()
 End if

End sub
Allegati
consumo_materiale.odb
(13.56 KiB) Scaricato 165 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Rispondi