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.ConnectionAvec ce code j'ai toujours l'alerte sur le SQL invalide mais la 1ere ligne resoud cela.
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
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
Partager