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

VBA Access Discussion :

Importation d'une vue mysql en vba


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 50
    Points : 53
    Points
    53
    Par défaut Importation d'une vue mysql en vba
    Bonjour,

    J'effectue une base de données en mysql 5.0 avec une interface Access 2003 pour les utilisateurs. La base de données comprend 18 tables, et j'ai donc créé une vue pour la consultation et la recherche de données. Toutes mes tables sont liées via le driver ODBC, par contre la vue je voudrais la réimporter en vba à chaque démarrage de l'application Access: si je lie la vue (comme je le fais pour mes tables) cela fonctionne mais c'est excessivement lent, beaucoup trop lent.

    Ou peut-être y a-t-il moyen de regénérer ma vue en access à partir de mes tables liées? J'ai essayé d'utiliser le même code que dans mysql

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    CREATE OR REPLACE ALGORITHM=MERGE VIEW educa AS
        SELECT DISTINCTROW documents.idDocument,
                documents.titre,
                documents.reference,
                documents.localisation,
    	    categoriemateriel.categorie,
    	    typedocument.type,
                documents.auteurs,
                documents.collectivite,
                documents.dateedition,
    	    documents.disponibilite,
                documents.prix,
                documents.caution,
                documents.pages,
                documents.photocopies,
                documents.lienweb,
                documents.resume,
                documents.commentaires,
                documents.dimensions,
                documents.datesaisie,
                editeurs.editeur,
                lieuxedition.ville,						
                pays.pays,
                GROUP_CONCAT( DISTINCT public SEPARATOR ", ") AS publics,
                GROUP_CONCAT( DISTINCT motcle ORDER BY ordre SEPARATOR ", ") AS motscles,
    		audiovisuel.realisation,
    		audiovisuel.cassette,
    		audiovisuel.dvd,
    		audiovisuel.complement,
    		audiovisuel.reference as refcomplement,
    		audiovisuel.duree,
    		producteurs.producteur,
    		collections.collection,
    		revues.nom as revue,
    		doc_revue.numero,
    		doc_revue.date
            FROM documents
                LEFT OUTER JOIN editeurs ON documents.idEditeur = editeurs.idEditeur
    	    LEFT OUTER JOIN lieuxedition ON documents.idLieuxEdition = lieuxedition.idLieuxEdition
                LEFT OUTER JOIN pays ON documents.idPays = pays.idPays
                LEFT OUTER JOIN doc_public ON documents.idDocument = doc_public.idDocument
                LEFT OUTER JOIN publics ON doc_public.idPublic = publics.idPublic
                LEFT OUTER JOIN doc_mc ON documents.idDocument = doc_mc.idDocument
                LEFT OUTER JOIN motscles ON doc_mc.idMotCle = motscles.idMotCle
    	    LEFT OUTER JOIN audiovisuel ON documents.idDocument = audiovisuel.idDocument
    	LEFT OUTER JOIN producteurs ON audiovisuel.idProducteur = producteurs.idProducteur
     	LEFT OUTER JOIN collections ON documents.idCollection = collections.idCollection
    	LEFT OUTER JOIN categoriemateriel ON documents.idCategorie = categoriemateriel.idCategorie
    	LEFT OUTER JOIN typedocument ON documents.idTypeDocument = typedocument.idTypeDocument
    	LEFT OUTER JOIN doc_revue on documents.idDocument = doc_revue.idDocument
    	LEFT OUTER JOIN revues on doc_revue.idRevue = revues.idRevue
            GROUP BY documents.idDocument;
    Mais évidement ca ne marche, j'ai essayé la même requête avec CREATE TABLE au lieu de CREATE VIEW mais cela ne fonctionne pas...

    Merci d'avance
    Lionel

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 548
    Points
    24 548
    Par défaut
    Bonjour,

    Je ne suis pas surpris vu la taille de la vue. Tu demandes de remonter le contenu de 18 tables en une seule requête, au travers d'ODBC, sur une BD partagée et donc au travers d'un réseau... C'est plus de l'optimisme à ce stade.

    Mon conseil est :

    Quelque soit le but que tu recherches change de méthode.

    Ne sachant pas ce que tu cherches à faire c'est difficile de t'aiguiller.

    Cordialement,

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 50
    Points : 53
    Points
    53
    Par défaut
    La base de données concerne un centre de documentation.
    J'ai scindé les données en 18 tables pour la normaliser et cadenasser un minimum ce que les documentalistes peuvent encoder.
    La table "documents" compte 22300 enregistrements, la table "doc_mc" (table intermédiaire entre les documents et les mots clés)en compte 167000, les autres tables sont beacoup plus raisonnables... La base données myql est en innodb, indexé (correctement j'espère) pèse en tout 21,2Mo.
    Mes tables sont:
    documents (informartions communes à tous les documents)
    categoriemateriel (classification des documents)
    typedocument (classification des documents)
    audiovisuel (extension d'informations pour les documents multimédia: durée, support,...)
    editeurs
    producteur
    lieuxedition
    pays (sous entendu d'édition)
    collection
    motscles
    publics
    revues
    utilisateurs
    doc_mc (intermédiaire entre documents et motscles)
    doc_public (intermédiaire entre documents et publics)
    doc_revue (intermédiaire entre documents et revues)

    Pour ajouter des informations dans la base, aucun problème, j'ai un formulaire qui fonctionne très bien.
    Pour modifier des informations d'un document, aucun problème non plus, j'effectue une requête sur une seule table (documents) sur un identifiant, un titre ou une référence.

    Pour le moteur de recherche par contre, j'ai un très gros problème, tous les champs (ou presque) étant susceptibles de servir de critère de recherce je dois faire un requête avec 13 jointures! et c'est très lent. J'avais donc créé une vue (qui regroupe dans une seule "table" tous les champs nécessaires aux critéres de recherche et d'importer cette vue automatiquement dans access à chaque démarrage de l'application. J'arrive sans problème à importer manuellement en ODBC la vue, ce qui créé un table dans un access mais je ne sais pas comment coder cette importation en vba pour le faire à chaque démarrage de la base de données.
    L'importation est un peu lente (grosso modo 30 secondes) mais ensuite toutes les requêtes de recherches sont effectuées très rapidement.

    Je ne vois pas d'autres solutions hormis dénormaliser ma base de données et tout encoder dans une seule table...

    merci d'avance
    Lionel

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 548
    Points
    24 548
    Par défaut
    Je ne te conseillerais pas sur la structure car tu connais ton affaire (la gestion documentaire c'est lourd à gérer on y peut rien.

    Pour la recherche, l'utilisateur travaille par type d'information -il recherche un mots clef, un auteur, un titre...- donc par table.

    tu peux peut-être commencer par cette recherche pour remonter uniquement l'information souhaitée (les clefs et les identifiants textes). Puis petit à petit affiner en utilisant la sélection de l'utilisateur pour refaire une interogation.

    Regarde le tuto sur ADO pour les opérations au travers d'ODBC.

Discussions similaires

  1. Type des champs d'une vues mysql
    Par JmL40 dans le forum Requêtes
    Réponses: 1
    Dernier message: 27/05/2008, 16h06
  2. [phpMyAdmin] Erreur d'importation d'une base MySQL sur serveur distant
    Par dAvydAv dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 10/09/2007, 16h51
  3. import vers une BD MySql
    Par jika dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 24/11/2006, 11h24
  4. import d'une vue oracle
    Par habasque dans le forum Oracle
    Réponses: 5
    Dernier message: 26/10/2006, 16h23
  5. [MyODBC]import d'une sauvegarde MySQL
    Par hansaplast dans le forum Access
    Réponses: 4
    Dernier message: 13/07/2006, 15h23

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