OVH Cloud OVH Cloud

SP en ASP ERREUR ????

1 réponse
Avatar
Troyan
Voici un exemple de SP qui fonctionne bien sous l'analyseur de requete mais
pas en asp
j'ai l'erreur suivante !!!

ADODB.Recordset erreur '800a0e78'
Cette opération n'est pas autorisée si l'objet est fermé.

mais si je vire les lignes
CREATE TABLE #TABLE_TEMP (ID_FAMILLE INT)
INSERT INTO #TABLE_TEMP (ID_FAMILLE)
EXEC ARBO_FAMILLES_DESC @ID_FAMILLE

de la procedure ca fonctionne
que dois modifier dans la SP ???
j'y comprends plus rien !!!!



SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO



ALTER PROCEDURE [SEL_MODELES_DESC] @ID_FAMILLE as INT , @ID_MARQUE as INT
= 0 AS

CREATE TABLE #TABLE_TEMP (ID_FAMILLE INT)
INSERT INTO #TABLE_TEMP (ID_FAMILLE)
EXEC ARBO_FAMILLES_DESC @ID_FAMILLE


IF @ID_MARQUE = 0
BEGIN
SELECT * FROM MODELES
WHERE ID_FAMILLE in (SELECT ID_FAMILLE FROM #TABLE_TEMP)
END
ELSE
BEGIN
SELECT ID_MODELE FROM MODELES
WHERE ID_FAMILLE in (SELECT ID_FAMILLE FROM #TABLE_TEMP)
AND ID_MARQUE = @ID_MARQUE
END



GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

1 réponse

Avatar
Yanos El Guerilleros
Salut,

Il faut savoir qu'une procédure stockée retourne une chaine de recordset
pour chaque instruction SELECT, INSERT, UPDATE et DELETE exécutée à
l'intérieur. Pour le SELECT on récupère un recordset ouvert et contenant le
résultat, pour les autres on récupère un recordset fermé mais avec le nombre
d'enregistrements modifiés par l'instruction.

Dans l'analyseur ca se caractérise par l'affichage de --> (x ligne(s)
affectée(s))

Ton INSERT provoque donc la création d'un recordset dans ta chaine de
résultat, et comme il est avant ton SELECT et que tu récupère le premier de
la liste en résultat tu as une erreur de lecture (le recordset de INSERT
étant fermé).

On peut annuler ce fonctionnement via les commandes
SET NOCOUNT ON/OFF

Un SET NOCOUNT ON au début de ta procédure et SET NOCOUNT OFF à la fin évite
la création des recordset fermés dans la chaine.

Sinon tu peux vouloir retourner plusieurs recordset depuis une procédure
stockée, on parcours alors la chaine via la méthode NextRecordset d'un objet
ADODB.Recordset.

A++

Yanos


Troyan wrote:
Voici un exemple de SP qui fonctionne bien sous l'analyseur de
requete mais pas en asp
j'ai l'erreur suivante !!!

ADODB.Recordset erreur '800a0e78'
Cette opération n'est pas autorisée si l'objet est fermé.

mais si je vire les lignes
CREATE TABLE #TABLE_TEMP (ID_FAMILLE INT)
INSERT INTO #TABLE_TEMP (ID_FAMILLE)
EXEC ARBO_FAMILLES_DESC @ID_FAMILLE

de la procedure ca fonctionne
que dois modifier dans la SP ???
j'y comprends plus rien !!!!



SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO



ALTER PROCEDURE [SEL_MODELES_DESC] @ID_FAMILLE as INT , @ID_MARQUE
as INT = 0 AS

CREATE TABLE #TABLE_TEMP (ID_FAMILLE INT)
INSERT INTO #TABLE_TEMP (ID_FAMILLE)
EXEC ARBO_FAMILLES_DESC @ID_FAMILLE


IF @ID_MARQUE = 0
BEGIN
SELECT * FROM MODELES
WHERE ID_FAMILLE in (SELECT ID_FAMILLE FROM #TABLE_TEMP)
END
ELSE
BEGIN
SELECT ID_MODELE FROM MODELES
WHERE ID_FAMILLE in (SELECT ID_FAMILLE FROM #TABLE_TEMP)
AND ID_MARQUE = @ID_MARQUE
END



GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO