Meilleur auteur de réponses
comment utiliser une procedure stockée pour réaliser des rapports avec crystal report

Question
-
bonjour,
voila afin de pas avoir de nombreux petites procedures stockees, j'ai regroupe toutes ces procedures qui me servent a realiser mes rapports en une seule comme suit :
USE [RECLACSR-DB]
GO
/****** Object: StoredProcedure [dbo].[EditionCourrier] Script Date: 08/27/2012 12:08:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[EditionCourrier]
-- Add the parameters for the stored procedure here
@typeEdition int,
@SceDest nvarchar (50)=null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
if (@typeEdition =5) --------------ImpressionFicheAnalyseRPT
begin
select CSR_SENDFILE.SFI_REFDOC , CSR_DOSSIER.DOS_ID , CSR_DOSSIER.DOS_NODE , UPPER ( dbo.CSR_DOSSIER.DOS_NOM +' '+ ISNULL ( dbo .CSR_DOSSIER.DOS_PRENOM, ' ')) as NOMS,
CSR_TITREPRECEDENT.TIP_NODE ,CSR_TITREPRECEDENT.TIP_NOMSIDIF , CSR_TITREPRECEDENT.TIP_TYCA ,
CSR_TITREPRECEDENT.TIP_DTEXP ,CSR_TITREPRECEDENT.TIP_PICODE
from CSR_DOSSIER , CSR_STATUT, CSR_TITREPRECEDENT ,CSR_SENDFILE
where CSR_DOSSIER.DOS_ID = CSR_STATUT.DOS_ID
and CSR_STATUT.STA_ID = 8
and CSR_DOSSIER.DOS_ID = CSR_TITREPRECEDENT .DOS_ID
and CSR_DOSSIER.DOS_ID = CSR_SENDFILE.DOS_ID
order by CSR_DOSSIER.DOS_NODE
end
else if (@typeEdition = 1) ----------- Edition Fiche renseignment RPT
begin
SELECT UPPER ( dbo.CSR_DOSSIER.DOS_NOM +' '+ ISNULL ( dbo .CSR_DOSSIER.DOS_PRENOM, ' ')) AS NOMS,DOS_DDN AS 'NE_LE' , DOS_LNAIS AS 'LIEU_NAISSANCE',
DOS_SEX AS SEXE, PAR_NATIONALITE.NAT_LIB AS NATIONALITE,DOS_NODE AS 'N_DEMANDE',
DOS_TAILLE AS TAILLE, DOS_NPERE +' - '+ DOS_NMERE AS 'NOMS_PARENTS', CSR_DOSSIER .DOS_ID
FROM DBO.CSR_DOSSIER ,DBO.CSR_STATUT ,DBO.PAR_NATIONALITE
WHERE CSR_DOSSIER .DOS_ID = CSR_STATUT.DOS_ID
AND CSR_STATUT .STA_ID =6 and CSR_DOSSIER.TIT_CODE ='RPT'
AND CSR_DOSSIER.NAT_CODE = PAR_NATIONALITE.NAT_CODE;
end
else if (@typeEdition = 2)----------Edition Transmission Dde en rejet
begin
select CSR_DOSSIER.DOS_NODE, UPPER ( dbo.CSR_DOSSIER.DOS_NOM +' '+ ISNULL ( dbo .CSR_DOSSIER.DOS_PRENOM, ' ')) as NOMS, CSR_DOSSIER.PID_CODE , CSR_DOSSIER.DOS_NOBR ,
CSR_DOSSIER.TIT_CODE , PAR_MOTIFREJET.MRE_LIB
from csr_rejet,csr_dossier, PAR_MOTIFREJET
where csr_rejet.DOS_NODE = CSR_DOSSIER.DOS_NODE
and CSR_REJET.REJ_STATUT in (3,4)
and PAR_MOTIFREJET.MRE_CODE = CSR_REJET.MRE_CODE
and CSR_REJET.REJ_SVCDEST = @SceDest
and CSR_REJET.REJ_DATRANS is null
end
else if (@typeEdition = 3) -------------Edition Fiche Analyse RPT
begin
select CSR_DOSSIER.DOS_ID , CSR_DOSSIER.DOS_NODE , UPPER ( dbo.CSR_DOSSIER.DOS_NOM +' '+ ISNULL ( dbo .CSR_DOSSIER.DOS_PRENOM, ' ')) as Noms,
CSR_TITREPRECEDENT.TIP_NODE ,CSR_TITREPRECEDENT.TIP_NOMSIDIF , CSR_TITREPRECEDENT.TIP_TYCA ,CSR_TITREPRECEDENT.TIP_DTEXP ,CSR_TITREPRECEDENT.TIP_PICODE
from CSR_DOSSIER , CSR_STATUT, CSR_TITREPRECEDENT
where CSR_DOSSIER.DOS_ID = CSR_STATUT.DOS_ID
and CSR_STATUT.STA_ID = 7
and CSR_DOSSIER.DOS_ID = CSR_TITREPRECEDENT .DOS_ID
order by CSR_DOSSIER.DOS_NODE
end
else if (@typeEdition =4)-------------exportation fichier Interpol
begin
SELECT DOS_NODE AS 'N DEMANDE',UPPER ( dbo.CSR_DOSSIER.DOS_NOM +' '+ ISNULL ( dbo .CSR_DOSSIER.DOS_PRENOM, ' '))AS NOM,DOS_DDN AS 'NE(E) LE' , DOS_LNAIS AS 'LIEU NAISSANCE',
DOS_SEX AS SEXE, PAR_NATIONALITE.NAT_LIB AS NATIONALITE,CSR_DOSSIER .DOS_ID
FROM DBO.CSR_DOSSIER ,DBO.CSR_STATUT ,DBO.PAR_NATIONALITE
WHERE CSR_DOSSIER .DOS_ID = CSR_STATUT.DOS_ID
AND CSR_STATUT .STA_ID =6 and CSR_DOSSIER.TIT_CODE ='RPO'
AND CSR_DOSSIER.NAT_CODE = PAR_NATIONALITE.NAT_CODE
end
END
ceci focntionne tres bien dans le SQL
le souci est le suivant losque je veux realiser mon rapport, comment specifier la procedure a utiliser et ses élements (ceux afficher), car lorsque j'importe ceci dans le dataset, je n'ai que les elements retournés par la 1ere procedure.
Merci
cordialementMarcelle NGOUNOU
Réponses
-
Bonjour,
"importer dans le dataset" c'est--à-dire ? Si on utilise un assistant pour générer qq chose, je pense que c'est le premier SELECT qui va déterminer ce qu'est censé retourné la procédure qui sera donc impossible à exploiter. Si on fait un DataSet.Fill soit-même vérifier peut-être avec une trace SQL Server que l'on appelle bien la procédure avec le bon paramètre.
Sinon je crains que ce soit une fausse bonne idée (on changerait sans doute d'avis pour revenir vers une approche procédure par procédure si on avait 10 ou 20 rapports, de même on ne le ferait sans doute pas dans du code C# juste pour avoir une seule fonction au lieu de 5 donc pourquoi le faire pour le code présent dans la base ?)
Eventuellement tester avec une procédure qui ne contiendrait que :
SELECT 'A' AS Test1
SELECT 1 AS Test2 puis retester après avoir permuté ces deux lignes.Si Crystal Report (je viens de voir que c'est ce qu'on utlise) voit bien Test1 dans le 1er cas et Test2 dans le premier cas, c'est sans doute que le premier SELECT présent dans la procédure indique ce que la procédure retournera et donc une procédure qui ne retourne pas toujours le même nombre et noms de colonnes dans tous les cas ne devrait pas être exploitable dans ce cadre de toute façon...
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Modifié Patrice ScribeMVP, Moderator lundi 27 août 2012 16:48 Suggestion de test
- Marqué comme réponse marclas mardi 28 août 2012 02:09
Toutes les réponses
-
Bonjour,
"importer dans le dataset" c'est--à-dire ? Si on utilise un assistant pour générer qq chose, je pense que c'est le premier SELECT qui va déterminer ce qu'est censé retourné la procédure qui sera donc impossible à exploiter. Si on fait un DataSet.Fill soit-même vérifier peut-être avec une trace SQL Server que l'on appelle bien la procédure avec le bon paramètre.
Sinon je crains que ce soit une fausse bonne idée (on changerait sans doute d'avis pour revenir vers une approche procédure par procédure si on avait 10 ou 20 rapports, de même on ne le ferait sans doute pas dans du code C# juste pour avoir une seule fonction au lieu de 5 donc pourquoi le faire pour le code présent dans la base ?)
Eventuellement tester avec une procédure qui ne contiendrait que :
SELECT 'A' AS Test1
SELECT 1 AS Test2 puis retester après avoir permuté ces deux lignes.Si Crystal Report (je viens de voir que c'est ce qu'on utlise) voit bien Test1 dans le 1er cas et Test2 dans le premier cas, c'est sans doute que le premier SELECT présent dans la procédure indique ce que la procédure retournera et donc une procédure qui ne retourne pas toujours le même nombre et noms de colonnes dans tous les cas ne devrait pas être exploitable dans ce cadre de toute façon...
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Modifié Patrice ScribeMVP, Moderator lundi 27 août 2012 16:48 Suggestion de test
- Marqué comme réponse marclas mardi 28 août 2012 02:09
-