Bonjour tout le monde,
Je bosse sur Access 2003 avec une base de donnée SQL Serveur 2005 et j'ai un gros soucis avec un champ calculé d'un formulaire!
J'affiche une série d'articles sur un formulaire avec des totaux, des calculs de pourcentages, des moyennes, etc etc. En regard de chaque article, une case à coché détermine si l'article en question va être produit ou pas. Tout allait bien jusqu'à ce que j'ajoute un autre champ calculé sur mon form.
Ce champ est censé indiquer la quantité d'article qui va être produite (= somme des quantité d'articles pour lesquels la case ci-dessus est cochée). Et c'est là que je devient complètement cinglé... heureusement d'ailleurs que j'ai pas une souris sans fil sinon ça fait bien longtemps qu'elle aurait fait connaissance avec le mur en face de moi!
Pour faire ce calcul j'ai créé la fonction sql serveur ci-dessous :
J'appelle cette fonction sql à l'aide d'une autre fonction, mais cette fois-ci une fonction VBA :
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 ALTER FUNCTION [dbo].[fct_somme_qtt_a_prev_famille] ( -- Add the parameters for the function here @FAMILLE AS BIGINT ) RETURNS BIGINT AS BEGIN -- Declare the return variable here DECLARE @RESULTAT AS BIGINT -- Add the T-SQL statements to compute the return value here SELECT @RESULTAT = SUM(CASE WHEN pa_art_prev_oui_non = 1 THEN pa_qte_art_res ELSE 0 END) FROM tb_ooep_obj_pourcent_art WHERE pa_obj_fam_no = @FAMILLE -- Return the result of the function RETURN isnull(@RESULTAT,0) END
Enfin, j'appelle ma fonction VBA depuis la propriété "Source contrôle" de mon champ calculé sur mon formulaire.
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 Public Function fct_somme_qtt_a_prev_famille(no_famille As Long) As Long Dim cmd As New ADODB.Command Dim resultat As Long cmd.ActiveConnection = Application.CurrentProject.Connection cmd.CommandText = "fct_somme_qtt_a_prev_famille" cmd.CommandType = adCmdStoredProc cmd.Parameters.Append cmd.CreateParameter("@RESULT", adBigInt, adParamReturnValue, 20) cmd.Parameters.Append cmd.CreateParameter("@FAMILLE", adBigInt, adParamInput, 20, no_famille) cmd.Execute resultat = cmd.Parameters(0).Value fct_somme_qtt_a_prev_famille = resultat Set cmd = Nothing End Function
Lorsque la cases à cocher est cochée pour tous les articles du formulaire, la fonction marche très bien, idem lorsque aucune case ne l'est! Ce que je n'arrive pas à m'expliquer est le comportement de ce fameux champ calculé lorsqu'une partie seulement des articles vont être produits. La valeur de mon champ calculé change en fonction de la ligne sur laquelle je pointe sur mon formulaire. Les données ne changent pas d'un yotta mais le champ calculé, lui ne semble pas voir la même chose que moi!
Voili, j'espère que vous avez plus ou moins saisi mon problème et qu'une bonne âme puisse m'aider à corriger mon soucis! J'aimerais juste que mon champ calculé me donne cette somme sans changer à tout bout de champ!
Si vous avez besoin d'autres information, n'hésiter pas je vous donnerai tout ce que je peux!
Merci et à bientôt
Julius
Partager