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

Access Discussion :

[ADP Access 2003/SQL Serveur 2000] Vue non "updatable"


Sujet :

Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 110
    Par défaut [ADP Access 2003/SQL Serveur 2000] Vue non "updatable"
    Bonjour à tous,

    J’ai une table T_BOITE_BOI : (BOI_ID,BOI_LIBELLE) connecté à une table T_PLAQUE_PLQ(PLQ_ID,BOI_ID,PLQ_LIBELLE).
    Je voudrais tout simplement faire une vue V_BOITE qui affiche un champ calculé qui donne le nombre de plaque par boite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE VIEW V_BOITE
    AS
    SELECT BOI_ID,BOI_LIBELLE,(SELECT ISNULL(COUNT(*),0) FROM T_PLAQUE_PLQ  WHERE BOI_ID=BOI.BOI_ID) AS NB_PLQ
    FROM T_BOITE_BOI BOI
    Hélas cette vue n’est pas “updatable” dans Access 2003. (requête corrélée)

    La seule solution que j’ai trouvé est de créer un trigger sur la table T_PLAQUE_PLQ qui mette à jour un champs supplémentaire(BOI_NB_PLQ) dans la table T_BOITE_BOI.

    Est-ce qu’il y a une autre solution à ce problème sans utiliser les triggers?


    Merci d’avance

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Par défaut
    Bonjour

    Et pourquoi pas une vue du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE VIEW V_BOITE
    AS
    SELECT BOI_ID,BOI_LIBELLE, COUNT(PLQ_ID) as nbrePlq FROM T_PLAQUE_PLQ  INNER JOIN T_BOITE_BOI BOI ON T_BOITE_BOI.BOI_ID=T_PLAQUE_PLQ .BOI_ID
    Groupb by BOI_ID,BOI_LIBELLE

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 110
    Par défaut
    Hélas , cette vue ne peux être mise à jour.(requête regroupement)

  4. #4
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonsoir,

    Avec une fonction utilisateur ça à l'air de fonctionner.
    La fonction :
    Code T-SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE FUNCTION dbo.fnNB_PLQ (@boi_id) 
    RETURNS Int
    BEGIN
    RETURN (SELECT ISNULL(COUNT(*),0) FROM T_PLAQUE_PLQ  WHERE BOI_ID=@boi_id)
    END
    Si besoin donner les droits d'exécuter la fonction aux autres utilisateurs :
    Code T-SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT EXECUTE on dbo.fnNB_PLQ TO public

    La vue :
    Code T-SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE VIEW V_BOITE
    AS
    SELECT BOI_ID, BOI_LIBELLE, dbo.fnNB_PLQ(BOI_ID) AS NB_PLQ
    FROM T_BOITE_BOI
    A+

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 110
    Par défaut
    Effectivement celà fonctionne .
    Par contre au niveau performance , les temps de réponse de la vue avec la fonction sont plus longs.

    Je vais regarder si je peux l'optimiser.

    En tous cas merci pour votre aide.

  6. #6
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonjour,

    Tu peux commencer en enlevant le ISNULL(..,..).
    COUNT(*) ne renvoie jamais NULL, si je ne me trompe pas.

    A+

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/02/2009, 14h09
  2. Réponses: 8
    Dernier message: 29/08/2008, 17h29
  3. (Access 2003 - SQL 2000) requete VBA multicriteres
    Par Chris 81 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 29/08/2008, 11h47
  4. Connexion de Access 2003 à SQL Server 2000
    Par Faboul dans le forum Access
    Réponses: 1
    Dernier message: 31/05/2007, 14h45
  5. Access 2003 -> SQL Serveur 2005 Sans ODBC
    Par Destiny dans le forum Access
    Réponses: 2
    Dernier message: 21/02/2007, 15h28

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