Newsgroup: it.comp.lang.visual-basic
Titolo: ADO: Command.Execute

Win95, VB6 Pro.
Ciao,
premetto: e' da poco che studio ADO e provengo da DAO.
Ho un problema nel seguente semplice codice preso da un
articolo della KB.
cn.Open "Provider=...;Data Source=..."
With cmd
     .ActiveConnection=cn
     .CommandType=adCmdText
     .CommadText="SELECT FirsName, LastName FROM Employees"
     .Execute <<---- Bho!
End with
With rs
     .ActiveConnection=cn
     .CursorLocation=adUseClient
     .Open cmd
End with
Cio' che non riesco a capire e' l'Execute dell'oggetto Command.
Se, come ho capito, restituisce un recordset perche' non lo assegno
direttamente ad un oggetto Recordset?
   set rs=cmd.Execute
Questo recordset "fantasma" viene invece assegnato con:
   rs.Open cmd?
non e' un passaggio un po' contorto?
Grazie,
teddy...@hotmail.com
ICQ 7044062
Como - Italy

Infatti, secondo me l'execute e' assolutamente inutile, in quanto la
chiamata al metodo open dell'oggetto recordset causa la chiusura e la
riapertura del recordset..
Ti passo una funzioncella che ho scritto e che serve per aprire un
recordset a partire da una stringa SQL.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''  OpenRecordset
''  Helper per l'apertura di un recordset come indicato dalla stringa
''  SQL Passata
''
Public Function OpenRecordset(cnsApp As ADODB.Connection, _
                              strSQL As String, _
                              Optional ByVal iCursorType =
adOpenStatic, _
                              Optional ByVal iLock = adLockOptimistic)
As ADODB.Recordset
    Dim cmdApp As ADODB.Command
    Dim rstApp As ADODB.Recordset
 
    Set cmdApp = New ADODB.Command
    Set rstApp = New ADODB.Recordset
 
    Set cmdApp.ActiveConnection = cnsApp
    cmdApp.CommandType = adCmdText
    cmdApp.CommandText = strSQL
    rstApp.CursorLocation = adUseClient
    rstApp.Open Source:=cmdApp, _
                CursorType:=iCursorType, _
                LockType:=iLock
 
    Set cmdApp = Nothing
    Set OpenRecordset = rstApp
End Function
Nota che probabilmente la formattazione e' andata a pallino.... :(
Ciao!
Luca Menegotto
On Thu, 23 Sep 1999 19:31:35 GMT, 
teddy...@hotmail.com
 (TeddyBoy)
wrote:


 End Function
Scusa ma secondo me l'oggetto command, se non hai bisogno di passargli
parametri e non č precompilato nel database (tu lo crei da una stringa SQL
che passi alla funzione) non serve a niente.
Perchč non lo elimini addirittura?
Public Function OpenRecordset(cnsApp As ADODB.Connection, _
                              strSQL As String, _
                              Optional ByVal iCursorType = adOpenStatic, _
                              Optional ByVal iLock = adLockOptimistic) As
ADODB.Recordset
    Dim rstApp As ADODB.Recordset
    Set rstApp = New ADODB.Recordset
    rstApp.CursorLocation = adUseClient
    rstApp.Open strSQL, cnsApp, iCursorType, _
                iLock, adCmdText
    Set OpenRecordset = rstApp
End Function
BTW, anche se non c'entra con quanto detto sopra, segnalo che con l'OLE-DB
Provider per Jet le query precompilate sono enormemente pių lente di quelle
create on-the-fly da una stringa SQL nel codice (anche se MS dice il
contrario).
Quindi io con Access consiglierei di usare l'oggetto command solo se bisogna
far eseguire qualcosa (query di aggiornamento, di eliminazione, magari con
parametri ecc.) e mai per fargli restiuire un recordset.
Ciao,
   <--< Nik >-->

Puo' darsi che ora funzioni.... all'epoca in cui e' stata scritta
questa funzione, non sono riuscito a aprire un recordset passando al
metodo Open una stringa SQL in modo diretto, per cui l'unica strada
che son riuscito a percorrere e' stata quella di utilizzare un oggetto
command. Se ora funziona... beh, grazie per la segnalazione,
rimuovero' il codice in piu' quanto prima! :)
Cisrca le queries precompilate.... io ho il sospetto che non vengano
precompilate affatto!
Ciao!
