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

WinDev Discussion :

Listes des champs et indexes d'une table Access


Sujet :

WinDev

  1. #1
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 379
    Points : 4 496
    Points
    4 496
    Par défaut Listes des champs et indexes d'une table Access
    Bonjour

    Je cherche à récupérer la liste des champs et des indexes d'une table Access à partir de Windev
    En SQL, d'après mes recherches, il n'y a pas de possibilités (du genre vues systèmes)

    Alors peut être par un objet Automation "Access.Application"

    Mais n'étant pas expert en la matière j'ai du mal a trouver des infos sur le sujet

    J'ouvre ma base comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    oAccess est un objet Automation dynamique
    sNomSource est une chaîne = "c:\test.mdb"
     
    oAccess = allouer un objet Automation "Access.Application"
    oAccess>>visible = OLEFaux
    oAccess>>OpenCurrentDatabase(sNomSource)
    Ensuite je suppose qu'il faut parcourir la collection TableDefs

    Mais peut t'on faire un parcours (For Each) d'une collection à partir de Windev ?

  2. #2
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    Salut,
    tu peux essayer d'utiliser ADODb avec un truc du genre :
    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
    oADODb est un objet Automation "ADODb.Connection"
    rst,rst2,rst3 sont des objets Automation dynamiques
    oADODb>>Provider =  "Microsoft.Jet.OLEDB.4.0"
    oADODb>>ConnectionString = "f:\test\nwind.mdb"
    oADODb>>Open()
    // adSchemaColumns	4	Request column information
    //  adSchemaIndexes	12	Request  Indexes information
    // adSchemaTables	20	Request table information
    mesCritèresCol est un tableau de Variant = ["","",""]
    NomTable est une chaîne
    // lecture des tables
    rst = oADODb>>OpenSchema(20) // adSchemaTables
    TANTQUE PAS rst>>EOF 
    // Trace ("Catalogue: ", rst>>Fields("Table_Catalog")>>Value)
    // Trace ( "Schema: ", rst>>Fields("Table_Schema")>>Value)
    NomTable = rst>>Fields("Table_Name")>>Value
    Trace ( "Nom de table: ",NomTable)
    Trace ( "Type: ", rst>>Fields("Table_Type")>>Value)
    // lecture des champs de la table courante
    Trace("                   ==  Champs ==")
    mesCritèresCol[3] = NomTable
    rst2 = oADODb>>OpenSchema(4,mesCritèresCol) // adSchemaColumns
    TANTQUE PAS rst2>>EOF 
    Trace("Champ; ", rst2>>Fields("Column_Name")>>Value)	
    rst2>>MoveNext()	
    FIN
    rst2>>CLose()
    Trace("============================================================")
    rst>>MoveNext()	
    FIN
    rst>>Close()
    // lecture des index des tables
    Trace("                   == Index des tables  ==")
    rst3 = oADODb>>OpenSchema(12) //12 adSchemaIndexes
    TANTQUE PAS rst3>>EOF 
    	Trace("Table; ", rst3>>Fields("TABLE_NAME")>>Value)	
    	Trace("Index; ", rst3>>Fields("INDEX_NAME")>>Value)	
    	Trace("Index = Clé primaire ?: ", rst3>>Fields("PRIMARY_KEY")>>Value)	
    	rst3>>MoveNext()	
    FIN
    rst3>>CLose()
    Il faut peut être un peu plus sélectif pour ne pas afficher les vues etc ....

    Amicalement, nullosse

  3. #3
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 379
    Points : 4 496
    Points
    4 496
    Par défaut
    C'est extra ça, exactement ce qu'il me fallait

    J'ai ajouté un Trace("Colonne; ", rst3>>Fields("COLUMN_NAME")>>Value) dans le parcours de adSchemaIndexes et ça me donne le nom des colonnes composant les indexes, parfait !

    Là ou je coince c'est que j'aimerai avoir les indexes d'une table précise
    Donc en me référant à cette la doc présente ICI je vois que adSchemaIndexes peut prendre 5 paramètres, le 5ème étant le nom de table

    Donc en reprenant ton principe j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    mesCritères est un tableau de Variant = ["","","","",""]
    mesCritères[5] = "LeNomDeMaTable"
     
    rst3 = oADODb>>OpenSchema(12,mesCritères) //12 adSchemaIndexes
    Et là je me prends un gros plantage :
    En tentant d'invoquer la méthode <OpenSchema> ou de lire la propriété <OpenSchema>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
    'Erreur 800A0CB3 : Le fournisseur ou l'objet ne prend pas en charge cette opération.'
    En tentant d'invoquer la méthode <OpenSchema>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
    Là, je navigue un peu en terrain inconnu, mais la solution est proche ...
    Tu vois d'où ça vient ?

  4. #4
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    j'ai la même erreur chez moi :
    Le fournisseur ou l'objet ne prend pas en charge cette opération.'
    j'ai l'impression que c'est une limitation du provider. Pour en avoir le coeur net il faudrait essayer de faire l'opération en vba. Je ne suis pas du tout sûr que mon tableau de variants marche à tout les coups.

  5. #5
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 379
    Points : 4 496
    Points
    4 496
    Par défaut
    Je viens de tester ça sous Access et ça fonctionne :
    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
    Sub test()
     
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
     
    cn.Provider = "Microsoft.ACE.OLEDB.12.0"
    cn.ConnectionString = "C:\test.mdb"
    cn.Open
     
    Set rs = cn.OpenSchema(adSchemaIndexes, Array(Empty, Empty, Empty, Empty, "ARTICLE"))
     
    While Not rs.EOF
       MsgBox (rs!INDEX_NAME & " - " & rs!COLUMN_NAME)
       rs.MoveNext
    Wend
     
    End Sub
    Donc ça semble correspondre, non ?
    Je précise que je lance ce code à partir d'une autre base Access
    J'ai testé aussi avec le provider "Microsoft.Jet.OLEDB.4.0"

    Je sèche

  6. #6
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    hello,
    voici un autre moyen de lire les caractérisques d'une base de données Access si tu as Access sur la machine :
    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
    oAccess est un objet Automation  "Access.Application"
    db, tdf, fld,ind sont des objets Automation dynamiques
    sNomSource est une chaîne = "f:\test\nwind.mdb"
    oAccess>>visible = OLEFaux
    oAccess>>OpenCurrentDatabase(sNomSource)
    db = oAccess>>CurrentDb() // base de données courante
    // lecture des tables
    POUR x=0 _A_ db>>TableDefs>>Count - 1
    tdf = db>>TableDefs(x)  //  table  
    SI Gauche(tdf>>Name,4) = "MSys" ALORS CONTINUER // On ne prend pas les tables Systèmes           
    Trace("           ==  ",tdf>>Name,"  ==")
    // lecture des champs
    POUR y=0 _A_ tdf>>Fields>>Count - 1
    fld = tdf>>Fields(y)  // champ 		
    Trace(fld>>Name,"  - type : ",fld>>Type)	
    FIN
    Trace("----------------------------------------------------------------")
    Trace("           ==  index   ==")
    //lecture des index
    POUR z=0 _A_ tdf>>Indexes>>Count - 1
    ind = tdf>>Indexes(z)
    Trace(ind>>Name,"  - Unique? : ",ind>>Unique," - Primaire? : ",ind>>Primary," Requis? : ",ind>>Required)
    FIN
    Trace("================================================")
    FIN
    // lecture du premier index de la table Categories
    Trace(db>>TableDefs("Categories")>>Indexes(0)>>Name)
    oAccess>>CloseCurrentDatabase()
    Amicalement, nullosse

  7. #7
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 379
    Points : 4 496
    Points
    4 496
    Par défaut
    Merci beaucoup pour ton aide Nullosse

    Je note aussi cette solution, mais le fait qu'il faille Access sur le poste est plutôt gênant
    Par exemple, sur mon poste actuel, j'ai Access 2003 uniquement et le pack office 2007 et j'ai le message d'erreur "L'objet automation 'Access.Application' n'est pas installé sur votre système."
    Chez moi avec Access 2007 je suppose que ça marchera, je testerai ce soir

    Je vais utiliser la solution suivante vu que pour l'instant j'ai besoin uniquement des clés primaires :
    --> Utilisation du QueryType adSchemaPrimaryKeys
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    mesCritères est un tableau de Variants = ["","",""]
    mesCritères[3] = "MaTableTest"
     
    rst3 = oADODb>>OpenSchema(28,mesCritères) // 28 adSchemaPrimaryKeys
    TANTQUE PAS rst3>>EOF 
    	Trace("Table; ", rst3>>Fields("TABLE_NAME")>>Value)   
    	Trace("Index; ", rst3>>Fields("COLUMN_NAME")>>Value)  
    	Trace("Colonne; ", rst3>>Fields("ORDINAL")>>Value)    
    	Trace("---")
    	rst3>>MoveNext()
    FIN
    rst3>>CLose()
    Testé avec succès sur Access 2003 et 2007

    Merci pour ton aide
    Je passe en résolu même si je n'ai pas encore tout réglé

  8. #8
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 379
    Points : 4 496
    Points
    4 496
    Par défaut
    Je reviens sur le adSchemaIndexes qui laisse perplexe ...
    5 paramètres sont demandés :

    doc OpenSchema
    doc OpenSchema/adSchemaIndexes

    Dans la 2ème doc on voit que le type du paramètre 4 (TYPE) n'est pas une chaîne mais DBTYPE_UI2, soit un entier non signé sur 2

    Pour les valeurs possibles de TYPE c'est là : Nom : DBPROPVAL_IT.png
