Newsgroup: it.comp.lang.visual-basic
Titolo: [ADO] primo tentativo quasi fallito...

ciao!
come scrivevo qualche tempo fa, ho la necessità di imparare al volo ADO
poichè mi servono alcune sue funzioni da applicare a un software già fatto
da altri....
bene, mi perdo in un bicchier d'acqua... ma come mai non riesco a 'popolare'
l'oggetto recordset, come da esempio nella guida ?
---------
Dim source As ADODB.Connection
Dim tmpRCS(5) As ADODB.Recordset
Set source = New ADODB.Connection
source.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist
Security Info=False;Data Source=" & datapath
source.Open
Set tmpRCS(0) = New ADODB.Recordset
tmpRCS(0).Open "Dispo_Cli_A", source, adOpenDynamic, , adCmdTableDirect
MsgBox tmpRCS(0).RecordCount
----------
mi restituisce sempre -1, anche se la connessione è ok. infatti se provo a
visualizzare i campi (field) mi ritorna i dati. ho provato anche con il
metodo movelast per forzare il popolamento ma mi da sempre -1. dove sbaglio
?
grazie!
Marco

 ciao!
prova con
Source.CursorLocation=adUseClient
non so se quella versione del provider jet supporta Dynamic lato client
Devi sapere che un database, Provider permettendo, lo puoi aprire lato
Server o lato Client
A grandissime linee e sperando che i "puristi" non si arrabbino
Con il lato server "stressi" alquanto il motore db che sta sul server ma
acquisti un eneorme vantaggio...in rete circola solo il risultato della tua
elaborazione.
Nel tuo caso non ha senso perchè apri ua tabella (cosa da evitare se
possibile)
Con il lato client il server ti spedisce tutta la tabella che elabori
localmente.
Svantaggio di avere un grande traffico in rete e di essere soggetti ancor
più ai rischi della concorrenza nell'input dati
Vantaggio....hai il recordcount e tante altre facilitazioni
PERO' tutto è complicto anche dal tipo di motore db che usi
considera che access non è un vero database client/server
Si comincia da msde(sqlserver) in su.....
E CONSIDERA che il provider non è detto che ti fornisca tutti gli accessi
per tutti i modi di lock e per il tipo di cursore
Non è detto che ti offra l'accesso dinamico pessimistico lato server (ad
esempio)
IN MSDN cerca
cursori client
Considera quello che ti ho detto in questa ottica:
Se sei ad usare un db per una app monoutente fregatene....per vorresti un po
ottimizzare...
diciamo che se invece di:
tmpRCS(0).Open "Dispo_Cli_A", source, adOpenDynamic, , adCmdTableDirect
potresti
TSQL="SELECT * FROM Dispo_Cli_A WHERE Codice Like 'A*'" (ad esempio
eh!occhio che ad potrebbe volere il % al posto del *)
tmpRCS(0).Open TSQL, source, adOpenKeyset
già generi molto meno traffico sulla rete
Anche in una ottica multi utente.....
Aprilo keyset e gestisce dopo la concorrenza
Lock Ottimistico
UpdateBatch
Dinamico pessimistico usalo il meno possibile...è il più lento e il più
gravoso per le prestazioni (è però il più facile da usare....è una
scorciatoia!...ma come tutte le scorciatoie alla fine non ne cavi le gambe!
e duti più fatica!)
Ciauz!

 Ciauz!
ciao e grazie per l'esauriente spiegazione!!!!
Marco

 ?
adOpenDynamic, lato Server, non gestisce bookmarks e RecordCount (oltre ad
altre cose utili come il .Clone).
In più, attenzione, modifica il tuo recordset in tempo reale in quanto vede
le modifiche di altri (adOpenKeyset, vede solo le eliminazioni). E'
concettualmente più che comprensibile, ma sconvolgente osservarne gli
effetti mentre il tuo programma lavora (o tende a) tranquillamente sul
recordset.
Se non hai questa reale necessità (basta ricomporre il recordset per
rinfrescarlo) e vuoi mantenere il lato Server, lascia perdere e usa
adOpenStatic. A qual punto ADO (a parte la gestione delle strutture che va
fatta con ADOX) è praticamente identico a DAO.

 fatta con ADOX) è praticamente identico a DAO.
grazie!!!
Marco

 rispiegarmi brevemente il concetto in maniera diversa ? sorry... :)
Sempre riferendomi al lato server, volevo solo dire che adOpenStatic è
praticamente identico al Dynamic di DAO, col vantaggio (?, vedi tu) rispetto
al Dynamic di ADO di avere il recordset, appunto, statico (+ recordcount,
Clone, Bookmarks, etc). Quindi la stessa cosa che ADO (in ogni modalità) ti
dà con il lato Client, ma con i vantaggi del lato server (di nuovo molti ?).
Se vuoi vedere la versione aggiornata del recordset ti basta ricomporlo.

 Se vuoi vedere la versione aggiornata del recordset ti basta ricomporlo.
ok, grazie! ho capito!
Marco