Newsgroup: it.comp.lang.delphi
Titolo: Refresh Paradox in Rete

Ho messo in rete una cartella con tabelle paradox e vi accedo da varie
postazioni in cui ho installato il pgr. Sembra funzionare bene (la NetDir la
imposto in runtime, è giusto?)- Il problema è il refresh dopo aggiornamento
di dati. Nel senso che i client collegati non si aggiornano automaticamente
sebbene abbia messo il refresh in afterpost. Ho provato a mettere un
pulsante che fa il refresh delle table. Funziona ma è necessario farlo su
ogni client. Ho messo il refresh anche sul componente Database (dataset[n])
ma funziona come per le table.
Qual è il metodo giusto perchè tutti i client si aggiornino automaticamnete?
Grazie.
Alberto.

 ha scritto nel messaggio
news:ah6d7.168$6F5....@news1.tin.it...

Prova nell'evento OnDataChange del DataSource, nell'afterpost non credo
funzioni xchè l'evento si scatena se il post viene effettuato dal client
Massimo


Non funziona. Quando tento di compilare, dopo una certa attesa arriva "Stack
Overflow".
Purtoppo mi sono accorto che il problema non č solo il refresh.  Se eseguo
il pgr. sulla macchina server (win 98) non č piů possibile aggiornare il
client (Win ME). Anzi, se effettuo aggiornamenti su entrambe le macchine (in
tempi diversi, ovviamente)  gli indici si corrompono.
Ricordo di un problema dovuto al file Pdoxusrs.lck ma non ne vengo a capo.
Questo file non si crea se accedo dal solo client o dal solo server ma se
apro entrambi eccolo spuntare. Si tratta di un file che non dovrebbe
esserci? L'Help non dice nulla. Sottolineo che la Netdir č impostata su
entrambe le macchine. Nel senso che il client punta a: \\server\directoryA
mentre per il client: C:\directoryA.
Boh!
Alberto


In generale sarebbe meglio usare un DB piů robusto per applicazioni
client/server, io ti consiglierei Interbase che ha gli IBX nativi per
l'accesso
Massimo

 wrote

io ho avuto il tuo stesso problema nel lato client e senza andarmi ad
inventare cose assurde ho messo un timer nel programma stesso che fa il
refresh della tabella.
In pratica quando il database viene modificato il client ( che non fa la
modifica direttamente ) non se ne accorge. Questo perchè non fa il refresh.
Un'altra soluzione è il semplice invio di un "messaggio" a tutti i computer
connessi. L'applicazione riceve il messaggio e fa il refresh.
Questo messaggio non è altro un'informazione che definisci tu e puoi spedire
anche con Winsock visto che passerà tramite rete.
Insomma è qualcosa di più impegnativo ( al livello di realizzazione ) di un
semplice timer.
Scegli tu....io non conosco rimedi specifici.
In poche parole "il metodo giusto" mesà che non c'è o almeno non lo conosco.
Il tuo afterpost non l'ho capito.
Cioè se tu sfrutti questo evento ( o qualsiasi altro ) per il refresh ( o
qualsiasi altra cosa ), lo fai inutilmente per due motivi:
1) il refresh viene richiamato ma solo in riferimento al componente TTable a
cui fa riferimento afterpost.
    Siccome il TTable in questione è proprio quello riferito
all'applicazione che modifica i dati, in questa il refresh avviene
automaticamente.
Cioè l'evento dovrebbe riguardare i TTable delle applicazioni residenti in
tutti i client connessi al tuo database. Di che so io non c'è un evento
simile. L'evento te lo puoi inventare tu se queste applicazioni hanno un
canale di comunicazione dove scambiare dati, che potrebbe essere benissimo
una porta del TCP/IP per inviare un messaggio di notifica che tramite un
metodo fa il refresh su tutti i client. Insomma quello che ti ho già detto
sopra.
2) richiamando il refresh in afterpost, succede che lo fai due volte perchè
paradox lo fa già per fatti suoi !!
Ciao ciao....
Antonio Tarolla

 Ciao Alberto,

Condivido che un database sarebbe la soluzione migliore. Il fatto è che sto
adattando un prg. nato per girare in tutta solitudine.
Adesso ho lasciato da parte il problema del refresh perchè è cetamente più
serio quello del blocco da parte del server (il famigerato file
Pdoxusrs.lck ).
A casa non dispongo di una vera rete ma solo di due pc connessi tra loro. Ho
provato a modificare i protocolli di rete di windows ma non cambia nulla per
cui sono arrivato alla conclusione che il problema sta proprio nei file
paradox (o nel BDE, se volete). Tutto quello che ho trovato sul manuale di
Delphi6 sono due semplici accorgimenti, gli stessi che si trovano sui vari
siti e FAQ:
1) impostare la stessa NetDir su tutte le macchine,
2) impostare la PrivateDir su una cartella locale.
Ho fatto da subito entrambe le cose ma niente da fare.
O meglio, forse mi ripeto, se lancio due, tre, quattro volte la stessa
applicazione dal solo client o dal solo server, basta un refresh "manuale"
(notare che sulla cartella della NetDir si crea solo il file Pdoxusrs.net).
Se invece il pgr.viene lanciato sui due pc, il client non ha più accesso (si
crea il file Pdoxusrs.lck ). Anche se chiudo il pgr. sul client e lo riapro,
gli aggiornamenti non vengono visualizzati. Devo aspettare di chiudere il
pgr. sul server e rilanciare quello del client per vederli.
Per completezza aggiungo che ho aggiunto un componente database a cui le
tabelle fanno riferimento (nel pgr originale non c'era). Non è cambiato
nulla.
Sarà un fatto di rete? E' possibile che su una rete vera il problema non si
presenti? Purtroppo per adesso non posso provarlo.
Se riesco a risolvere, proverò a creare l'evento che mi suggerisci per il
refresh.
Grazie.
Alberto.

Problema blocco lato server RISOLTO! Scusate, mi vergogno di aver montato
tanto polverone, sapete dov'era il problema? Era nel Firewall impostato con
un livello di protezione troppo alto. Nel post precedente, lo dico  per
coloro che dovessero avere gli stessi problemi, avevo dimenticato che i
punti racomandati da Borland sono tre e non due. Bisogna anche impostare
LocalShare a True a meno che non si usi il Novell File Server.
A questo punto una cosa è chiara: la presenza del file Pxodusrs.lck è
normale. Non mi sembra una cosa trascurabile, mi ci sono arrovellato un
pomeriggio intero.
Adesso mi concentrerò di nuovo sul refresh e vi farò sapere.
Ciao.
Alberto.