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 :

[A-03][SQL-05] champ calculé au comportement incompréhensible


Sujet :

IHM

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut [A-03][SQL-05] champ calculé au comportement incompréhensible
    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 :

    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
    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
    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
    Enfin, j'appelle ma fonction VBA depuis la propriété "Source contrôle" de mon champ calculé sur mon formulaire.

    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

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,


    Pour mieux cerner l'origine de ton problème, as-tu essayé la fonction seule (directement depuis la fenêtre d'exécution)?

    A première vue ta fonction VBA et ton UDF sont correctes... peut-être un souci dans l'agencement de ton formulaire... ou simplement besoin de forcer la rafraichissement du champ contenant l'expression.
    D'ailleurs, précises ce que tu as mis comme expression...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut
    Bonjour mout1234,

    Merci pour ta réponse.

    Alors si j'exécute ma fonction directement sur SQL Serveur, ça marche comme sur des roulettes, aucun soucis! Si je modifie mes coches dans l'applic access et que j'exécute ma fonction dans SQL, tout se passe à merveille, SQL Serveur semble fonctionner exactement comme je le souhaite. C'est vraiment dans Access, il doit y avoir un problème de synchronisation ou je ne sais quoi mais c'est à devenir fou!

    L'expression de la propriété Source Contrôle de mon champ calculé est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =fct_somme_qtt_a_prev_famille([pa_obj_fam_no])
    il me semble que c'est correct mais ... J'ai même pensé à changé le champ calculé de place sur mon formulaire. Il est actuellement dans le pied de formulaire mais même placé ailleurs son comportement est identique!

    Je fais déjà un "requery" sur mon champ calculé sur l'événement "Après mise à jour" de la case à cocher mais cela n'arrange rien!

    J'arrive vraiment pas à pigé pourquoi la valeur de ce maudit champ change en fonction de la ligne active du formulaire... c'est rageant!

    As-tu encore des idées de trucs que je pourrais contrôler?

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Il existe une incompatibilité sans correctif (apparemment) entre Access 2003 et SQL Server 2005 et qui débouche sur des comportements bizarres...

    Que se passe t-il si tu écris ceci (après avoir supprimé le RecordSource du champ) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UnTextBoxDeTaLigne_GotFocus()
        Debug.Print fct_somme_qtt_a_prev_famille(pa_obj_fam_no)
    End Sub
    UnTextBoxDeTaLigne est un champ présent sur la ligne sur laquelle tu as le focus...

    Argy

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut
    Salut argyronet,

    Merci pour ta réponse... j'ai pas vraiment le temps de zieuter ça tout de suite car je dois me sauver illico presto chez le dentiste! Crois bien que je préfèrerais nettement ne pas y aller mais quand il faut il faut!

    Je teste ça demain matin et je te tiens au jus!

    Bonne soirée à tous

    Julius

  6. #6
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par argyronet Voir le message
    Bonjour,

    Il existe une incompatibilité sans correctif (apparemment) entre Access 2003 et SQL Server 2005 et qui débouche sur des comportements bizarres...
    ...

    Salut Argy,

    C'est bon à savoir , tu as un lien où l'on parle de cela?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut
    Bonjour bonjour,

    je viens de tester le debug print comme argyronet me l'a suggéré! Et chose incroyable, dans la fenêtre exécution la fonction semble se comporter correctement, je dirais même plus, elle se comporte exactement comme je le souhaite! Maintenant reste plus qu'à reproduire ça à l'affichage normale du formulaire, ce qui pour l'instant ne fonctionne pas du tout! Mais comment donc est-ce possible? Comment corriger ceci? Je pige plus rien.

    Serait-ce du à ce problème entre Access 2003 et SQL Server 2005???

  8. #8
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Je ne sais te confirmer s'il existe un lien, à ce jour.
    Toutefois, pour résoudre ton problème, tu peux sur l'événement Current() alimenter dynamiquement le champ en question avec ta fonction plutôt que de lui appliquer la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Current()
        MonChamp = fct_somme_qtt_a_prev_famille(pa_obj_fam_no)
    End Sub
    Quant à la source de l'incompatibilité, elle est diverse et évoquée sur différentes pages...

    Argy

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut
    Bien le bonjour,

    argyronet ta solution fonctionne parfaitement. J'ai créé comme tu le suggérais une procédure sur l'événement "Form_Current" et le résultat est impeccable!

    Merci encore et bonne continuation

    Julius

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. AIDE sur requête SQL et champs calculé
    Par droliprane dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 13/09/2012, 17h56
  2. [Requête/SQL]ajouter un champ calculé dans une table
    Par zougna dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 17/04/2007, 20h09
  3. [debutant] SQL Server 2005 champ calculé
    Par jpo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/03/2007, 22h37
  4. [SQL Server 2000]Utiliser un Champs calculé pour en calculé un autre.
    Par PadawanDuDelphi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/03/2007, 11h05
  5. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 17h29

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