Newsgroup: it.comp.lang.visual-basic
Titolo: [ADO Client/Server - LUNGO] Resync

Ciao a tutti,
il quesito è forse un po'complicato:
ho un sistema C/S via DCOM con aggiornamento Batch ottimistico.
I client lavorano con recordset disconnessi forniti da una routine presente
sul server.
Ogni client la richiama
    Set mrst = mServer.GetRecordset("SELECT...") 'mServer è l'istanza del
server che vede il client via DCOM
2 client (client1 e client2) modificano lo stesso campo di uno stesso
record, e poi invocano la routine del
server che effettua l'UpdateBatch (solo il server può riconnettere
il recordset poichè solo lui conosce la connessione...).
Quindi ogni client richiama
    mServer.UpdateBatch(mrst)
dove (nel server)
    SUB UpdateBatch(rst as ADODB.Recordset)
    ...
        Set rst.ActiveConnection = mConnection ' Riconnessione di rst con la
connessione del Server
        rst.UpdateBatch 'Effettua una Resync se Update Resync è impostata su
adResyncConflicts
            che però è visibile solo qui nel server...
        'Soluzione temporanea - forza l'ultima richiesta
        If mConnection.Errors.Count Then 'Errore
            rst.Filter = adFilterConflictingRecords
            rst.UpdateBatch adAffectGroup 'Forza l'ultimo valore
        End If
        '
        Set rst.ActiveConnection  = Nothing ' Il client lavora
disconnesso...
Ora per client1 va tutto bene, ma per client2 il valore
<campo>.UnderlyingValue
non coincide più con quello effettivamente presente nel DB pertanto
l'UpdateBatch non
ha successo e viene generato un ADO.Error (per la connection).
Quello che sarebbe bello poter fare è "Resync"ronizzare gli UnderlyingValues
del secondo recordset,
così che client2 possa decidere se rieseguire l'UpdateBatch (questa volta
con l'UnderlyingValue corretto)
oppure fare altro.
Ho l'impressione però che la Resync effettuata nel server non venga sentita
automaticamante
nel client (anche se rst è sempre passato per Reference). Ciò non accade né
facendo la Resync a mano né impostando la proprietà "Update Resync".
Ora potrebbe essere necessario impostare un diverso CursorType (ma credo di
aver provato tutte le combinazioni...:)).
La soluzione che per ora uso è quella di far aggiornare automaticamente
al server, dopo la sincronizzazione, il valore del campo attingendolo
dall'ultima
richiesta, soluzione, però molto rigida...
Immagino che solo chi ha già avuto questo problema possa capire il
quesito...:), rileggendolo
infatti non mi sembra chiarissimo...eppure c'ho perso un bel po' di tempo
per scriverlo...
Ringrazio tutti coloro che sono arrivati fino a qui..:)
ed in particolare tutti coloro che proveranno ad aiutarmi...
Ciao
Franco
P.S. Io al meeting c'ero!

 P.S. Io al meeting c'ero!
In questo caso abbiamo pranzato insieme! :-)

 In questo caso abbiamo pranzato insieme! :-)
e credo di aver capito anche chi 6 (quello che cambia sempre nick?...:-))
Ciao e grazie ancora
Franco

 e credo di aver capito anche chi 6 (quello che cambia sempre nick?...:-))
Sì, il capellone :-)
prometto che non lo cambierò più (non avevo valutato le conseguenze...)
Ciao. Andrea.

 prometto che non lo cambierò più (non avevo valutato le conseguenze...)
Ben fatta!..io cambio nick solo sui siti.....:)))))))))))))))))))))))))
Ciao
Franco

 Grazie molte, vale il viceversa!
Ci conto! :-)))
Ciao
Andrea

 prometto che non lo cambierò più (non avevo valutato le conseguenze...)
Ben fatta!..io cambio nick solo sui siti.....:)))))))))))))))))))))))))
Ciao
Franco