Recuperer le nom des tables d'une BdD Oracle via odbc [Résolu]

Messages postés
7
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
11 février 2005
- - Dernière réponse : Poncharello
Messages postés
7
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
11 février 2005
- 3 sept. 2004 à 12:10
Bien le bonjour,

J'accede à une BdD Oracle via ODBC sur mon appli VB.
Je cherche à récupérer le nom des tables et des champs sans les connaitre a priori :
Ca peut être pratique pour une appli portable.

J'arrive à me connecter à la base:
'ADO:
Set gConnection = New Connection
gConnection.Open sADOConnect

Sur SQL+, on peut acceder à ces infos grace aux champs TNAME et CNAME des tables systèmes TAB et
COL mais une requete en VB me retourne aucun champs comme si il n'y avait pas de table ce qui n'est bien sur
pas le cas!

Qui a des idées?
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
7
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
11 février 2005
3
Merci
Merci,
Avec cette solution, on obtient tout un tas de tables divers et variées de la bdd. Probablement des tables systèmes (et encore...).

Par contre, sur une bdd ORACLE, il existe des tables qui contiennent les bonnes info.

Pour info, je mets mon code ci-dessous. Il s'agissait de trouver le nom des tables d'une bdd pour les mettre dans une combo:

Public gConnection As ADODB.Connection

    Dim sConnect    As String
    Dim sADOConnect As String
    Dim rs As New ADODB.Recordset
       
    MousePointer = vbHourglass

    sConnect = "DSN= 'monDSN';"
    sConnect = sConnect & "UID= 'monUID';"
    sConnect = sConnect & "PWD= 'monPWD';"
    sADOConnect = "PROVIDER=MSDASQL;" & sDSN & sConnect

    Set gConnection = New ADODB.Connection
    gConnection.Open sADOConnect

    MousePointer = vbDefault

    ' Remplissage du combo ChoixTable
    rs.Open " SELECT TNAME FROM TAB", gConnection
    ChoixTable.Clear
    
    If rs.EOF = False Then
        Do Until rs.EOF
            ChoixTable.AddItem rs![TNAME]
            rs.MoveNext
        Loop
    Else
        MsgBox "La base de données n'a pas de table accessible aux utilisateur"
        gConnection.Close
        End
    End If
    
    rs.Close
...

gConnection.close

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 220 internautes nous ont dit merci ce mois-ci

Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
10
0
Merci
Salut,

Les bdd Oracle c pas trop mon trip mais si tu utilises ADODB, tu peux essayer ça après t'être connecté à ta base :

Dim rst As New ADODB.Recordset
Dim fld As ADODB.Field

'Ouverture Recordset
rst.Open "select * from TaTable", gConnection

' Nom des champs (ou colonnes)
For Each fld In rst.Fields
MsgBox fdl.Name
Next

Cordialement, CanisLupus

Tous les glands ne deviennent pas des chênes mais tous les chênes ont été des glands
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
10
0
Merci
AIe, tite erreur, c pas fdl.name mais bien fld.name.

Cordialement, CanisLupus

Tous les glands ne deviennent pas des chênes mais tous les chênes ont été des glands
Messages postés
7
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
11 février 2005
0
Merci
Merci.

Ton code marche bien pour recuperer les champs d'une table dont on connait le nom.

Reste à trouver les tables d'une DB...
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
10
0
Merci
Pour trouver les tables d'une BD en ADO, il faut passer par ADOX, tu as toutes les infos ICI

N'oublie pas de cliquer sur réponse acceptée si ça te convient.

Cordialement, CanisLupus

Tous les glands ne deviennent pas des chênes mais tous les chênes ont été des glands
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
10
0
Merci
Le code en question c'est :

Sub ADOListTables()
   Dim cat As New ADOX.Catalog
   Dim tbl As ADOX.Table
   ' Ouverture du catalogue
   cat.Activeconnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=.\Comptoir.mdb;"
   ' Création d'une boucle dans les tables de la 
base de données et impression du nom des tables
   For Each tbl In cat.Tables
      If tbl.Type <> "VIEW" Then Debug.Print tbl.Name
   Next
End Sub


A toi de l'adapter pour ta base Oracle.

Cordialement, CanisLupus

Tous les glands ne deviennent pas des chênes mais tous les chênes ont été des glands