Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Non o capito una cosa su ADO

Una sola? Mah. Vabbe'. Sono autodidatta (col vostro aiuto) e sto facendo del
mio meglio.
Volevo sapere se qualcuno poteva chiarirmi questa cosa. L'ambientazione e'
un programma in VB6 che accede per qualsiasi tipo di attivita' (o quasi) ad
un DB si SQL Server tramite ADO (possibilmente senza usare ADO DataControl)
Il mio dubbio e' il seguente:
Apro una connessione tramite l'oggetto Connection, e fin qui (nonostante un
altro dubbio che ho proprio su Connection) va tutto bene.
Poi creo un oggetto Recordset e gli assegno una query con
rs.Open query, connessione, bla bla bla
e faccio quello che devo fare.
Poi leggo dell'oggetto Command con i suoi Parameters, che alla fin fine mi
sembra di aver capito che faccia la stessa cosa che ho fatto io prima con
rs. E allora mi (vi) chiedo: che differenza passa utilizzare un metodo o
l'altro? In fondo la query che io passo a rs.Open me la posso
tranquillamente creare come voglio (mi costruisco la stringa di testo SQL
come mi pare e poi la utilizzo); e mi sembra che Command faccia la stessa
cosa (anche a Command si passa una query in una stringa di testo).
Chi mi spiega?
Gia' che ci sono faccio un'altra domanda: e' possibile avere un array di
oggetti Form? Nel senso che vorrei disegnarmi un solo Form ed aprirlo n
volte, a seconda di quante volte mi serve.
Grazie 1000 dell'attenzione e saluti a tutti.
Michele
mic...@iol.it
oppure
mc3...@mclink.it

Michele,
    Allora: la command serve per eseguire stored procedures  o statement
SQL,  puo' essere utilizzata per gestire parametri di input e output. Il
risultato di una command puo' essere un recordset se il comando prevede una
select. Oppure un semplice valore di ritorno.
In linea generale la command serve per ottenere il recordset. Non a caso al
metodo rs.open puo' essere passata una command (ed e' la cosa migliore).
L'uso della rs.open SQL, Connection di fatto crea una command implicita.
Specificandola tu, puoi avere piu' controllo. Anche piu' velocita' di
esecuzione.
Se non hai una stored, puoi usare uno statement SQL con parametri
(CommandType = adCommandText), ma nel caso devi creare il parametro, mentre
con una stored basta valorizzarlo come nell'esempio:
Ad esempio:
With adoCommand
    Set .ActiveConnection = adoConn
    .CommandType = adStoredProcedure
    .CommandText = "pGetFestivita"
    .Parameter("DescFestivita")  = "Sant'Anna"
End with
With adoRecordset
    .CursorLocation = adUseClient
    .CursorType = adOpenkeySet 'non mi ricordo bene...
    .Open adoCommand
    set .ActiveConnection = Nothing ' se vuoi un recorset disconnesso
End with
Set adoCommand = nothing
Nulla vieta di usare la open con la stringa SQL, ma io preferisico l'uso
della Command, cosi' come nel DAO uso le querydef con parametri al posto
degli statement SQL.
Credo anche sia una questione di stile, ma quando leggo post di gente che si
lamenta per gli accenti e gli apostrofi, per non parlare delle date nelle
varie localizzazioni, nelle sql 'on the fly' mi viene sempre da sorridere.
ciao,
Alessandro Scardova
scar...@tin.it
http://space.tin.it/computer/ascardov/

Grazie 1000 per le info.
Saluti
michele
mic...@iol.it
oppure
mc3...@mclink.it