It is currently 7 June 2025, 12:08 Advanced search

refresh query di pannelli su IMDB

Questo forum è nato con lo scopo di raccogliere le proposte di modifica di Instant Developer e discuterne insieme.

refresh query di pannelli su IMDB

Postby poidomani » 30 August 2011, 7:57

Ho cancellato e ricreato le righe di un IMDB per aggiornare il pannello ho usato updatecontrols. Se avessi usato pannello.refreshquery o pannello.enterqbe + pannello.finddata non avrebbe funzionato.
Io penso che semplificherebbe la vita avere la logica per i pannelli su IMDB coincidente con quella dei pannelli su tabelle di DB.

P.S. i BLOG non hanno il controllo ortografico?
Ing. Giovanni Poidomani - freelance
saper ascoltare significa possedere, oltre al proprio, il cervello degli altri. (Leonardo da Vinci)
poidomani
 
Posts: 3310
Joined: 4 November 2010, 15:07
Location: Bologna

Re: refresh query di pannelli su IMDB

Postby lucabaldini » 30 September 2011, 14:51

Il problema che segnali dovrebbe presentarsi solo se, all'interno della stessa richiesta, esegui tutte le operazioni: elimino i dati, riempio la tabella, faccio refresh query del pannello, chiedo al pannello il numero di righe o uso un for-each-row su pannello per leggere i valori.

Provo a spiegare cosa succede... magari può servire a qualcun altro...

Supponi diavere nel tuo progetto una tabella IMDB chiamata DATI. La tabella IMDB ha 2 campi: ID (numero) e NOME (stringa).
Poi supponi di usare la tabella IMDB nella query di un pannello:
Code: Select all
select
  toString(ID)
  upper(Nome)
from
  DATI
where
  ID > 5


Il sistema crea un'ulteriore tabella IMDB "fittizzia" che usa come sorgente dati del pannello. Lo fa perché il tipo di dati ed i dati contenuti nella tabella sono differenti. Per esempio la prima colonna della tabella DATI è un'intero (ID) ma la prima colonna della query del pannello è una stringa. Inoltre anche il numero di righe sarà differente a causa della where clause. Quindi il sistema, oltre alla tabella IMDB chiamata DATI (quella verde del tuo progetto), ne crea un'altra che chiama DATI_RS.

Ora, però, c'è un problema... tu, da codice, inserisci i dati nella tabella IMDB chiamata DATI... quando e come il pannello deve aggiornare i suoi dati? Beh, il sistema lo fa da solo. Alla fine di ogni richiesta controlla se la tabella DATI è cambiata. Se lo è svuota la tabella "fittizia" DATI_RS e riesegue la query ripopolandola a partire dalla tabella DATI. Il sistema fa questo all'interno della procedura UpdateControls della videata in cui è contenuto il pannello.

Ecco che, però, qui c'è un potenziale problema. Se io scrivo:
Code: Select all
delete DATI

insert into DATI
  set ID = 5
  set NOME = "Baldini"


e subito dopo scrivo:
Code: Select all
Pannello.RefreshQuery()

if (Pannello.RecordCount() > 5)
{
  ...
}

il sistema non funziona correttamente dato che fino a quando il sistema non ha eseguito l'UpdateControls (alla fine della richiesta) la tabella usata dal pannello (DATI_RS "fittizzia") contiene i vecchi dati. In questo caso devi scrivere:
Code: Select all
Videata.UpdateControls()

Pannello.RefreshQuery()

if (Pannello.RecordCount() > 5)
{
  ...
}


Questo è l'unico caso che mi viene in mente in cui potresti avere problemi: rileggere i dati da pannello subito dopo aver inserito o modificato i dati nella tabella IMDB, all'interno della stessa richiesta.
Qualcosa si può certamente fare, però adesso il sistema funziona così. Magari potremmo eseguire noi dall'interno l'UpdateControls quando viene richiesto al pannello di caricare i dati dalla sua tabella. Prima potrebbe controllare se deve rieseguire la query di "copia dei dati da DATI a DATI_RS".
Ci penso... qualcosa mi verrà in mente.

Tieni conto che lo stesso problema era presente anche nei book ma è stato risolto molto tempo fa, se non ricordo male in versione 7.5 o giù di lì.
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: refresh query di pannelli su IMDB

Postby m.dieugenio » 24 September 2012, 13:32

Salve,

in una videata (mobile) ho una tabbed view contenente 3 Tab
1. report
2. report
3. pannello basato su una tabella IMDB (senza filtri)

all'apertura della videata se clicco sul tab 3 i dati vengono correttamente visualizzati.

se mi posiziono sul tab 1 o sul tab 2 (report) ed inserisco/modifico i dati nella tabella iMDB collegata al pannello 3
...le modifiche non vegono mostrate sul tab 3 pur avendo eseguito il codice
videata.updatecontrols
pannello.refreshquery

i dati vengono invece correttamente visualizzati se chiudo e riapro la videata.
Potete aiutarmi
Thanks
m.dieugenio
 
Posts: 517
Joined: 17 May 2012, 9:13

Re: refresh query di pannelli su IMDB

Postby d.pierangeli » 24 September 2012, 15:27

Questo è un problema che ci è stato già segnalato e che provvederemo a correggere.

La soluzione consiste nell'usare la funzione FreezeWhenHidden nell'evento di Load

Code: Select all
...Load()
{
  PannelloIMDB.FreezeWhenHidden = false
}
User avatar
d.pierangeli
Pro Gamma
Pro Gamma
 
Posts: 8129
Joined: 30 September 2010, 15:35

Re: refresh query di pannelli su IMDB

Postby m.dieugenio » 25 September 2012, 7:10

Ok, funziona

Grazie
m.dieugenio
 
Posts: 517
Joined: 17 May 2012, 9:13

Re: refresh query di pannelli su IMDB

Postby poidomani » 28 September 2012, 9:48

ottimo, sapere cosa succede dietro le quinte è sempre utile, grazie Luca
Ing. Giovanni Poidomani - freelance
saper ascoltare significa possedere, oltre al proprio, il cervello degli altri. (Leonardo da Vinci)
poidomani
 
Posts: 3310
Joined: 4 November 2010, 15:07
Location: Bologna


Return to Proposte di modifica

Who is online

Users browsing this forum: No registered users and 8 guests