Newsgroup: it.comp.lang.visual-basic
Titolo: [?] ado e refresh recordset

salve a tutto newsgroup,
sto svilluppando una piccola applicazione per mio padre e per la prima
volta sto usando ado con jet 4.0 o almeno credo (anche se per questo
programma non sarebbe servito in quanto il db contiene una sola tabella
e non faccio tante cose)
non essendo esperto ho messo un oggetto adodc sul form collegandolo
staticamente al mio database e settandolo con queste opzioni
CommandType = acmTable
ConnectionString =Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=mio.mdb;Persist Security Info=False
CursorLocation = adUseServer
CursorType = adOpenDynamic
LockType = adLockOptimistic
Recorsource = miatabella
ho messo nascosto l'oggetto e mi sono ridefinito i pulsanti per avanti
indietro,cancella,nuovo e modifica e funzionano a meraviglia, se non
fosse che quando aggiungo un nuovo record il record aggiunto non compare
poi tra i record disponibili se navigo con recorset.movenext o altro
mentre per i record aggiornati, se modifico la chiave poi non viene
riordinato il database.
Il database l'ho definito con access e ho messo la chiave su un campo
numerico e messo ordinato in modo crescente.
sotto posto il codice che utilizzo per fare la new e poi l'update del
record
Private Sub cmdNuovo_Click()
On Error GoTo gestione_errori:
ConDB.Recordset.AddNew
Exit Sub
gestione_errori:
    MsgBox "errore durante cmdNuovo " & Err, vbCritical, "!!! E R R O R
E !!!"
    Resume Next
End Sub
On Error GoTo gestione_errori
WriteRecorset ' funziona che copia i valori dalla textbox nel record
corrente
ConDB.Recordset.Update
ConDB.Refresh ' ho provato a mettere il refresh sperando che facesse
qualcosa
Exit Sub
gestione_errori:
If Err = -
2147217887
 Then
     txtPeriodo.Text = 0
    txtPeriodo.SetFocus
    MsgBox " 'PERIODO' " & Chr$(13) & Chr$(13) & "GIA' INSERITO ",
vbCritical, "       !!! E R R O R E !!!"
Else
    MsgBox "errore durante cmdSalva " & Err, vbCritical, "!!! ATTENZIONE
!!!"
End If
End Sub
grazie e buone feste
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 riordinato il database.
Se non ne hai assoluta necessità (di vedere in tempo reale le modifiche di
altre postazioni, ma talmente reali che ti cambiano pure le
informazioni/puntatori che stai elaborando), lascia perdere adOpenDynamic e
usa il più "tranquillo" adOpenStatic.
Vedi anche se fra i metodi di quel controllo (non della connessione) c'è un
Requery e/o un Refresh


ho messo adOpenStatic ma non è cambiato niente, l'unica cosa che ho visto è
che se faccio due volte
adodc.recorset.update e poi adodc.refresh allora mi inserisce anche i record
che ho inserito o modificato
come mai?
avevo messo adOpenDynamic nel casa in cui mio padre facesse tanto il bravo
da aprire
il programma da postazioni diverse e in questo modo credo che non perderei
record e non avrei
incosistenze, giusto?


allora..............ho capito perchè non rinfresca il recordset o meglio, il
recordset viene rinfrescato ma devo aspettare almeno 5 o 6 secondi e poi
appare
il record inserito o modificato, non c'è quache opzione che faccia questo in
modo istantaneo???
grazie

 modo istantaneo???
Più di tanto (non usando controlli Data) non saprei dirti.
Leggi (integralmente e sentendo tutte le campane) questo 3d:
http://makeashorterlink.com/?I103138E2
Per quanto riguarda il tipo di cursore (Dynamic o Static) non riguarda l'uso
da più postazioni (possibile anche con Static), ma solo (col primo) la
visione in tempo reale delle modifiche fatte anche da altre utenze. Se non
vi sono necessità specifiche, lo sconsiglio vivamente perchè, letteralmente
e correttamente, ti cambia le carte in tavola mentre stai giocando.


ho letto il thread in questione e io risolgo facendo due refresh al posto di
uno almeno da quel poco che ho provato, per il tipo di cursore userò il tipo
static se avrò problemi con il dynamic, ancora non ho ben precisa la
differenza forse perchè sto usando ADO per una cosa su cui non serviva ADO e
quindi non ne vedrò l'utilità.
Una cosa invece te la chiedo, io ho utilizzato l'ocx di ADO da mettere sulla
form poichè non sapevo come si facesse da codice, ma sbirciando un pò il tuo
ESPODAMA ho visto come si fà un collegamento via codice, anche perchè per
utilizzare il componete adodc ho dovuto legare un campo della tabella ad una
text box nascosta poichè tutti i campi da passare alle text box ridefinite
li gestisco via codice, penso a questo punto che utilizzando il codice
dovrebbe sparire anche il mio problema se è come scritto nel thread che mi
ha passato nel post precedente.
tu cosa ne pensi?

 ha passato nel post precedente.
Non ho riletto il 3d, ma credo di ricordare che fosse un ritardo dovuto
all'uso di diverse connessioni. (PS: Ora ci sono tornato e il link ufficiale
lo spiega bene
http://support.microsoft.com/default.aspx?scid=KB;EN-US;q216925
, non
entriamo nel merito, per carità, partirei con una filippica ormai noiosa...)
Usando solo codice (e mai controlli legati ai dati) non ricordo di aver mai
avuto il problema che tu menzioni, presumibilmente sintetizzabile nella
"freshezza" dei dai in memoria, non su disco. (PS: Da codice si tende a
usare la stessa connessione per la stessa fonte dati, non c'è motivo, nello
stesso EXE, di avere più connessioni, anzi per SQL Server vorrebbe dire
sprecare licenze)
In ogni caso, dopo un po' di esperienze (troverai conferma leggendo un po'
di post), si preferisce non usare per niente tali controlli e fare tutto da
codice. L'unica "limitazione" consiste nella rappresentazione dei dati che
deve essere fatta via codice (e non "comodamente" con una griglia legata ai
dati), per tutto il resto il codice (come quantità e qualità) è del tutto
simile. Il vantaggio è quello di "controllare" meglio il tutto e di
rappresentare i dati davvero come si vuole. Scrivendo un po' di codice, una
volta per tutte, allo scopo di comporre una griglia sganciata dai dati (come
MSFlexGrid), il problema è definitivamente risolto. Inoltre si scongiurano i
buchi (e ce ne sono) di tali controlli e ci si mette nelle condizioni (senza
sconvolgere la logica del programma) di far fronte, domani, a nuove
situazioni per le quali non è detto che un controllo venga contestualmente
adeguato.


grazie dei consigli e delle risposte