Newsgroup: it.comp.lang.visual-basic
Titolo: problema con ADO

CIao a tutti,
sto cercando di sostituire le connessioni ad un database tipo Access, create 
con DAO 3.6, con delle nuove connessioni di tipo ADO. Ma ho il seguente 
problema....
il recordset mi rimane vuoto
ho fatto la connessione in questo modo:
dim pippo as long
dim AdoConnStr as ADODB:Connection
dim AdoCommand as ADODB.Command
dim AdoRec as ADODB.Recordset
Set AdoConnStr = new ADODB.Connection
AdoConnStr.Open = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PathDB & 
";Mode=ReadWrite;Persist Security Info=False"
Set AdoCommand = New ADODB:Command
With ADODB.Command
    .ActiveConnection = AdoConnStr
    .CommandType =adCmdText
    .CommandText = "Select * from tab1"
end with
Set AdoRec = New ADODB.Recordset
with AdoRec
    .CursorType = adOpenDynamic
    Set .Source = AdoCommand
    .Open
    .MoveFirst
    ,MoveLast
'''questa istruzione mi restituisce  -1 cioe recorset vuoto
 pippo =    .RecordCount
end with
Sapreste dirmi dove sbaglio? E perche mi ritorna uin recorset vuot quando al 
tabella ha dentro acirca 50 record??
Grazie
Emanuele 

 ";Mode=ReadWrite;Persist Security Info=False"
Prova con (via tutta la parte di ADODB.command).
Set AdoRec = New ADODB.Recordset
Adorec.Open "SELECT .... ",AdoConnStr,adOpenStatic, adLockOptimistic
Con alcuni provider non c'è bisogno di movefirst e movelast
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Ti ringrazio per il tuo aiuto...anche se un po in ritardo ci ero arrivato 
anche io e quindi mi scuso per la frettolosita con cui ho postato la 
domanda, anche se spero sia servita ad altri.
Vorrei chiederti un'altra cosa...
sfruttando il codice di prima (opportunamente modificato e funzionante), è 
corretto dopo aver fatto la connessione all'ADo, anteporre begintrans alla 
lettura del recordset?
Esempio
'sono in un modulo di form
ApriADOConn (StringaSQL)
'La funzione ApriADOConn() contiene il codice scritto prima, ovviamente 
funzionante
' la variabile ADORecordset è pubblica e quindi la posso richiamara da 
qualsiasi form dopo averla caricata di record nella
' funzione ApriADOConn
AdoConnStr.BeginTrans
if AdoRec.RecordCount > 0 then
'eseguo le operazioni sui fields del recordset
end if
if AdoConnStr.Errors > 0 then
   AdoConnStr.RollBack
else
  AdoConnStr.CommitTrans
end if
Ammettendo che sia corretto il modo di chiamata dei Begin, commit, rollback, 
ha senso chiamarli fuori dalla funzione che si occupa di connettersi al 
database? avrebbero una utilità messi in questo modo?
Ti ringrazio dell'eventuale risposta.
Grazie
Emanuele

 Emanuele
Per chiamare una transazione che io sappia devi essere connesso...
come ti connetta e dove...non importa!
fatti una funzione che si connette e riporta un oggetto
adodb.connection...schiaffala in un modulo ed usala tutte le volte che vuoi!
ad es.
Set miaConnTemp=ApriConnessione
poi.....detto mille volte....se usi ADO....
e fai un programma con logica client/server (multiutente)...ado ha il
connection pooling....
ossia:
Apri la conn...recuperi il recordset....chiudi la conn....
fai quello che vuoi...riapri la conn...aggiorni il recordset...chiudi la
conn...
NON è più lento....riutilizza le connessioni non usate da altri....
inoltre
...le transazioni "stressano" il database....meno le usi meglio è!
Se il database è evoluto ci sono trigger e stored....perchè non fai fare lo
"sporco" lavoro al db???
-- 
Il Wodkino Nazionale è a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
 New Entry nel bestiario!
Aderisci al M.A.I.  
http://www.villaceleste.it/html/icadioti/

connettersi al database? avrebbero una utilità messi in questo modo?
La funzione di connessione al database ha la ... funzione (scusa il 
bisticcio) di connettersi al db (e probabilmente disconnettersi), le 
transazioni dovranno essere utilizzate per raggruppare una serie di 
operazioni di Add, Update, Del in modo da renderle atomiche, quindi come se 
fosse un'unica entità.
Scusa nel caso avessi travisato la domanda.
Ciao
Stefano 

ringrazio entrambi per le risposte datemi....
io personalmente non ho mai usato le transazioni, ddato che uso lavorare sui 
record separatamente dalla connessione al db, e risalvarli sul database solo 
a operazioni e manipolazioni concluse.
Pero ho capito l'uso
grazie
Emanuele 

 ha scritto nel messaggio 
news:j10Ke.10815$F23.1...@twister2.libero.it...

Ciao,
anche se fai le operazioni a database scollegato e poi le salvi
successivamente, le transazioni sono praticamente obbligatorie.
Mi spiego:
Hai 3 tabelle
Tabella A
Tabella B
Tabella RelazioneAB
se devi salvare un record su A, uno su B e uno di relazione tra A e B le
operazioni che esegui sono tre
Senza transazioni:
Add A
Add B
Avviene un Errore
Add C non viene eseguito
Ti ritroveresti un db inconsistente, perchè hai un record nella tabella A,
uno in quella B e nessuno nella  tabella di collegamento (immagina che la
tabella A sia quella dei clienti e la tabella B quella dei Prodotti, ti
mancherebbe il campo che collega il prodotto al cliente)
Con transazioni:
BeginTransaction
    Add A
    Add B
    Avviene un errore
    ...
    ...
    Rollback
Nessun dato scritto, database consistente.
Considera che questo avviene sia nel caso in cui esegui le tre operazioni
connesso sempre al db, sia nel caso in cui ti colleghi solo per aggiornare.
Spero di essere riuscito a spiegarmi un po' meglio questa volta.
Ciao
Stefano

 a operazioni e manipolazioni concluse.
A maggior ragione devi usare le transazioni, visto che le singole 
modifiche vengono ad essere intercalate da codice VB.
Alberto
-- 
Autore di
"Petting for Dummies"


AZZ..come no detto..
dopo la spiegazione di stefano e la tua esortazione, credo che rivedro la 
mia linea operativa....
grazie
Emanuele 


te la potresti cavare con un simil log che scrive via via le query eseguite
per fare un "rollback de'noartri"...ma in pratica re-inventeresti le
transazioni!


Soluzione "praticabile" in monoutenza, in multiutenza potrebbe generare 
casini indicibili.
La gestione delle transazioni di ADO penso sia più sicura.
Ciao
Stefano