Tabella di formulario non aggiornata con macro di libre base

libreoffice ver 6.4.6.2

il codice:

Sub Main
Dim Form As Object
Dim Tabe As Object
Dim Ctl1 As Object
Dim Ctl2 As Object
Dim Ctl3 As Object
Dim km1, km2 as integer

Form = thisComponent.drawpage.forms.getByIndex(0)
Tabe=Form.getByName("kmTabella")
Ctl1 = Tabe.getByName("kmIniziali")
Ctl2 = Tabe.getByName("kmFinali")
Ctl3 = Tabe.getByName("kmTotale")
'Ctl1.text=10
km1=Ctl1.text
km2=Ctl2.text
Ctl3.text=km2-km1
print km1 & " "  & km2 & " " & Ctl3.text
End Sub

produce il risultato 1000 3458 2458 come in figura ma non aggiorna a 2458 la tabella alla colonna kmTotali che rimane al valore 0

descrizione immagine

grazie per aiutarmi

Nuovo database.odb

Ciao, aiutarti senza aver il file su cui provare è problematico. Ti assegno un punteggio (karma) per permetterti di inserire allegati.

Ciao, grazie, ho allegato il file. cordialità.

Ciao, perché fare tutta questa fatica con una macro anziché adoperare una semplice query?

SELECT "kmIniziali", "kmFinali",  "kmFinali" - "kmIniziali" AS  "kmTotale" FROM "kmTabella"

Se la mia riposta ti ha aiutato, votala con :heavy_check_mark: (qui a sinistra)

Edit: File allegato: Kilometri.odb

Ciao, perché sto imparando a governare in generale i formulari attraverso le macro per le necessità che le query non sempre risolvono. Grazie per avermi risposto e cordiali saluti.

Guarda il commento fatto sotto a @Leptone e il file che ho allegato.

Ciao, sto provando ad eseguire il tuo codice all’inteno del progetto creato con Base ma sul codice ricevo un errore di runtime. Proprietà e metodo non trovato: Drawpage.

Ora non vorrei farti perdere tempo, forse c’è un problme di versione? la mia è 7.0.0.3
Tuttavia non ho trovato nulla online che giustifichi questo errore … Vorrei aituarti ma non riesco ad andare oltre…
Anchio vorrei approfondire l’uso delle macro su BASE nei formulare… visto che le suo su CALC e WRITE…
Cordiali Saluti

Ciao, probabilmente stai eseguendo il codice direttamente dal modulo delle macro. Prova ad aggiungere un pulsante al formulario ed assegna la macro all’evento Esegui l'azione del pulsante.

Ok Risolto con il pulsante.
Curioso che non si riesca a lavorare eseguendo direttamente la macro. Non capisco come l’oggetto drawpage venga istanziato. Su Calc e Write non mi era mai successo. Comunque.
Adesso ricevo un errore nella riga Tabe = Form.getByName(“kmTabella”) non trova kmTabella .
Form dovrebbe attingere ai dati sul formulario (che si chiama formulario1) oppure dalla tabella che si chiama tbKilometri?? perchè hai inserito kmTabella ??

Attenzione, ti sei inserito nel post aperto da @mariog e si rischia di fare confusione, ma ti rispondo volentieri.
In effetti la macro non funziona nel file che @mariog ha postato in un secondo momento. Funzionerebbe in un formulario in forma “tabellare” dove il formulario (qualsiasi sia il suo nome) viene aperto tramite GetByIndex(0) e la tabella si chiama “kmTabella”. Le colonne sono: “kmIniziali”, “kmFinali”, “kmFinali” .

Ma essendoci ora il formulario in forma “modulare”, occorre scrivere così il codice:

Sub Main
Dim Form As Object
Dim Tabe As Object
Dim Ctl1 As Object
Dim Ctl2 As Object
Dim Ctl3 As Object
Dim km1, km2 as integer
Form = thisComponent.drawpage.forms.getByIndex(0)
Ctl1 = Form.getByName("kmIniziali")
Ctl2 = Form.getByName("kmFinali")
Ctl3 = Form.getByName("kmTotale")
km1=Ctl1.text
km2=Ctl2.text
Ctl3.text=km2-km1
print km1 & " "  & km2 & " " & Ctl3.text
End Sub

Comunque la macro scrive il risultato sul formulario ma non sulla tabella. Per farlo bisogna cambiare il codice.

Parzialmente Risolto! Il formulario kmTabella fu creato con procedura guidata inserendo un oggetto tabella. Ho creato un formulario vuoto ed ho inserito un oggetto tabella. La macro andò in errore nel rigo “km1=Ctl1.text”. Allora ho sostituito “.text con .value”, essendo il campo interessato numerico. La macro andò in errore al rigo successivo “km2=Ctl2.text”. Ho sostituito i rimanenti text con value e la macro funziona correttamente. Questo è il codice funzionante:

Sub Main
Dim Form As Object
Dim Tabe As Object
Dim Ctl1 As Object
Dim Ctl2 As Object
Dim Ctl3 As Object
Dim km1, km2 as integer

Form = thisComponent.drawpage.forms.getByIndex(0)
Tabe=Form.getByName("kmTabella")
Ctl1 = Tabe.getByName("kmIniziali")
Ctl2 = Tabe.getByName("kmFinali")
Ctl3 = Tabe.getByName("kmTotale")
km1=Ctl1.value
km2=Ctl2.value
Ctl3.value=km2-km1
print km1 & " "  & km2 & " " & Ctl3.value
End Sub

Non salva il record! però.

Occorre modificare qualche riga di codice:

Sub Main
Dim Form As Object
Dim Tabe As Object
Dim Ctl1 As Object
Dim Ctl2 As Object
Dim Ctl3 As Object
Dim km1, km2 as integer

Form = thisComponent.drawpage.forms.getByIndex(0)
Id = Form.getByName("iDkm").text
Ctl1 = Form.getByName("kmIniziali")
Ctl2 = Form.getByName("kmFinali")
Ctl3 = Form.getByName("kmTotale")

km1=Ctl1.text
km2=Ctl2.text
Ctl3.text=km2-km1
kmt = Ctl3.text
'print km1 & " "  & km2 & " " & Ctl3.text
Statement = Form.ActiveConnection.createStatement()' Crea istruzione da eseguire
sSQL= "UPDATE ""tbKilometri"" SET ""kmTotali"" = '" + kmt + "'  WHERE ""iDkm"" = '" + Id +"'"
Statement.executeUpdate(sSQL)' Esegue l'struzione SQL
Form.Reload ' aggiorna il formulario
End Sub

Ciao, ti ringrazio per il tuo interessamento e il tempo che mi hai dedicato. Ho istallata la ver. 7.1 e i risultati sono imprevedibili sia con errori di run time che con errori di eventi non eseguiti. Il progetto che volevo realizzare è complesso e impraticabile così come mi funziona questo libre base con ubuntu, Proverò con windows open office. Cordialità.