Pagina 1 di 1
					
				DATEDIFF
				Inviato: 03 feb 2016, 17:51
				da mhanu70
				Salve. sto cercando di far stampare in una form un valore dato da un datediff su due campi di tipo data del db. I due campi sono in due tabelle diverse.
1- ho creato un nuovo campo (nella form non nel db)
2- ho messo il campo come testo
3 - nel campo lookup ho fatto la query con la funzione datediff ( la query funziona dentro workbench)
la query è tipo:
SELECT 
    DATEDIFF(data2, data1) AS DFS
FROM
    tabella1,
    tabella2
WHERE
   tabella1.idpaziente = tabella2.idpaziente
   AND  tabella2.idpaziente = {idpaziente}
ho notato che mi stampa il valore corretto ma lo fa solo quando navigo tra i record, ossia appena caricato il form il valore non compare. E' più opportuno farlo con una macro (onload)? 
ne ho provate un paio per tutto il giorno con scarso successo.
Qualche suggerimento non sarebbe male.
Grazie in anticipo
			 
			
					
				Re: DATEDIFF
				Inviato: 03 feb 2016, 23:37
				da rino
				messa cosi mi pare ci sia un approccio errato . comunque hai diversi eventi a diposizione che vanno usati onload se il form è a singolo record .  onloadrecord nelgi altir casi .
se usi questi due eventi in modo corretto hai il momento esatto in cui fare dei calcoli e altre cose prima di stampare sul form i dati . 
La query mi lascia perplesso ma in generale , la trovo inutile per risolvere un problema del genere 
Un aovlta trovato il momento giusto del onloadxx colegati all'altra tabella (con limit 1) e ricava il campo poi usa la macro sc di differenza date e metti il risultato sula variabile che vuoi usare (sc_date_dif -o- sc_date_dif_2) 
Altra via usare le view supponendo tu stia usando mysql o oracle . ma questo dipende dal disegno del db .
insomma hai tante vie .
			 
			
					
				Re: DATEDIFF
				Inviato: 04 feb 2016, 09:24
				da mhanu70
				LA query l'ho usata perchè in un'altra applicazione ho creato un campo e usato un'altra funzione mysql  per stampare un valore e mi da quello giusto, quindi ho pensato di usare lo stesso approccio.
Immaginavo  fosse più corretto usare una macro, ma finora non ho avuto molto successo nel capire come farle funzionare.
Userò anche le viste per fornire i dati aggregati in un altro modo, ma ho bisogno di visualizzare il valore anche nella form.
			 
			
					
				Re: DATEDIFF
				Inviato: 04 feb 2016, 10:55
				da rino
				la macro non è altro che una funzione come in php. solitamente poni in una variablie il risultato della macro. 
se usi il richiamo automatico , ottimo sistema di SC , hai sempre un esempio disponibile direttamente nel luogo dove devi usarlo.
adesso hanno aggiunto anche un elenco generale delle macro senza dover attivare l help . 
per il tuo calcolo potresti fare:
{differenza} = sc_date_dif({campo_tabella1}, "aaaa-mm-dd", {campo_tabella2}, "mm/dd/aaaa");
da mettere nell evento onload -o- onloadrecord a seconda del tipo di form
dovresti risolvere il problema perchè in questo modo ogni volta che leggi un record prima di emettere la form vengono eseguiti i calcoli e predisponi i campi form che ti servono. per chi proviene da linguaggi "pesanti" tipo RPG questa metodologia rispecchia il ciclo : leggi- calcola- scrivi .   Le cose buone non tramontano mai.
			 
			
					
				Re: DATEDIFF
				Inviato: 04 feb 2016, 15:05
				da mhanu70
				appena posso provo. Intanto grazie
			 
			
					
				Re: DATEDIFF
				Inviato: 05 feb 2016, 11:53
				da mhanu70
				Scusa ancora, ma le variabili campo_tabella1 e campo_tabella2 vanno dichiarate prima di applicare la macro?
			 
			
					
				Re: DATEDIFF
				Inviato: 05 feb 2016, 12:02
				da rino
				devono esistere già al tempo di esecuzione della macro, per la macro sono elementi di input.
Tu hai una tabella primaria che leggi in secuenza automaticamente ( lo fa sc) ed è la tabella con cui hai definito la query principale.  
Letto un record ti agganci , dentro gli eventi opportuni, alle altre tabelle che ti servono e fai le tue cose prima di scrivere la riga a video, che viene eseguita non appena sono finite la istruzioni dei vari eventi chiamati. 
  E poi tutto ricomincia sono ad una fine .  Questo è un loop generale standard .