Recuperer le nom des tables d'une BdD Oracle via odbc

Résolu
Poncharello Messages postés 7 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 11 février 2005 - 1 sept. 2004 à 17:11
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?

6 réponses

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
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
3
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
1 sept. 2004 à 20:40
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
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
1 sept. 2004 à 20:41
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
0
Poncharello Messages postés 7 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 11 février 2005
2 sept. 2004 à 10:24
Merci.

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

Reste à trouver les tables d'une DB...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
2 sept. 2004 à 20:29
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
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
2 sept. 2004 à 20:32
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
0