181 messaggi dal 12 dicembre 2001
giangi_77 ha scritto:
non ricordo bene la sintassi di asp e magari mi confondo con quello che si può fare con asp.net, ma hai provato a non impostare niente al tuo RSlocale ?

str = "select categoria from categorie where id_cat = 1 "

Set RSlocale = Server.CreateObject("ADODB.Recordset")
RSlocale = esegui(str)
oppure

str = "select categoria from categorie where id_cat = 1 "

Set RSlocale = esegui(str)
ciao



si se non faccio poi nulla sul Recordset, ma lo assegno e basta, nno mi da' errore.
cioe' se non faccio poi "if not RSlocale.eof...etc...."

function esegui(strSQL_arrivata)

Set conn = Server.CreateObject("ADODB.Connection")    
conn.ConnectionTimeout = Application("ALLOT_ConnectionTimeout")
conn.CursorLocation = Application("ALLOT_CursorLocation") 
conn.CommandTimeout = Application("ALLOT_CommandTimeout")
conn.Open Application("ALLOT_ConnectionString"), Application("ALLOT_RuntimeUserName"), Application("ALLOT_RuntimePassword")

Set RSxxx = Server.CreateObject("ADODB.Recordset")
RSxxx.CursorType = adOpenDynamic
RSxxx.LockType = 3

esegui = RSxxx.open (strSQL_arrivata, conn)

RSxxx.close
Set RSxxx = Nothing
conn.close
Set conn = Nothing

end function



str = "select categoria from categorie where id_cat = 1 "

Set RSlocale = Server.CreateObject("ADODB.Recordset")
RSlocale = esegui(str)   ' QUI TUTTO BENE

' se commento le righe sotto, non ho errore...
' pero' poi come faccio a recuperermi il recordset ?
'if not RSlocale.eof then
'categoria = RSlocale("categoria")
'Response.Write "<br>categoria : "& categoria
'end if
'RSlocale.close

Set RSlocale = Nothing



678 messaggi dal 12 maggio 2001
www.idioteca.it
ho un dubbio ancora...
ma se invece di scrivere

esegui = RSxxx.open (strSQL_arrivata, conn)

facessi la tua open classica e solo dopo assegni RSxxx come return della tua funzione?

Non ricordo, ma dovresti poter fare

RSxxx.open (strSQL_arrivata, conn)
return RSxxx


o no?
Nel caso farei

RSxxx.open (strSQL_arrivata, conn)
esegui = RSxxx


ciao
181 messaggi dal 12 dicembre 2001
giangi_77 ha scritto:
ho un dubbio ancora...
ma se invece di scrivere

esegui = RSxxx.open (strSQL_arrivata, conn)

facessi la tua open classica e solo dopo assegni RSxxx come return della tua funzione?

Non ricordo, ma dovresti poter fare

RSxxx.open (strSQL_arrivata, conn)
return RSxxx


o no?
Nel caso farei

RSxxx.open (strSQL_arrivata, conn)
esegui = RSxxx


ciao



quasi quasi, come dici tu nella funzione e' ok.

pero' poi mi da' errore nella pagina sove devo prelevare il recordset che torna indietro :



function esegui(strSQL_arrivata)

Set conn = Server.CreateObject("ADODB.Connection")    
conn.ConnectionTimeout = Application("ALLOT_ConnectionTimeout")
conn.CursorLocation = Application("ALLOT_CursorLocation") 
conn.CommandTimeout = Application("ALLOT_CommandTimeout")
conn.Open Application("ALLOT_ConnectionString"), Application("ALLOT_RuntimeUserName"), Application("ALLOT_RuntimePassword")

Set RSxxx = Server.CreateObject("ADODB.Recordset")
RSxxx.CursorType = adOpenDynamic
RSxxx.LockType = 3

RSxxx.open strSQL_arrivata, conn
esegui = RSxxx     ' TUTTO OK QUI COME DICI TU

RSxxx.close
Set RSxxx = Nothing
conn.close
Set conn = Nothing

end function


' ------------------------------------------------------------
str = "select categoria from categorie where id_cat = 1 "

Set RSlocale = Server.CreateObject("ADODB.Recordset")
RSlocale = esegui(str)   ' QUI MI DA ERRORE ORA :

Microsoft VBScript runtime error '800a01c2' 

Wrong number of arguments or invalid property assignment: 'RSlocale' 


226 messaggi dal 08 ottobre 2010
Guarda, non so se in C è diverso, ma secondo me l'unica cosa che manca alla tua function è un comando:
return esegui

che dice alla tua funzione di restituire il recorset estratto...
181 messaggi dal 12 dicembre 2001
Verce84 ha scritto:
Guarda, non so se in C è diverso, ma secondo me l'unica cosa che manca alla tua function è un comando:
return esegui

che dice alla tua funzione di restituire il recorset estratto...


dunque return non lo uso in ASP, ma in c# o javascript

se poi lo metto per provare, mi da 'errore.

di solito per fare un return in una funzione, in ASP, si assegna il valore allo stesso nome della funzione

esempio :

function prova(nome)

   if nome = "milano" then
      provincia = "mi"
   else
      provincia = "altro"
   end if

   prova = provincia

end function


Modificato da billy1 il 12 ottobre 2010 12.05 -
226 messaggi dal 08 ottobre 2010
strano, perchè invece io metto sempre il return e funziona.. ed uso ASP.
Ti sei ricordarto di dichiararlo nella dichiarazione della funzione?


function esegui(str) As RecordSet


cmq se sono fuori strada l'unica altra ipotesi che mi viene in mente è che il recordset viene passato ByRef e non ByVal, in tal caso quando tu lo chiudi nella tua funzione lo chiudi prima di ritornarlo, ma è cmq una ipotesi.

Se riesco faccio delle prove...
Modificato da Verce84 il 12 ottobre 2010 12.37 -
181 messaggi dal 12 dicembre 2001
Verce84 ha scritto:
strano, perchè invece io metto sempre il return e funziona.. ed uso ASP.
Ti sei ricordarto di dichiararlo nella dichiarazione della funzione?


function esegui(str) As RecordSet


cmq se sono fuori strada l'unica altra ipotesi che mi viene in mente è che il recordset viene passato ByRef e non ByVal, in tal caso quando tu lo chiudi nella tua funzione lo chiudi prima di ritornarlo, ma è cmq una ipotesi.

Se riesco faccio delle prove...
Modificato da Verce84 il 12 ottobre 2010 12.37 -


ah ok io non usavo mai il return, provero' ma se tu lo usi sicuramente e' giusto che ci sia
27 messaggi dal 27 maggio 2007
ciao billy1
il problema e che sbagli a chiamare la funzione, se tu definisci una funzione nomefunzione(parametri) per chiamare devi dare lo stesso identico nome.
nel tuo caso
strSQL_arrivata = "select categoria from categorie where id_cat = 1 "
RSlocale = esegui(strSQL_arrivata)
oppure cambi il nome alla funzione
function esegui(str)
deve avere lo stesso nome seno la funzione non funziona :))

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.