ciao

Originariamente inviato da alka
Le soluzioni sono tante, ciascuna con vari pro e contro.

Indicativamente, potresti usare per la tabella che viene aggiornata un solo componente TDataSet condiviso, magari inserito in un TDataModule; in questo modo, posto che gli aggiornamenti vengano inviati a quel componente, essi risulteranno sempre aggiornati, senza che sia necessario aprire e chiudere la tabella.

Se la tabella deve essere condivisa tra più TFrame, questo potrebbe portare a effetti collaterali: se la visualizzazione di un campo fa scorrere i record della tabella per fare un lookup, questo potrebbe creare a visualizzazioni errate di altri campi che utilizzano la medesima tabella.
(come mi insegnasti Tu) gia' uso questo tipo di approccio,
ho un datamadule e la mia tabella (il mio datasource) e' inserito in esso. tutti i frame puntano allo stesso datamodule e stesso datasource... trovando sempre i dati aggiornati.

il problema e' sempre lo stesso:
se USER1 aggiunge/modifica/cancella un record... tale modifica verra' vista USER2 solo nel momento in cui USER2 effettua close e open della tabella.


Originariamente inviato da alka ...una volta che i dati sono stati scaricati, questi vengono immagazzinati in memoria, ed è possibile andarli a clonare velocemente in altrettanti TClientDataSet presenti nei vari TFrame, che ogni volta prelevano i dati da quello originale, il quale viene aggiornato solo quando si effettuano aggiornamenti alla tabella o query che costituisce la sorgente dei dati.
questo e' cio che non riesco a focalizzare! quando una tabella viene aggiornata da USER1 per vedere le modifiche da USER2 devo effettuare la close e l'open.

avevo pensato cosi:
creo una tabella nel database:
codice:
CREATE TABLE TabellaUltimoAggiornamento(
    ID                 INTEGER NOT NULL PRIMARY KEY,
    NomeTabella    VARCHAR(100),
    UltimoAgg      varchar(16));   /* yyyymmddhhmmss */
aggiornando il record relativo alla tabella modificata ogni volta che che viene effettuato un insert/update/delete nella medesima tabella.

le tabelle le apro solo alla esecuzione del formmain del programma, poi ogni volta che apro un frame diverso, prima di effettuare close e open verifico che la tabella che devo ''refreshiare'' abbia una data di 'ultima modifica' superiore alla data di quando e' stata aperta ad inizio programma e solo in questo caso effettuo il close e l'open.

pensiero errato?

grazie