Newsgroup: it.comp.lang.visual-basic
Titolo: Stored Procedure Errore 3074

Salve a tutti, vi posto una SP (Modificata), ke mi restituisca i
risultati su di una Datagrid:
IF OBJECT_ID ('dbo.FatturatoMeseAnno') IS NOT NULL
	DROP PROCEDURE dbo.FatturatoMeseAnno
GO
CREATE PROCEDURE [dbo].[FatturatoMeseAnno] (@Mese smallint, @Anno
smallint)
AS
BEGIN
DECLARE @TMP TABLE (
giorno SMALLINT,
Mese SMALLINT,
importo DECIMAL);
INSERT INTO @Tmp
SELECT
   day(datadoc) AS giorno,
   month(datadoc) AS mese,
   CASE substring(tipodoc, 1, 2)
     WHEN 'FT' THEN
		totimponibileeuro
     ELSE
		totimponibileeuro * -1
     END
FROM socopl.dbo.testedocumenti
WHERE     ((ESERCIZIO = @Anno) AND (TIPODOC = 'FTC') AND month
(datadoc) = @Mese) OR
                      ((ESERCIZIO = @Anno) AND (TIPODOC = 'FTA') AND
month(datadoc) = @Mese) OR
                      ((ESERCIZIO = @Anno) AND (TIPODOC = 'FTE') AND
month(datadoc) = @Mese) OR
                      ((ESERCIZIO = @Anno) AND (TIPODOC = 'NAC') AND
month(datadoc) = @Mese) OR
                      ((ESERCIZIO = @Anno) AND (TIPODOC = 'NAE') AND
month(datadoc) = @Mese)
SELECT T1.giorno AS Giorno, T1.mese AS Mese,
		(SELECT sum(importo) FROM @tmp WHERE (giorno = t1.giorno and mese =
t1.mese)) 'TotGiorno',
        (SELECT sum(importo) FROM @tmp WHERE (mese = t1.mese and
giorno <= t1.giorno)) 'ProMese',
        (SELECT sum(importo) FROM @tmp WHERE (mese < t1.mese) or (mese
= t1.mese and giorno <= t1.giorno)) 'ProAnno'
FROM @TMP T1
GROUP BY mese, giorno
ORDER BY t1.mese,t1.giorno
END
Go
Questo è il Codice VB per l'apertura:
Dim Dbs As ADODB.Connection
Dim Rs As ADODB.Recordset
Set Dbs = New ADODB.Connection
Set Rs = New ADODB.Recordset
Dbs.Open (";Provider=SQLOLEDB.1;Password=user;Persist Security
Info=True;User ID=User;Initial Catalog=DBase;Data Source=SQLServer")
    Rs.Open ("EXECUTE dbo.FatturatomeseAnno " & Mese & ", " &
AnnoSel), Dbs, 3, 3
    Set DataGrid1.DataSource = Rs
    DataGrid1.Refresh
Il fatto è ke nn mi da nessun errore, però RS nn si apre... Cioè se io
dovessi aggiungere un Rs.MoveLast, a questo punto mi da l'errore Run-
time 3704: L'operazione non è consentita se l'
oggetto è chiuso.
Dove sbaglio?
Grazie e a presto.

 Grazie e a presto.
Io innesterei un
SET NOCOUNT ON
dopo il Begin
Alberto

 Alberto
Grazie Albe,
Ora, cambia errore, mi da un Run-Time 7004: Impossibile Assegnare
Segnalibri Al gruppo Di righe, e il Debug si ferma su
    Set DataGrid1.DataSource = Rs
Mumble Mumble...

Dopo dura riflessione, Ulisse31 ha scritto :

Non saprei, non riesco a recepire quel 3,3 nell'apertura del recordset.
Se tu avessi usato le costanti, anzichï¿œ dei numeri, forse avrei potuto 
aiutarti.
Comunque un recordset cosï¿œ va aperto Cursorside Client e Static, vedi 
un po' tu i valori delle costanti...
Alberto

 Alberto
Tra l'altro, chiaramente, se lancio il comando:
EXECUTE dbo.FatturatomeseAnno 3, 2009
Su SQLDBX, funge che è una meraviglia... Grrrrr

 Alberto
Ok, provo... di nuovo grazie...

 Alberto
FUNGE!!!!! Sei sempre Un mito ALBE!!! Se nn ci fossi tu!!!
....
Rs.CursorType = adOpenStatic
Rs.CursorLocation = adUseClient
Rs.Open ("EXECUTE dbo.FatturatomeseAnno " & MeseN & ", " & AnnoSel),
Dbs, adOpenStatic, adLockOptimistic
....
E la DATAGRID Si riempie!!!
Buona serata...

 Su SQLDBX, funge che ï¿œ una meraviglia... Grrrrr
Certo, infatti i miei due consigli riguardavano il primo (Set Nocount 
On) la struttura dei metadati dello stream di risposta, e il secondo 
(le opzioni del recordset) il caso in cui tu stia cercando di operare 
serverside o dynamic (cosa non ammissibile con questo tipo di 
estrazione). Ma su questo secondo caso non so se ho ragione, perchï¿œ hai 
cablato dei numeri al posto delle costanti e non ho voglia di aprire 
MSDE.
Alberto

 E la DATAGRID Si riempie!!!
Resta da capire come mai uno che scrive una cosa cosï¿œ bella da un punto 
di vista tecnico, faccia una cazzata cosï¿œ banale come tentare di aprire 
un recordset di quel genere in modalitï¿œ dinamica o con cursore lato 
server.
Non ï¿œ che ci hai dato sotto di copiaincolla troppo baldanzoso?
Alberto

 Alberto
Con tutta sincerità, caro Albe (Di fama si sa, castigatore di
Principianti), ho imparato Oggi ad aprire e gestire le SP da ADO con
Codice... Quindi, questa cosa della Modalità e lato Cursore, mi era
proprio sfuggita... L'Ignoranza regna sovrana, sopratutto ai
neofiti... :o)
Grazie ancora...

 proprio sfuggita...
Beh, a dire il vero anche un banale "Select * from tabella" andrebbe 
aperto sempre, tranne i casi di reale necessitï¿œ, in quel modo.
Con le SP ï¿œ ovviamente 'obbligatorio', ma non ï¿œ un aspetto che nasca 
per gestire le SP, ï¿œ proprio una caratteristica fondamentale 
dell'apertura di un recordset.
Ciao
Alberto

 Alberto
Ecco, appunto... uno è tanto abituato a gestire le aperture in una
certa maniera... ke poi, nn fa caso a come apre il recordset in altri
ambiti.. :o)
Ciao Albe, alla prox...