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

Windows Forms Discussion :

[vb.net][2.0] Comment obtenir des infos sur les meta-données d'une base Access ?


Sujet :

Windows Forms

  1. #1
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut [vb.net][2.0] Comment obtenir des infos sur les meta-données d'une base Access ?
    Bonjour,
    Je dois analyser 2000 bases Access et stocker des informations sur leur meta-données dans une base SQL Server. Pour cela je parcours recursivement un repertoire du réseau qui contient tous les fichiers Access.

    Mon problème est que je ne sais pas comment lire les meta-données de chaque fichier. Par exemple j'aimerais savoir si une base Access contient une table s'appellant 'Article' et qui elle-même contient un champ s'appellant 'ArticleID'.

    Savez-vous comment faire ?

    Merci

  2. #2
    Membre actif Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Points : 277
    Points
    277
    Par défaut
    Salut,
    Voilà comment je fais, en fait je n'y comprend pas grand chose à la manière de chargement de meta-données, notement les Nothing, mais ça marche:

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            'Cette ligne, c'est pour les tables, tu y trouve un champ TABLE_NAME
            Dim DtTables As DataTable = MaOleDbConnection.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
    
            'Cette ligne, c'est pour les colonnes, les principaux champs renvoyés sont TABLE_NAME et COLUMN_NAME
            Dim DtColonnes As DataTable = ConGesComModele.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, Nothing, Nothing})

    Mets un DataGridDeTest.DataSource=DtTable puis DtColonnes pour que tu vois par toi même le résultat.
    Fais un F1 sur la methode GetOleDbSchemaTable de l'object OledbConnection pour plus d'infos .
    Certified SCJP 5.0 / SCWCD 5.0 / SCEA 5.0
    C'est une grande folie de vouloir être sage tout seul.
    Duc de La Rochefoucauld

  3. #3
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Merci mais en fait je viens de trouver THE method
    Il faut passer par l'objet COM 'DAO'. A partir de ca je peux faire absolument tout ce que je veux avec chaque fichier .mbd
    Exemple:
    j'ouvre une base access et je boucle sur les tables:

    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Dim db As Database = da.Workspaces(0).OpenDatabase(files(i).ToString)
     
     For Each tdf As DAO.TableDef In db.TableDefs
     Next

  4. #4
    Membre actif Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Points : 277
    Points
    277
    Par défaut
    Il faut passer par l'objet COM 'DAO'. A partir de ca je peux faire absolument tout ce que je veux avec chaque fichier .mbd
    Oui, mais tu sais, tu fais un grand pas vers l'arrière , DAO n'était déjà plus utilisé très avec VB6, alors maintenant avec VB NET2005 , tu vas te retrouver avec d'autre références que t'aurais pu éviter.

    Pourquoi tu ne veux pas utiliser la méthode que je t'ai fournie, elle est trop longue ou t'avais déjà integrer ton Code DAO ?

    Tu ne sais pas ce que tu manque, avec la méthode que je t'ai fournie, tu pourrais faire vite fait des trucs genre(et sans boucle ):
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DtTable.Select("TABLE_NAME='Clients'").Lentgh()            '<-- Si >0 la table Clients existe dans la base
     
    DtColonnes.Select("COLUMN_NAME='NomClt' AND TABLE_AME='Clients').Lentgh()             '<-- Si >0 la table Clients contient une colonne NomClt
    ...
    Certified SCJP 5.0 / SCWCD 5.0 / SCEA 5.0
    C'est une grande folie de vouloir être sage tout seul.
    Duc de La Rochefoucauld

  5. #5
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Ta méthode est correcte mais je vais me heurter à des problèmes de droits d'accès (en plus les identifiants sont différents pour chaque bases...). En passant par DAO, je n'ai pas ce problème et j'interagis directement avec la base Access. Mais sur le fond tu as raison...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/02/2011, 22h27
  2. Réponses: 6
    Dernier message: 15/04/2010, 08h37
  3. Réponses: 2
    Dernier message: 26/12/2008, 14h54
  4. Comment récupérer des infos sur les connections
    Par dalidasoul dans le forum Connexions aux bases de données
    Réponses: 11
    Dernier message: 24/04/2008, 10h04
  5. Réponses: 2
    Dernier message: 18/03/2008, 13h58

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