none
comment utiliser une procedure stockée pour réaliser des rapports avec crystal report RRS feed

  • 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

    cordialement

    Marcelle NGOUNOU

    lundi 27 août 2012 15:57

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".


    lundi 27 août 2012 16:37
    Modérateur

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".


    lundi 27 août 2012 16:37
    Modérateur
  • Merci Patrice


    Marcelle NGOUNOU

    mardi 28 août 2012 02:09