Newsgroup: it.comp.lang.visual-basic
Titolo: ADO e tempi di aggiornamento

Ciao a tutti, vi chiedo un aiuto.
Ho la necessita' di aggiornare un database (MDB Access 97) che si trova
sulla macchina A.
Un programma "server" che gira sulla macchina B crea il record nel database.
Un programma "client" che gira sulla macchina C aggiorna il record.
Appena il server ha creato il record, avvisa il client di aggiornarlo; il
client cerca di aprire il record indicato dal server. L'accesso viene quindi
fatto tramite la chiave del record.
Ora, il tutto funziona, ma ho notato che il client, spesso non trova il
record.
Ho provato ad inserire un loop di requery nel client in modo che, una volta
segnalato dal server, continui a cercare il record finche' non lo trova.
Cosi' funziona sempre.
Pare quindi che ci voglia del tempo prima che le modifiche effettuate da ADO
vengano riflesse nel database.
Vi risulta la stessa cosa?
Avete idea di come poter esser certi che l'aggiornamento del DB sia
concluso?
Sicuramente ignoro qualche proprieta' o evento di stato di ADO...
Grazie in anticipo.
--
Marco

 ha scritto nel messaggio
news:RpII8.19092$ie.4...@twister2.libero.it...

Ciao Marco,
dai un'occhiata ell'evento ExecuteComplete dell'oggetto Connection,
in particolari situazioni potrebbe fare al caso tuo.. non garantisco che
risolva il tuo problema ( annoso....) però tentar non nuoce..
Ciao
 Valter

 ha scritto nel messaggio
news:RpII8.19092$ie.4...@twister2.libero.it...

Oh, madonnina mia (ciao Valter), insisto, .... quanto è giovane ADO!

 Oh, madonnina mia (ciao Valter), insisto, .... quanto è giovane ADO!
Ciao Lupo ;-)
ADO sarà pure giovane ma tu sei una specie di Erode... :-))
Ciao
 Valter

Avevo provato qualcosa con gli eventi, in particolare il
RecordChangeComplete, ma ho notato che non veniva lanciato (credo che venga
lanciato solo per cursori lato client o in Lock asincrono).
Ora non mi riesce definire il prototipo per l'ExecuteComplete che mi
suggerisci.
Ho usato il seguente:
-------------------------------------------------
Dim WithEvents eventCnn As ADODB.Connection
Private Sub eventCnn_ExecuteComplete(ByRef RecordsAffected As Long, ByRef
Errore As ADODB.Error, ByRef Stato As EventStatusEnum, ByRef Comando As
ADODB.Command, ByRef RS As ADODB.Recordset, ByRef Conn As ADODB.Connection)
    Debug.Print "Evento EXECUTE_COMPLETE"
End Sub
-------------------------------------------------
Nella documentazione non riesco a trovare la definizione corretta e questa
non corrisponde, posso approfittare ancora un po' della tua disponibilita'?
O:)


 non corrisponde, posso approfittare ancora un po' della tua
disponibilita'?
Private Sub EventCnn_ExecuteComplete
(ByVal RecordsAffected As Long,
ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum,
ByVal pCommand As ADODB.Command,
ByVal pRecordset As ADODB.Recordset,
ByVal pConnection As ADODB.Connection)
Tieni presente che invece questo evento viene generato solo con query
inoltrate tramite il metodo Execute di un oggetto connection o
command oppure al momento della open di un rs.
Ciao
 Valter

 ha scritto nel messaggio
news:RpII8.19092$ie.4...@twister2.libero.it...

Cursor side ?
    Saluti

Ciao Valter,
            ho provato, ma a quanto pare l'evento viene generato prima che
il record sia effettivamente scritto nel database.
Sebbene la documentazione di ADO asserisca che la UPDATE ritorna il
controllo (se non si usano lock asincroni) solo DOPO aver aggiornato il
database, il funzionamento pare non essere quello.
Come ulteriore tentativo, anche se in effetti si tratta di un singolo
record, ho provato ad usare una transazione.
La situazione pare migliorare un po', ma non del tutto, alcune volte il mio
client e' comunque costretto ad aspettare che il record "compaia" nella
tabella.
La mia soluzione finale e' stata quella di utilizzare la transazione, ma
senza fare a meno, nel client, di un loop-ettino di ricerca del record
(qualora non venisse trovato al primo colpo).
Se hai qualche suggerimento, e' ben accetto.
Intanto ti ringrazio per l'aiuto davvero PREZIOSO!
