IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Appliquer un filtre sur une Stored Procedure de MS SQL Server ?


Sujet :

IHM

  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut Appliquer un filtre sur une Stored Procedure de MS SQL Server ?
    Bonjour a tous et merci de votre temps et de votre aide.

    J'affiche actuellement dans un formulaire les resultats d'une Stored Procedure de MS SQL Server.
    Pour ce faire je passe par un recordset ADO.
    Tout ce passe bien tant que je n'essaye pas d'appliquer un filtre sur mes resultats.

    Ce qui se passe alors :

    La propriete RecordSource de mon formulaire deveint egale au SQL de mon recordset ADO (exec proc_MaProcedure '2018-01-01', '2018-12-31') et Access crie que ce n'est pas une instruction SQL valide !
    ### Correction : la source est deja assignee a exec proc_MaProcedure '2018-01-01', '2018-12-31' apres le chargement initial et apparemement cela ne le gene pas a ce moment la. ###

    Voyant cela j'ai fait les codes suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim m_Recordset As ADODB.Recordset
    Dim m_Conn As ADODB.Connection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer) 'Evenement declencher par la demande de filtrage
        Me.RecordSource = "" 'Corrige le changement de source de donnees. les formulaires deconnectes n'ont pas de source de donnees
        Me.Filter = "" 'Juste au cas ou cela perturberai Access
        Me.FilterOn = False 'Juste au cas ou cela perturberai Access
        m_Recordset.Filter = "[CurrentYear]=2018" 'Applique un filtrage arbitraire pour test et etre sur qu'il n'y a pas de syntaxe error
        Set Me.Recordset = m_Recordset 'Reassigne la source du formulaire suposement filtre directement au recordset
        Me.Requery 'A mon avis ne sert a rien a cause de la reassignation ci-dessus.
    End Sub
    Avec ce code j'ai toujours l'alerte sur le SQL invalide mais la 1ere ligne resoud cela.
    Les autres lignes s'execute apparement sans erreur.
    Et apres j'ai un message d'Access qui me dit que le champ [CurrentYear] est en lecture seule.
    Puis Access plante sans message d'erreur : l'application a cesser de fonctionner.

    Quelu'un a-t'il deja reussi a faire cela ?

    J'ai trouve des exemples sur le web mais ils font la meme chose que moi et meme un peu moins mais chez moi cela ne fonctionne pas.

    A toutes fin utiles, ici le code qui charge initialement le recordset.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Private Sub Form_Load()
        '=== Feed the disconnected record
        ' with the stored procedure
        Set m_Conn = New ADODB.Connection
        m_Conn.CursorLocation = adUseClient
        Call m_Conn.Open("MA_BD")
     
        Dim f As Form_frm_Reports: Set f = Me.Parent
     
        Dim StartDate As Date: StartDate = f.dFirstDay
        Dim EndDate As Date: EndDate = f.dLastMonthDay
     
        Set f = Nothing
     
        Dim db As dao.Database: Set db = CurrentDb
     
        Set m_Recordset = New ADODB.Recordset
     
        With m_Recordset
           Set .ActiveConnection = m_Conn
           'Runs sp with parameter
           .Source = db.QueryDefs("Qry_MaProcedure ").sql _
                        & " '" & Format(StartDate, "yyyy/mm/dd") & "'" _
                        & ", '" & Format(EndDate, "yyyy/mm/dd") & "'"
           .LockType = adLockOptimistic
           .CursorType = adOpenKeyset
           .Open
        End With
        '--- Feed the disconnected record
     
        Set Me.Recordset = m_Recordset
     
    End Sub
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour , Marot

    Dim db As dao.Database: Set db = CurrentDb

    Set m_Recordset = New ADODB.Recordset

    With m_Recordset
    Set .ActiveConnection = m_Conn
    'Runs sp with parameter
    .Source = db.QueryDefs
    ("Qry_MaProcedure ").sql _
    Ma suggestion : je pense que mélanger des déclarations DAO et ADO dans du code n'est pas une bonne idée. Personnellement je choisis mon camp et je ne mélange jamais.

    CDLT
    "Always look at the bright side of life." Monty Python.

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Mois aussi j'evite mais la c'est juste pour recuperer le SQL de l'objet apres je ne me sers plus de DAO.

    Il y a une method en ADO pour cela ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. [AC-2013] Appliquer un filtre sur une fenêtre de résultats.
    Par vavavoum74 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/03/2018, 06h45
  2. Appliquer un filtre sur une colonne d'un DataGrid
    Par Invité dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 24/05/2011, 12h42
  3. [Server SQL 2000] Erreur sur une "stored procedure"
    Par hunteshiva dans le forum MS SQL Server
    Réponses: 17
    Dernier message: 18/03/2011, 15h41
  4. appliquer un filtre sur une image
    Par wahidred dans le forum Images
    Réponses: 3
    Dernier message: 09/12/2010, 11h33
  5. Réponses: 4
    Dernier message: 04/02/2008, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo