Newsgroup: it.comp.lang.visual-basic
Titolo: chiusura recordset in componente activex dll

ciao a tutti
ho una funzione all'interno di una dll activex creata in vb che
inserisce dei dati in un database sql server mediante una stored
procedure; i dati gli vengono passati da un form che fa parte di un
altro progetto vb; quando richiamo la funzione dal form mi dice che
l'operazione non può essere eseguita perchè l'oggetto (il recordset che
uso per eseguire la stored procedure) è chiuso. Se lascio aperto il
recordset tutto funziona correttamente, ma non mi sembra una cosa molto
intelligente, nel senso...che fine fa il recordset che lascio
aperto?...esiste un modo per chiuderlo dal form e non all'interno della
dll?
grazie dell'attenzione
ciao
sergio
Sent via Deja.com 
http://www.deja.com/
Before you buy.

 dll?
Piuttosto: esiste un modo per descrivere meglio il tuo problema ?
Ciao
Aldo


se dopo l'execute faccio un rs.close seguito da un set rs= nothing, come
credo sia giusto fare, non riesco a eseguire la funzione...
grazie
ciao
sergio

 uso per eseguire la stored procedure) è chiuso
Vuoi dire che va in errore la dll ? Se e' cosi', cosa sta cercando di fare
prima di dare l' errore ? Per continuare, secondo me, occorre vedere il
codice che procura il problema perche' siamo ancora sul vago.
Magari nel frattempo hai gia' risolto. Se si', cos'era ?
Ciao
Aldo


grazie ancora :)


 funziona piů...
Il rs.close dovrebbe fallire sempre perche' non puo' essere aperto, a meno
che la stored procedure non faccia qualche select che rimane appesa.
Riporto da msdn un estratto sul metodo Execute dell' oggetto Command:
''''''''''''''''''''''''''
Syntax
For a Recordset-returning Command:
Set recordset = command.Execute( RecordsAffected, Parameters, Options )
For a non-recordset-returning Command:
command.Execute RecordsAffected, Parameters, Options
Return Value
Returns a Recordset object reference, a stream, or Nothing.
'''''''''''''''''''''''''''''''''''''''''''''''
Stavo pensando che forse la cosa piu' semplice e' costruire la stringa della
procedure con il parametro e lasciar stare command e recordset, usando solo
la connection (io  faccio quasi sempre cosi' perche' mi sembra piu'
semplice, ma non so se sia meglio o peggio):
Function AggiornaQualcosa( ByRef cn As Connection, ByVal strParam As String)
As Boolean
    Dim sql As String
    Dim nRigheModificate As Long
    sql = "my_proc '" & strParam & "'"
    On Local Error Resume Next
    cn.Execute sql, nRigheModificate
    If Err Then
        MsgBox Err.Description
    Else
        If nRigheModificate > 0 Then
            AggiornaQualcosa = True
        Else
            MsgBox "Qualcosa non ha funzionato"
        End If
    End If
End Function
'''''''''''''''''''''''''''
Che ne pensi ?
Ciao
Aldo

 Il rs.close dovrebbe fallire sempre perche' non puo' essere aperto, a
meno
giusto...era questo il problema :)

se fai in questo modo, specificano la stringa della query e chiamando
poi il metodo execute della connection, ado è costretto a determinare
il tipo della query, e sembra che ciò provochi un leggero rallentamento
nell'esecuzione; lavorando con una stored procedure si può ottimizzare
il funzionamento assegnando esplicitamente le proprietà dell'oggetto
command (facendo risparmiare un po' di lavoro ad ado):
cmd.CommandText="Nome_SP"
cmd.CommandType=adCmdStredProc
grazie mille dell'aiuto :)
