devi fare encoding e converisone dei campi
ad esempio se tipo è una stringa devi mettere
sql="exec QueryImpatto_SP '" & CSTR(tipo) & "', ....
devi fare encoding e converisone dei campi
ad esempio se tipo è una stringa devi mettere
sql="exec QueryImpatto_SP '" & CSTR(tipo) & "', ....
Tutti vogliono parlare, nessuno sa ascoltare.
Modifica la SP così, vedi il testo in grassetto e l'omissione del "count(evento) as @trovati" iniziale,
poi la chiami normalmente e nel parametro di output
@trovati hai il numero di record
codice:CREATE PROCEDURE QueryImpatto_SP @tipo int, @dal smalldatetime, @al smalldatetime, @trovati int output AS SELECT utente.Tipologie.Des_Tipologia, Attivita.Tipologia, Attivita.Dal, Attivita.Al, RigheEvento.Evento, utente.UFFICIO.UFF_CDC, Attivita.Sede, RigheEvento.Ufficio, utente.UFFICIO.DES_UFFICIO, RigheEvento.NPersoneCoinvolte FROM utente.Tipologie INNER JOIN Attivita ON utente.Tipologie.Cod_Tipologia = Attivita.Tipologia INNER JOIN utente.UFFICIO INNER JOIN RigheEvento ON utente.UFFICIO.UFFICIO = RigheEvento.Ufficio ON Attivita.Codice = RigheEvento.Evento where tipologia=@tipo AND (NOT (dal>@al OR al<@dal) ) ORDER BY utente.UFFICIO.des_ufficio,RigheEvento.evento set @trovati=@@ROWCOUNT
Mi sembra di aver fatto esattamente come dici, ma il parametro non resituisce nulla (tutti gli altri riesco ad interrogarli). La Store Procedure è:
codice:CREATE PROCEDURE QueryImpatto_SP @tipo int, @dal smalldatetime, @al smalldatetime, @trovati int output AS SELECT utente.Tipologie.Des_Tipologia, Attivita.Tipologia, Attivita.Dal, Attivita.Al, RigheEvento.Evento, utente.UFFICIO.UFF_CDC, Attivita.Sede, RigheEvento.Ufficio, utente.UFFICIO.DES_UFFICIO, RigheEvento.NPersoneCoinvolte FROM utente.Tipologie INNER JOIN Attivita ON utente.Tipologie.Cod_Tipologia = Attivita.Tipologia INNER JOIN utente.UFFICIO INNER JOIN RigheEvento ON utente.UFFICIO.UFFICIO = RigheEvento.Ufficio ON Attivita.Codice = RigheEvento.Evento WHERE tipologia=@tipo AND (NOT (dal>@al OR al<@dal) ) ORDER BY utente.UFFICIO.des_ufficio,RigheEvento.evento SET @trovati=@@ROWCOUNT
e la parte ASP è :
ma alla fine tot_righe non contiene nientecodice:session.LCID=1033 set objCmd = Server.CreateObject("ADODB.Command") objCmd.ActiveConnection = objConn objCmd.CommandType = 4'adCmdStoredProc objCmd.CommandText="QueryImpatto_SP" set parm1=objCmd.CreateParameter("@tipo",adInteger,adParamInput) objCmd.Parameters.Append(parm1) parm1.Value=tipo set parm2=objCmd.CreateParameter("@dal",adDate,adParamInput) objCmd.Parameters.Append(parm2) parm2.Value=sel_dal set parm3=objCmd.CreateParameter("@al",adDate,adParamInput) objCmd.Parameters.Append(parm3) parm3.Value=sel_al set parm4=objCmd.CreateParameter("@trovati",adInteger,adParamOutput) objCmd.Parameters.Append(parm4) parm4.Value=0 Set objrst_attivita=objCmd.Execute() tot_righe=objCmd.Parameters("@trovati").value response.write " valore del parametro di uscita " & objCmd.Parameters("@trovati").value
Cosa sbaglio?
Per Global66: tipo è un intero, e la SP si aspetta un intero, non capisco perchè non gli piaccia
Grazie ancora della disponibilità
ricominciamo da capo: se la SP restituisce un recordset, allora devi aggiungere un campo alla tabella che restituisce il numero di record.
la modalità più performante, che io ho trovato, è quella di fare
- conteggio record
- eventaule ordinamento
- eventuale paginazione
tutto dentro le SP, usando una tabella temporanea
così dalla SP restituisci solo i record che ti serve visualizzare, diminuendo il traffico tra il db server ed il web server,e potendo aprire nella pagina asp di visualizzazione un recorsert statico non scrollabile.
idea della SP è questa
- crei la tabella temporanea
- la popoli con tutte le select che ti servono
- eventualmente elimini i doppioni
- ordini i record
- selezioni dalla temporanea solo i record che ti servono
- droppi la tabella
se in ingresso alla SP ti prendi anche alcuni parametri (quanti record restituire, con quale criterio ordinare, da quale finoa quale record visualizare, ecc..) hai una SP che può funzionare in tutti i casi che ti servono.
in alternativa puoi fare una soluzione mista, dove poi estrai molta più roba di quella che ti serve, che poi devi ripulire e trattare con il codice ASP.....
Tutti vogliono parlare, nessuno sa ascoltare.
Ho visto solo ora la tua risposta.
Mi sono dimenticato una cosa, quando si fanno le select il server restituisce messaggi come "(righe interessate: 10)" e questi confondono gli eventuali parametri di output delle SP.
Bisogna mettere set nocount on all'inizio e set nocount off alla fine
codice:CREATE PROCEDURE QueryImpatto_SP @tipo int, @dal smalldatetime, @al smalldatetime, @trovati int output AS set nocount on SELECT utente.Tipologie.Des_Tipologia, Attivita.Tipologia, Attivita.Dal, Attivita.Al, RigheEvento.Evento, utente.UFFICIO.UFF_CDC, Attivita.Sede, RigheEvento.Ufficio, utente.UFFICIO.DES_UFFICIO, RigheEvento.NPersoneCoinvolte FROM utente.Tipologie INNER JOIN Attivita ON utente.Tipologie.Cod_Tipologia = Attivita.Tipologia INNER JOIN utente.UFFICIO INNER JOIN RigheEvento ON utente.UFFICIO.UFFICIO = RigheEvento.Ufficio ON Attivita.Codice = RigheEvento.Evento where tipologia=@tipo AND (NOT (dal>@al OR al<@dal) ) ORDER BY utente.UFFICIO.des_ufficio,RigheEvento.evento set @trovati=@@ROWCOUNT set nocount off
Ho provato, ma purtroppo @trovati è sempre vuoto. Ho aggiunto anche un altro parametro di uscita di prova a cui assegno un valore, ma non riesco a leggerlo dalla pagina asp.
![]()
![]()
![]()