Calcolo con campi di tipo "data"

Discussioni sulle caratteristiche di database
Rispondi
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Calcolo con campi di tipo "data"

Messaggio da fulk »

Ciao a tutti,

in una tabella del mio database vorrei ottenere un campo "ritardo" (in giorni) calcolato come differenza tra la data attuale e la data di scadenza.
Se il risultato è negativo significherebbe che la data di scadenza è successiva alla data attuale quindi è da considerare zero.

E' fattibile ?

Ho letto il seguente topic
http://user.services.openoffice.org/it/ ... =13&t=1608
che parla di come utilizzare un campo calcolato in un formulario, ma non sono riuscito ad adattarlo alle mie esigenze perchè in quel caso si tratta di operazioni tra campi di una tabella esistenti.
Nel mio caso invece la data attuale è un campo che dovrei ottenere nel momento in cui viene richiesto il ritardo...non so se mi spiego
Ultima modifica di fulk il venerdì 22 aprile 2011, 12:06, modificato 2 volte in totale.
OpenOffice 3.3.0 su Windows 7 Professional 64bit
giannidalmi
Messaggi: 62
Iscritto il: lunedì 21 febbraio 2011, 7:00

Re: Calcolo con campi di tipo "data"

Messaggio da giannidalmi »

questa macro che allego è collegata all'evento 'carica formulario' e sulla base della data di oggi ('dataprestito') e della durata del prestito ('durata')(modificabile) inserisce la data di scadenza del prestito ('scadenza'). ti può servire?
'EVENTO AL CARICAMENTO DEL FORM PRESTITI
sub CaricaPrestiti
dim doc as object
dim docCrl as object
dim Forms as object
dim Form as object

Doc = StarDesktop.CurrentComponent
DocCrl = Doc.getCurrentController()
Forms = Doc.Drawpage.Forms
Form = Forms.GetbyName("Standard")

'form.getbyname("durata").text=15 'INSERISCE LA DURATA STANDARD (come vedi è commentato(') perchè è inserito da form 'valore predefinito', ma all'uopo..
form.getbyname("DataPrestito").text=date() 'INSERISCE LA DATA DI OGGI NELLA CASELLA 'dataprestito'
form.getbyname("Scadenza").text=date()+val(form.getByname("durata").text) 'CALCOLA E INSERISCE LA DATA DI SCADENZA NELLA CASELLA 'scadenza'
end sub

' funzione per modificare la durata con conseguente modifica della scadenza del prestito
sub mod_durata
dim doc as object
dim docCrl as object
dim Forms as object
dim Form as object
Doc = StarDesktop.CurrentComponent
DocCrl = Doc.getCurrentController()
Forms = Doc.Drawpage.Forms
Form = Forms.GetbyName("Standard")
form.getbyname("Scadenza").text=date()+val(form.getByname("durata").text)
end sub
ciao
open office 3.2.1
window 7
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: Calcolo con campi di tipo "data"

Messaggio da fulk »

Ti ringrazio molto per la risposta.
Più o meno è quello che mi serviva (anche se vorrei effettuare il calcolo a livello di tabella, non di form).

Direi che l'argomento inerente al topic è liquidato :)
OpenOffice 3.3.0 su Windows 7 Professional 64bit
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: Calcolo con campi di tipo "data"

Messaggio da fulk »

fulk ha scritto:Ti ringrazio molto per la risposta.
Più o meno è quello che mi serviva (anche se vorrei effettuare il calcolo a livello di tabella, non di form).

Direi che l'argomento inerente al topic è liquidato :)
Altro che liquidato..pareva troppo semplice...sto impazzendo :crazy:

Vediamo se qualche anima pia riesce ad aiutarmi..
L'intenzione penso sia ormai chiara, effettuare un'operazione di differenza tra due date per calcolare un eventuale ritardo.

La data attuale la riesco a memorizzare in una variabile di tipo stringa:

Codice: Seleziona tutto

Dim sCurrentDate as string
sCurrentDate = date()
In questo caso ottengo una stringa che contiene la data nel formato GG/MM/AAAA.

Per leggere la data_scadenza dal database sto seguendo due possibilità (anche se nessuna mi ha ancora portato alla soluzione)
1) memorizzarla in una variabile di tipo string
2) memorizzarla in una variabile di tipo object

Nel primo caso il codice che utilizzo è il seguente:

Codice: Seleziona tutto

Dim sExpiryDate as string
sExpiryDate = oRowSet.Columns.getByName("data_scadenza").String()
In questo caso ottengo una stringa che contiene la data nel formato AAAA-MM-GG.
Ho provato a modificare la formattazione del campo nella tabella mettendolo come data GG/MM/AAAA ma leggendolo da codice risulta sempre AAAA-MM-GG.

Nel secondo caso il codice che utilizzo è il seguente:

Codice: Seleziona tutto

Dim oExpiryDate as object
oExpiryDate = oRowSet.Columns.getByName("data_scadenza").String()
In questo caso non saprei come utilizzarlo..

Il problema rimane sempre lo stesso...avrei bisogno del ritardo in giorni calcolato come differenza tra data_corrente e data_scadenza ma con i campi in quei formati non riesco a fare alcun tipo di operazione..
:crazy:
OpenOffice 3.3.0 su Windows 7 Professional 64bit
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: Calcolo con campi di tipo "data"

Messaggio da fulk »

Per ora ho bypassato il problema con questo codice...:

Codice: Seleziona tutto

dim dCurrentDate as date
dim dExpiryDate as date
dim oExpiryDate as object

dCurrentDate = date()	'acquisizione data attuale
oExpiryDate = oRowSet.Columns.getByName("data_scadenza")	'acquisizione data da tabella
dExpiryDate = oExpiryDate.Date().Day & "/" & oExpiryDate.Date().Month & "/" & oExpiryDate.Date().Year	'conversione data da object a date
iDelay = dCurrentDate - dExpiryDate	'calcolo ritardo in giorni se negativo allora significa che la data di scadenza non è ancora stata superata
Non mi piace per niente ma non ho trovato di meglio..
Se a qualcuno venisse qualche idea migliore sarebbe il benvenuto :D

Salute a tutti !
OpenOffice 3.3.0 su Windows 7 Professional 64bit
vladko
Volontario
Volontario
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: Calcolo con campi di tipo "data"

Messaggio da vladko »

AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: Calcolo con campi di tipo "data"

Messaggio da fulk »

Grazie vladko !

Avevo già valutato questa possibilità ma non essendo riuscito ad utilizzarla subito per i miei scopi la avevo abbandonata.
Provo a tornarci su !

:)
OpenOffice 3.3.0 su Windows 7 Professional 64bit
Rispondi