Affichages : 494
Taille : 20,5 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mesCritères est un tableau de 5 Variants
    eTypeIndex est une entier sans signe sur 2 octets = 1    // 1 = DBPROPVAL_IT_BTREE (pour test)
    mesCritères[1] = ""
    mesCritères[2] = ""
    mesCritères[3] = ""
    mesCritères[4] = eTypeIndex
    mesCritères[5] = "MaTableTest"
    rst3 = oADODb>>OpenSchema(12,mesCritères) //12 adSchemaIndexes
    Et bien, j'ai toujours le même plantage, grrr ...

  9. #9
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    salut hpascal,
    moi aussi j'avais vu que c'était le paramètre 4 qui posait problème (si on ne transmet qu'un tableau de 3 paramètres initialisés avec des "" le openschema(12....) passe ). J'ai tenté de passer toute sorte de variants pour ce paramètre 4 mais toujours la même erreur . J'ai l'impression que Windev ne gère pas les variants sur deux octets. En mettant à la place du tableau une adresse sur structure y aurait-il un espoir ?

    Amicalement, nullosse

  10. #10
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour à tous,

    Pour une approche générique vis à vis des types de bases de données, on peut utiliser la bibliothèque ActiveX ADODB.

    Mais il existe aussi la bibliothèque ActiveX ADOX qui est conçue spécialement pour accéder au schéma d'une base de données.
    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

    Voici un document (format.doc) qui présente "Le modèle objet ADOX - Microsoft":
    http://download.microsoft.com/downlo...70939/ADOX.doc

    Citation Envoyé par Le modèle objet ADOX - Microsoft

    Définition

    L'ADOX ou "ActiveX Data Objets Extensions for Data Definition Language and Security" est un modèle objet qui est une extension du modèle objet ADO. ADOX expose des objets permettant
    • la création et la modification de structure d'une base de données (création de tables, de procédures…)
    • la gestion de la sécurité (gestion des utilisateurs et des groupes, assignation ou suppression de droits sur des objets de la base…)
    Le DDL ou "Data Definition Language" est un sous-ensemble du langage de requête SQL, qui est utilisé pour gérer la structure d'une base de données plutôt que son contenu. Ce langage contient par exemple des ordres tels que CREATE TABLE, CREATE INDEX…En utilisant ADO, il est toujours possible d'exécuter des requêtes qui modifient la structure d'une base. Une autre manière d'y parvenir est d'utiliser le modèle objet ADOX, qui expose des objets spécialement adaptés à la gestion de la structure d'une base de données.
    Le fournisseur (terme US:provider) OLEDB pour Jet supporte complètement ADOX. Certaines fonctionnalités d'ADOX peuvent très bien ne pas être supportées, cela dépend entièrement du fournisseur OLEDB utilisé. [...]. Un résumé des fonctionnalités offertes par chaque fournisseur est fourni dans le chapitre « Fonctionnalités ADOX supportées par les fournisseurs OLEDB ».
    Le but de ce document est de montrer comment utiliser le modèle objet ADOX. Les exemples seront proposés avec l'utilisation du fournisseur OLEDB pour Jet qui supporte la totalité du modèle.

    Par ailleurs, je me permets d'apporter une remarque utile quant à l'alternative Access proposée par Nullose.
    Citation Envoyé par Nullosse Voir le message
    voici un autre moyen de lire les caractérisques d'une base de données Access si tu as Access sur la machine :
    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
    oAccess est un objet Automation  "Access.Application"
    db, tdf, fld,ind sont des objets Automation dynamiques
    sNomSource est une chaîne = "f:\test\nwind.mdb"
    oAccess>>visible = OLEFaux
    oAccess>>OpenCurrentDatabase(sNomSource)
    db = oAccess>>CurrentDb() // base de données courante
    // lecture des tables
    POUR x=0 _A_ db>>TableDefs>>Count - 1
    tdf = db>>TableDefs(x)  //  table  
    SI Gauche(tdf>>Name,4) = "MSys" ALORS CONTINUER // On ne prend pas les tables Systèmes           
    Trace("           ==  ",tdf>>Name,"  ==")
    // lecture des champs
    POUR y=0 _A_ tdf>>Fields>>Count - 1
    fld = tdf>>Fields(y)  // champ 		
    Trace(fld>>Name,"  - type : ",fld>>Type)	
    FIN
    Trace("----------------------------------------------------------------")
    Trace("           ==  index   ==")
    //lecture des index
    POUR z=0 _A_ tdf>>Indexes>>Count - 1
    ind = tdf>>Indexes(z)
    Trace(ind>>Name,"  - Unique? : ",ind>>Unique," - Primaire? : ",ind>>Primary," Requis? : ",ind>>Required)
    FIN
    Trace("================================================")
    FIN
    // lecture du premier index de la table Categories
    Trace(db>>TableDefs("Categories")>>Indexes(0)>>Name)
    oAccess>>CloseCurrentDatabase()
    En fait dans le code de Nullosse (qui porte bien mal son nom ), l'appel à Access.Application sert simplement à récupérer un objet OLE Automation de type DAO.Database.

    En fait, on peut créer un objet Database sans utiliser Access, c'est très simple. Cette fois il s'agit d'utiliser la bibliothèque ActiveX DAO.

    Le point de départ est l'objet DAO.DBEngine qui peut exister dans différentes versions (35, 36, 120...).
    Un petit tour dans le registre Windows permet de savoir quelles sont les versions installées sur le PC (mais ce n'est peut être pas nécessaire de préciser le n° de version...)

    oDBEngine=allouer objet Automation "DAO.DBEngine.36" :

    Ensuite on crée un objet DAO.Database pour accéder au fichier de base de données. (ici en ouverture partagée, lecture/écriture)

    oDatabase=oDBEngine>>OpenDatabase(sNomSource,0,0) :

    et la suite du code de Nullosse fera l'affaire.

  11. #11
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    Salut JBO,

    Excellentes tes remarques et tes compléments .
    Maintenant je peux utiliser l'objet automation DAO.DBEngine à la place de l'objet Access.Application. Sur ma machine en cherchant DAO.DBEngine dans la base de registre j'en ai trouvé 3 : DAO.DBEngine.35 , DAO.DBEngine.36 et DAO.DBEngine.120
    le DAO.DBEngine.36 et le DAO.DBEngine.120 fonctionnent. Et voici le code modifié :
    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
    oDBEngine est un objet Automation "DAO.DBEngine.36"  // DAO.DBEngine.120 possible
    db, tdf, fld,ind sont des objets Automation dynamiques
    sNomSource est une chaîne = "f:\test\nwind.mdb"
    db = oDBEngine>>OpenDatabase(sNomSource,0,0)
    // lecture des tables
    POUR x=0 _A_ db>>TableDefs>>Count - 1
    tdf = db>>TableDefs(x)  //  table  
    SI Gauche(tdf>>Name,4) = "MSys" ALORS CONTINUER // On ne prend pas les tables Systèmes           
    Trace("           ==  ",tdf>>Name,"  ==")
    // lecture des champs
    POUR y=0 _A_ tdf>>Fields>>Count - 1
    fld = tdf>>Fields(y)  // champ 		
    Trace(fld>>Name,"  - type : ",fld>>Type)	
    FIN
    Trace("----------------------------------------------------------------")
    Trace("           ==  index   ==")
    //lecture des index
    POUR z=0 _A_ tdf>>Indexes>>Count - 1
    ind = tdf>>Indexes(z)
    Trace(ind>>Name,"  - Unique? : ",ind>>Unique," - Primaire? : ",ind>>Primary," Requis? : ",ind>>Required)
    FIN
     
    Trace("================================================")
    FIN
    // lecture du premier index de la table Categories
    Trace(db>>TableDefs("Categories")>>Indexes(0)>>Name)
    db>>Close()
    Amicalement, nullosse

  12. #12
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 379
    Points : 4 496
    Points
    4 496
    Par défaut
    Merci JBO pour ce complément

    J'ai donc utilisé de cette manière la collection TableDefs
    J'y ai juste ajouté la récupération des colonnes composants les indexes :

    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
    sNomSource est une chaîne = "D:\test2.mdb"
     
    oDBEngine est un objet Automation dynamique
    oDataBase est un objet Automation  dynamique
    oTable, oField, oIndex, oIndField sont des objets Automation dynamiques
     
    oDBEngine = allouer objet Automation "DAO.DBEngine.36"
    oDataBase = oDBEngine>>OpenDatabase(sNomSource,0,0)
     
    POUR i_t = 0 _A_ oDataBase>>TableDefs>>Count-1
    	oTable = oDataBase>>TableDefs(i_t)  //  table
     
            // On ignore les tables sytème et temporaires (j'en ai dans certaines bases)
    	SI Gauche(oTable>>Name,4) DANS("MSys", "~TMP") ALORS CONTINUER
     
    	Trace("")
    	Trace(oTable>>Name + " --------------------------------------")
    	Trace("RecordCount : " + oTable>>RecordCount)
     
    	Trace("")
    	Trace("Champs :")
     
    	// lecture des champs
    	POUR i_f = 0 _A_ oTable>>Fields>>Count - 1
    		oField = oTable>>Fields(i_f)
    		Trace(" " + oField>>Name, " - type : ", oField>>Type)	
    	FIN
     
    	Trace("")
    	Trace("Indexes :")
     
    	POUR i_i = 0 _A_ oTable>>Indexes>>Count - 1
     
    		oIndex = oTable>>Indexes(i_i)
    		Trace(" " + oIndex>>Name, " - Unique : ", oIndex>>Unique, " - Primaire : ", oIndex>>Primary, " Requis : ", oIndex>>Required)
     
    		POUR i_if = 0 _A_ oIndex>>Fields>>Count - 1
    			oIndField = oIndex>>Fields(i_if)
    			Trace("   composé de : " + oIndField>>Name)
    		FIN
    	FIN
     
    FIN
    oDataBase>>Close()
    Savez-vous si il y a un moyen d'avoir la liste des DAO.DBEngine installés sans chercher dans la BDR ?

  13. #13
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    tu peux les tester par les exceptions :
    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
     
    oDBEngine est un objet Automation dynamique
     QUAND EXCEPTION DANS
    oDBEngine = allouer objet Automation "DAO.DBEngine.35"
    FAIRE
    Trace ("DAO.DBEngine.35 pas installé")
    FIN
    QUAND EXCEPTION DANS
    oDBEngine = allouer objet Automation "DAO.DBEngine.36"
    FAIRE
    Trace ("DAO.DBEngine.36  pas installé")
    FIN
    QUAND EXCEPTION DANS
    oDBEngine = allouer objet Automation "DAO.DBEngine.120"
    FAIRE
    	Trace ("DAO.DBEngine.120 pas installé")
    FIN

  14. #14
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 379
    Points : 4 496
    Points
    4 496
    Par défaut
    Oui mais c'était surtout pour le proposer dans une combo pour l'utilisateur (d'un outil technique pour développeur)
    Je n'ai pas encore fait de tests mais il se peut qu'un provider fonctionne sur un poste et pas sur un autre, en fonction su système ou d'autres paramètres ...
    Dans le cas d'une sélection automatique, effectivement on peut gérer par Exception en partant du plus récent (le 120) aux plus anciens (tant que l'objet est NULL)

  15. #15
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 379
    Points : 4 496
    Points
    4 496
    Par défaut Un petit complément au sujet de DAO.DBEngine
    J'ai vérifié sur quelques VM que j'ai (qui n'ont pas de pack office installé) ce qui est installé comme version de DAO.DBEngine

    Il semblerait que de base il y ait la version DAO.DBEngine.36

    Mais si vous souhaitez accéder à un fichier Access au format 2007 ou supérieur (.accdb) il faudra la version DAO.DBEngine.120

    Pour cela il suffit d'installer le Jet Engine disponible sur cette page : http://www.microsoft.com/fr-fr/downl....aspx?id=13255

    C'est disponible en version 32bits et 64bits

    Merci encore à Nullosse et JBO pour avoir partagé leurs connaissances sur le sujet

    Pascal

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

Discussions similaires

  1. QGIS : lenteur pour afficher les listes des vues dans &quot;Ajouter une table PostGIS&quot;
    Par fafa63 dans le forum SIG : Système d'information Géographique
    Réponses: 2
    Dernier message: 11/07/2014, 19h04
  2. Réponses: 2
    Dernier message: 22/08/2013, 14h58
  3. [AC-2007] Mise à jour des champs (pas null) d'une table vers une autre table
    Par Daniel-Gérald dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/11/2009, 11h27
  4. Liste des 50 dernier enregistrement d'une table
    Par nicolash94 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/06/2007, 15h09
  5. [VBA-E]Transfere des données d'Excel dans une table Access
    Par flo83 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/04/2006, 09h22

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