Je vais essayer d'=EAtre clair.
J'ai une proc stock qui me cr=E9=E9 une table temporaire.=20
Cette proc=E9dure est compos=E9 de 3 curseurs. Le premier me=20
prends le num=E9ro de l'utilisateur. Dans ce cursor ce=20
trouve un autre cursor qui suivant le num=E9ro=20
d'utilisateur va chercher le ou les groupes pour cette=20
personne.
Je r=E9cup=E8re les groupes de cette facon :=20
SET @groupesql =3D ' CONVERT(varchar,groupe_id) =3D ' + =20
CONVERT(varchar,@groupe_id) + ' or' + @groupesql=20
A la fin de cette seconde boucle, j'ouvre un troisi=E8me=20
cursor qui fais ceci :
--On va chercher les acces
Declare cursor_acces CURSOR
FOR SELECT DISTINCT acces.nom FROM acces INNER JOIN =20
acces_groupe ON acces.id =3D acces_groupe.acces_id WHERE=20
CONVERT(varchar,1) =3D CONVERT(varchar,1) + 'and' + =20
substring(@groupesql,1,len(@groupesql)-3)
OPEN cursor_acces
etc..
Le probl=E8me, c'est que quand j'enl=E8ve " + 'and' + =20
substring(@groupesql,1,len(@groupesql)-3)" la requete=20
fonctionne sinon, elle ne renvoie aucun r=E9sultat alors=20
que quand je l'affiche et que je l'ex=E9cute, tout=20
fonctionne...
Je pense que @groupesql ne sert pas car il est préférable de faire une requête avec des jointure pour récupérer la même chose :
SELECT DISTINCT acces.nom FROM acces INNER JOIN acces_groupe ON acces.id = acces_groupe.acces_id INNER JOIN groupe ON acces_groupe.acces_id = groupe.id INNER JOIN groupe_utilisateur ON groupe.id = groupe_utilisateur.groupe_id WHERE groupe_utilisateur.utilisateur_id = @id
---------------------------------------------------------------------- Philippe TROTIN - Microsoft Service France
"Portekoi" wrote in message news:0dde01c52b11$045c6690$ Re bonsoir,
J'ai regardé pour utiliser une fonction mais mon soucis est : Dans un premier temps, je vais donc chercher les utilisateurs avec leur ID respectif.
Ensuite, avec l'ID, je vais cherche le ou LES groupe(s) auxquels il appartient. Je vais donc avoir un résultat avec plusieurs groupes : 6 15 par exemple. Donc, je prends ces résultats et je les transforme de cette facon : SET @groupesql = ' groupe_id = ' + @groupe_id + ' or' + @groupesql Ce qui donne pour valeur à @groupesql : groupe_id = 6 or groupe_id = 15 or
Ensuite, je dois aller chercher les accès pour chacun des groupes ci-dessus d'ou l'utilité de @groupesql car voici la requete pour récupérer ces fameux accès : "SELECT DISTINCT acces.nom FROM acces INNER JOIN acces_groupe ON acces.id = acces_groupe.acces_id WHERE" + substring(@groupesql,1,len(@groupesql)-3) ce qui me donne :
" SELECT DISTINCT acces.nom FROM acces INNER JOIN acces_groupe ON acces.id = acces_groupe.acces_id WHERE groupe_id = 6 or groupe_id = 15 "
La requete exécutée comme cela fonctionne mais pas dans la procédure stockée. J'ai essayé sp_executesql mais cela ne fonctionne pas dans la déclaration du curseur...
A la fin, il dois me retourner pour groupe "_admin_agence" par exemple et en acces "_appli1_appli4_appli13_appli24"
Je sais pas si je peux être plus clair ^_^
A bientot et merci
Portekoi
Bonjour,
Je pense que @groupesql ne sert pas car il est préférable de faire une
requête avec des jointure pour récupérer la même chose :
SELECT DISTINCT acces.nom
FROM acces
INNER JOIN acces_groupe ON acces.id = acces_groupe.acces_id
INNER JOIN groupe ON acces_groupe.acces_id = groupe.id
INNER JOIN groupe_utilisateur ON groupe.id = groupe_utilisateur.groupe_id
WHERE groupe_utilisateur.utilisateur_id = @id
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
"Portekoi" <Portekoi@discussions.microsoft.com> wrote in message
news:0dde01c52b11$045c6690$a401280a@phx.gbl...
Re bonsoir,
J'ai regardé pour utiliser une fonction mais mon soucis
est :
Dans un premier temps, je vais donc chercher les
utilisateurs avec leur ID respectif.
Ensuite, avec l'ID, je vais cherche le ou LES groupe(s)
auxquels il appartient. Je vais donc avoir un résultat
avec plusieurs groupes : 6 15 par exemple.
Donc, je prends ces résultats et je les transforme de
cette facon :
SET @groupesql = ' groupe_id = ' + @groupe_id + ' or'
+ @groupesql
Ce qui donne pour valeur à @groupesql :
groupe_id = 6 or groupe_id = 15 or
Ensuite, je dois aller chercher les accès pour chacun des
groupes ci-dessus d'ou l'utilité de @groupesql car voici
la requete pour récupérer ces fameux accès :
"SELECT DISTINCT acces.nom FROM acces INNER JOIN
acces_groupe ON acces.id = acces_groupe.acces_id WHERE" +
substring(@groupesql,1,len(@groupesql)-3) ce qui me
donne :
" SELECT DISTINCT acces.nom FROM acces INNER JOIN
acces_groupe ON acces.id = acces_groupe.acces_id WHERE
groupe_id = 6 or groupe_id = 15 "
La requete exécutée comme cela fonctionne mais pas dans
la procédure stockée. J'ai essayé sp_executesql mais
cela ne fonctionne pas dans la déclaration du curseur...
A la fin, il dois me retourner pour
groupe "_admin_agence" par exemple et en
acces "_appli1_appli4_appli13_appli24"
Je pense que @groupesql ne sert pas car il est préférable de faire une requête avec des jointure pour récupérer la même chose :
SELECT DISTINCT acces.nom FROM acces INNER JOIN acces_groupe ON acces.id = acces_groupe.acces_id INNER JOIN groupe ON acces_groupe.acces_id = groupe.id INNER JOIN groupe_utilisateur ON groupe.id = groupe_utilisateur.groupe_id WHERE groupe_utilisateur.utilisateur_id = @id
---------------------------------------------------------------------- Philippe TROTIN - Microsoft Service France
"Portekoi" wrote in message news:0dde01c52b11$045c6690$ Re bonsoir,
J'ai regardé pour utiliser une fonction mais mon soucis est : Dans un premier temps, je vais donc chercher les utilisateurs avec leur ID respectif.
Ensuite, avec l'ID, je vais cherche le ou LES groupe(s) auxquels il appartient. Je vais donc avoir un résultat avec plusieurs groupes : 6 15 par exemple. Donc, je prends ces résultats et je les transforme de cette facon : SET @groupesql = ' groupe_id = ' + @groupe_id + ' or' + @groupesql Ce qui donne pour valeur à @groupesql : groupe_id = 6 or groupe_id = 15 or
Ensuite, je dois aller chercher les accès pour chacun des groupes ci-dessus d'ou l'utilité de @groupesql car voici la requete pour récupérer ces fameux accès : "SELECT DISTINCT acces.nom FROM acces INNER JOIN acces_groupe ON acces.id = acces_groupe.acces_id WHERE" + substring(@groupesql,1,len(@groupesql)-3) ce qui me donne :
" SELECT DISTINCT acces.nom FROM acces INNER JOIN acces_groupe ON acces.id = acces_groupe.acces_id WHERE groupe_id = 6 or groupe_id = 15 "
La requete exécutée comme cela fonctionne mais pas dans la procédure stockée. J'ai essayé sp_executesql mais cela ne fonctionne pas dans la déclaration du curseur...
A la fin, il dois me retourner pour groupe "_admin_agence" par exemple et en acces "_appli1_appli4_appli13_appli24"
Je sais pas si je peux être plus clair ^_^
A bientot et merci
Portekoi
Fred BROUARD
Patrice a écrit:
Pour la concaténation j'avais vu une fois une astuce sympa dont le principe est le suivant :
declare @t VARCHAR(8000) select @tÊSE WHEN @t IS NULL THEN Table_Name ELSE @t+','+Table_Name END FROM Information_Schema.tables print @t
Je te laisse voir si tu peux l'adapter à ton cas que j'avoue avoir un peu survolé...
(Fred est de bon conseil mais ne mets jamais de gants même en hiver)
Mais on est au printemps, et chez moi en provence, c'est presque l'été !
A +
Patrice
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
Patrice a écrit:
Pour la concaténation j'avais vu une fois une astuce sympa dont le principe
est le suivant :
declare @t VARCHAR(8000)
select @tÊSE WHEN @t IS NULL THEN Table_Name ELSE @t+','+Table_Name END
FROM Information_Schema.tables
print @t
Je te laisse voir si tu peux l'adapter à ton cas que j'avoue avoir un peu
survolé...
(Fred est de bon conseil mais ne mets jamais de gants même en hiver)
Mais on est au printemps, et chez moi en provence, c'est presque l'été !
A +
Patrice
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Pour la concaténation j'avais vu une fois une astuce sympa dont le principe est le suivant :
declare @t VARCHAR(8000) select @tÊSE WHEN @t IS NULL THEN Table_Name ELSE @t+','+Table_Name END FROM Information_Schema.tables print @t
Je te laisse voir si tu peux l'adapter à ton cas que j'avoue avoir un peu survolé...
(Fred est de bon conseil mais ne mets jamais de gants même en hiver)
Mais on est au printemps, et chez moi en provence, c'est presque l'été !
A +
Patrice
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
Portekoi
Bonjour,
Et oui, c'est moi le 'débile'... meuh nan je l'ai pas mal pris ;)
Ca fonctionne en passant par une autre jointure sur l'idée de philippe. J'ai donc mes 2 curseurs qui me renvoient ce qu'il faut.
Maintenant, j'essaie en vain de l'appeller depuis un script ASP et rien à faire. J'ai mis le SET NOCOUNT ON mais ca ne fonctionne pas plus. Ce qui est bizarre, c'est que lorsque je lui passe un utilisateur inexistant, je n'ai pas d'erreur par contre c'est l'inverse pour un vrai login... Voici mon code asp : sql = "EXECUTE auth.dbo.acces_utilisateur VISIMIC" 'set rs = baselinka.execute ("EXECUTE auth.dbo.acces_utilisateur momo") rs.open sql, conn, 3, 3 if not rs.eof then do while not rs.eof for each field in rs.fields response.Write field.name & " => " & field.value & "<br>" next rs.movenext loop end if rs.close
Cette opération n'est pas autorisée si l'objet est fermé.
Ca se produit sur la ligne du "if not rs.eof then"
Help les 'pros' de Sql ;)
Portekoi enfin Damien...enfin le débile :D
Bonjour,
Et oui, c'est moi le 'débile'... meuh nan je l'ai pas mal
pris ;)
Ca fonctionne en passant par une autre jointure sur
l'idée de philippe. J'ai donc mes 2 curseurs qui me
renvoient ce qu'il faut.
Maintenant, j'essaie en vain de l'appeller depuis un
script ASP et rien à faire. J'ai mis le SET NOCOUNT ON
mais ca ne fonctionne pas plus. Ce qui est bizarre, c'est
que lorsque je lui passe un utilisateur inexistant, je
n'ai pas d'erreur par contre c'est l'inverse pour un vrai
login...
Voici mon code asp :
sql = "EXECUTE auth.dbo.acces_utilisateur VISIMIC"
'set rs = baselinka.execute ("EXECUTE
auth.dbo.acces_utilisateur momo")
rs.open sql, conn, 3, 3
if not rs.eof then
do while not rs.eof
for each field in rs.fields
response.Write field.name & " => " &
field.value & "<br>"
next
rs.movenext
loop
end if
rs.close
Et oui, c'est moi le 'débile'... meuh nan je l'ai pas mal pris ;)
Ca fonctionne en passant par une autre jointure sur l'idée de philippe. J'ai donc mes 2 curseurs qui me renvoient ce qu'il faut.
Maintenant, j'essaie en vain de l'appeller depuis un script ASP et rien à faire. J'ai mis le SET NOCOUNT ON mais ca ne fonctionne pas plus. Ce qui est bizarre, c'est que lorsque je lui passe un utilisateur inexistant, je n'ai pas d'erreur par contre c'est l'inverse pour un vrai login... Voici mon code asp : sql = "EXECUTE auth.dbo.acces_utilisateur VISIMIC" 'set rs = baselinka.execute ("EXECUTE auth.dbo.acces_utilisateur momo") rs.open sql, conn, 3, 3 if not rs.eof then do while not rs.eof for each field in rs.fields response.Write field.name & " => " & field.value & "<br>" next rs.movenext loop end if rs.close
Cette opération n'est pas autorisée si l'objet est fermé.
Ca se produit sur la ligne du "if not rs.eof then"
Help les 'pros' de Sql ;)
Portekoi enfin Damien...enfin le débile :D
C'est bon j'ai trouvé....
J'avais un print dans un curseur et ASP n'aime pas trop ca... Tout marche maintenant :)
Merci à tous
Portekoi
-----Message d'origine----- Bonjour,
Et oui, c'est moi le 'débile'... meuh nan je l'ai pas
mal
pris ;)
Ca fonctionne en passant par une autre jointure sur l'idée de philippe. J'ai donc mes 2 curseurs qui me renvoient ce qu'il faut.
Maintenant, j'essaie en vain de l'appeller depuis un script ASP et rien à faire. J'ai mis le SET NOCOUNT ON mais ca ne fonctionne pas plus. Ce qui est bizarre,
c'est
que lorsque je lui passe un utilisateur inexistant, je n'ai pas d'erreur par contre c'est l'inverse pour un
vrai
login... Voici mon code asp : sql = "EXECUTE auth.dbo.acces_utilisateur VISIMIC" 'set rs = baselinka.execute ("EXECUTE auth.dbo.acces_utilisateur momo") rs.open sql, conn, 3, 3 if not rs.eof then do while not rs.eof for each field in rs.fields response.Write field.name & " => " & field.value & "<br>" next rs.movenext loop end if rs.close
Cette opération n'est pas autorisée si l'objet est
fermé.
Ca se produit sur la ligne du "if not rs.eof then"
Help les 'pros' de Sql ;)
Portekoi enfin Damien...enfin le débile :D
.
C'est bon j'ai trouvé....
J'avais un print dans un curseur et ASP n'aime pas trop
ca...
Tout marche maintenant :)
Merci à tous
Portekoi
-----Message d'origine-----
Bonjour,
Et oui, c'est moi le 'débile'... meuh nan je l'ai pas
mal
pris ;)
Ca fonctionne en passant par une autre jointure sur
l'idée de philippe. J'ai donc mes 2 curseurs qui me
renvoient ce qu'il faut.
Maintenant, j'essaie en vain de l'appeller depuis un
script ASP et rien à faire. J'ai mis le SET NOCOUNT ON
mais ca ne fonctionne pas plus. Ce qui est bizarre,
c'est
que lorsque je lui passe un utilisateur inexistant, je
n'ai pas d'erreur par contre c'est l'inverse pour un
vrai
login...
Voici mon code asp :
sql = "EXECUTE auth.dbo.acces_utilisateur VISIMIC"
'set rs = baselinka.execute ("EXECUTE
auth.dbo.acces_utilisateur momo")
rs.open sql, conn, 3, 3
if not rs.eof then
do while not rs.eof
for each field in rs.fields
response.Write field.name & " => " &
field.value & "<br>"
next
rs.movenext
loop
end if
rs.close
J'avais un print dans un curseur et ASP n'aime pas trop ca... Tout marche maintenant :)
Merci à tous
Portekoi
-----Message d'origine----- Bonjour,
Et oui, c'est moi le 'débile'... meuh nan je l'ai pas
mal
pris ;)
Ca fonctionne en passant par une autre jointure sur l'idée de philippe. J'ai donc mes 2 curseurs qui me renvoient ce qu'il faut.
Maintenant, j'essaie en vain de l'appeller depuis un script ASP et rien à faire. J'ai mis le SET NOCOUNT ON mais ca ne fonctionne pas plus. Ce qui est bizarre,
c'est
que lorsque je lui passe un utilisateur inexistant, je n'ai pas d'erreur par contre c'est l'inverse pour un
vrai
login... Voici mon code asp : sql = "EXECUTE auth.dbo.acces_utilisateur VISIMIC" 'set rs = baselinka.execute ("EXECUTE auth.dbo.acces_utilisateur momo") rs.open sql, conn, 3, 3 if not rs.eof then do while not rs.eof for each field in rs.fields response.Write field.name & " => " & field.value & "<br>" next rs.movenext loop end if rs.close
Cette opération n'est pas autorisée si l'objet est
fermé.
Ca se produit sur la ligne du "if not rs.eof then"
Help les 'pros' de Sql ;)
Portekoi enfin Damien...enfin le débile :D
.
Patrice
Là cela serait plutôt un groupe ASP/ADO.
A priori l'objet RS n'est pas correctement initialisé (où la connexion ?). Personnellement je passais plutôt par ADODB.Command pour les procédures stockées...
Bon week-end...
Patrice
--
"Portekoi" a écrit dans le message de news:077801c52baa$f6ac5150$ Bonjour,
Et oui, c'est moi le 'débile'... meuh nan je l'ai pas mal pris ;)
Ca fonctionne en passant par une autre jointure sur l'idée de philippe. J'ai donc mes 2 curseurs qui me renvoient ce qu'il faut.
Maintenant, j'essaie en vain de l'appeller depuis un script ASP et rien à faire. J'ai mis le SET NOCOUNT ON mais ca ne fonctionne pas plus. Ce qui est bizarre, c'est que lorsque je lui passe un utilisateur inexistant, je n'ai pas d'erreur par contre c'est l'inverse pour un vrai login... Voici mon code asp : sql = "EXECUTE auth.dbo.acces_utilisateur VISIMIC" 'set rs = baselinka.execute ("EXECUTE auth.dbo.acces_utilisateur momo") rs.open sql, conn, 3, 3 if not rs.eof then do while not rs.eof for each field in rs.fields response.Write field.name & " => " & field.value & "<br>" next rs.movenext loop end if rs.close
Cette opération n'est pas autorisée si l'objet est fermé.
Ca se produit sur la ligne du "if not rs.eof then"
Help les 'pros' de Sql ;)
Portekoi enfin Damien...enfin le débile :D
Là cela serait plutôt un groupe ASP/ADO.
A priori l'objet RS n'est pas correctement initialisé (où la connexion ?).
Personnellement je passais plutôt par ADODB.Command pour les procédures
stockées...
Bon week-end...
Patrice
--
"Portekoi" <Portekoi@discussions.microsoft.com> a écrit dans le message de
news:077801c52baa$f6ac5150$a501280a@phx.gbl...
Bonjour,
Et oui, c'est moi le 'débile'... meuh nan je l'ai pas mal
pris ;)
Ca fonctionne en passant par une autre jointure sur
l'idée de philippe. J'ai donc mes 2 curseurs qui me
renvoient ce qu'il faut.
Maintenant, j'essaie en vain de l'appeller depuis un
script ASP et rien à faire. J'ai mis le SET NOCOUNT ON
mais ca ne fonctionne pas plus. Ce qui est bizarre, c'est
que lorsque je lui passe un utilisateur inexistant, je
n'ai pas d'erreur par contre c'est l'inverse pour un vrai
login...
Voici mon code asp :
sql = "EXECUTE auth.dbo.acces_utilisateur VISIMIC"
'set rs = baselinka.execute ("EXECUTE
auth.dbo.acces_utilisateur momo")
rs.open sql, conn, 3, 3
if not rs.eof then
do while not rs.eof
for each field in rs.fields
response.Write field.name & " => " &
field.value & "<br>"
next
rs.movenext
loop
end if
rs.close
A priori l'objet RS n'est pas correctement initialisé (où la connexion ?). Personnellement je passais plutôt par ADODB.Command pour les procédures stockées...
Bon week-end...
Patrice
--
"Portekoi" a écrit dans le message de news:077801c52baa$f6ac5150$ Bonjour,
Et oui, c'est moi le 'débile'... meuh nan je l'ai pas mal pris ;)
Ca fonctionne en passant par une autre jointure sur l'idée de philippe. J'ai donc mes 2 curseurs qui me renvoient ce qu'il faut.
Maintenant, j'essaie en vain de l'appeller depuis un script ASP et rien à faire. J'ai mis le SET NOCOUNT ON mais ca ne fonctionne pas plus. Ce qui est bizarre, c'est que lorsque je lui passe un utilisateur inexistant, je n'ai pas d'erreur par contre c'est l'inverse pour un vrai login... Voici mon code asp : sql = "EXECUTE auth.dbo.acces_utilisateur VISIMIC" 'set rs = baselinka.execute ("EXECUTE auth.dbo.acces_utilisateur momo") rs.open sql, conn, 3, 3 if not rs.eof then do while not rs.eof for each field in rs.fields response.Write field.name & " => " & field.value & "<br>" next rs.movenext loop end if rs.close