Newsgroup: it.comp.lang.visual-basic
Titolo: [?] ADODB

Scrivo questo post per un solo motivo: so che M$ non avrebbe mai soppiantato
il collaudato DAO con il nuovo ADO con tutte le complicanze che porta, per
cui mi sono convinto che le complicanze che porta in realtà le porto io!
Ho cominciato ad usarlo da poco, mi sono scaricato dal SC tre applicazioni e
l'ADO tutor, riuscendo a fare semplici operazioni (open, close...) ma quando
si è trattato di usare delle query mi si sono complicata le cose:
Ho scritto:
    rstVarie.open "SELECT Desc FROM tabVarie" &_
"WHERE Cod=strCod",cnnArc, adLockReadOnly, adOpenStatic
ma mi da errore sull'istruzione FROM (e naturalmente i collegamenti a M$DN
sono sbagliati), così ho messo la query in access e funzione (copiando
spudoratamente da ADO Tutor), ma volendo definirle da codice, come
bisognerebbe fare?
Poi dovrei popolare un combo con un campo di una tabella, ma mentre con DAO
uso 5 istruzioni, con ADO ne uso 6 se non devo usare query, mentre se le
devo usare:
    cmdTemp.CommandText = "qryVarie"
     Set prmTemp = cmdTemp.CreateParameter("strTab", adVariant, _
adParamInput, , "Nazione")
     cmdTemp.Parameters.Append prmTemp
     frmMDIMain.rstVarie.Open cmdTemp, , adOpenStatic, adLockReadOnly
     For intConta1 = 0 To frmMDIMain.rstVarie.RecordCount - 1
          frmMDIMain.rstVarie.MoveFirst
          frmMDIMain.rstVarie.Move (intConta1)
          cboNaz.AddItem frmMDIMain.rstVarie!Desc, intConta1
     Next intConta1
     cmdTemp.Parameters.Delete (0)
Sbaglio qualcosa io vero? Lo spero!
Un ultima domanda: mentr con DAO aprivo il recordset all'avvio del programma
e li chiudevo alla fine, con ADO mi sembra di aver capito che li apro quando
mi servo e li devo richiudere dentro la stessa Sub. Questo procedimento
deriva dal fatto che non ho trovato il sistema per aggiornare i dati secondo
una query diversa da quella con cui ho aperto il recordset? C'è un modo per
farlo o devo continuare così?
Devo proprio ringraziare . Grazie a chi risponde a chi legge e al NG!


Quasta non l'ho proprio capita .. potresti spiegarti meglio (o forse sono io
che ormai non capisco + un ca@@o ?)
Davide


prova forse .open "SELECT [Desc] FROM tabVarie" &_
Desc dovrebbe essere una parola riservata...
saluti
Andrea Montanari
a_mon...@libero.it
http://utenti.tripod.it/a_montanari/dbamgr.html
(my vb6+sql-dmo little try to provide M$ MSDE a visual interface) ver 0.0.11

| Beh .. così funziona ... anche se è un po' + lento ... ma perchè non usi
il
| calssico ciclo
|
| Do until frmMDIMain.rstVarie.EOF
|            cboNaz.AddItem frmMDIMain.rstVarie!Desc, intConta1
|             frmMDIMain.rstVarie.Movenext
| Loop
In effetti c'hai anche ragione, basta mettere un'If in più a quello che hai
scritto e funziona perfettamente... Thanks
| Quasta non l'ho proprio capita .. potresti spiegarti meglio (o forse sono
io
| che ormai non capisco + un ca@@o ?)
|
| Davide
Allora provo a spiegarmi: da quello che ho capito di ADO, si può impostare
la stringa SQL di ricerca solo nell'istruzione Open del recordset, quindi se
io devo prendere dei record che rispondono ad un'altra condizione non posso
settare la stringa SQL magari con rsXXXX.ConnectionString="SELECT... ma devo
fare:
rsXXXX.close
rsXXXX.open "SELECT...
Posso comporarmi naturalmente come se fossero recordset DAO (o almeno come
li usavo io) e aprirli in Form_Load con dentro tutti i record della tabella
di Access, e poi "filtrare" i record da codice, ma usando il provider M$ Jet
(l'unico che sono riuscito a far funzionare) mi mancano la proprietà Index e
il metodo Seek, certo potrei farmi una routine che me lo simula, ma
sinceramente mi cascano braccia e ... quando penso "perchè non sono rimasto
tranquiillo a programmare in DAO" perchè se lo dovessi usare così, oltre che
più complesso sarebbe anche più lungo (in fatto di codice e, a quanto se ne
dice, anche di velocità di accesso). Va be' non mi sembra di essermi
spiegato tanto meglio, cmq











rstVarie.open "SELECT Desc FROM tabVarie" &_
 "WHERE Cod=strCod",cnnArc, adLockReadOnly, adOpenStatic
fai un print della stringa: a me sembra che tabVarie e WHERE siano attaccati,
quindi non trova la tabella "tabVarieWHERE"
