VB 2008-2005 lister des tables ACCESS erreurs

Signaler
Messages postés
218
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
17 mars 2012
-
Messages postés
218
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
17 mars 2012
-
Bonjour,

En cherchant un peu partout j'ai trouvé deux façon de lister les tables d'une base de donnée ACCESS. Mais rien ne marche.

première methode j'utilise des requêtes:

j'en ai essayé plusieurs
theQueryString = "show tables"
theQueryString = "SELECT * FROM INFORMATION_SCHEMA.TABLES" ' WHERE TABLE_TYPE
mais aucune ne créé pas d'eereur
************************************************************************************
Public Function liste_table_requete(ByVal bdd As String) As Array
Dim tabloRetour
Dim tailleTabloretour
Dim countFor
Dim theConnectionString
Dim seeError
theConnectionString = connectionACCESS(bdd)
Dim theQueryString
'theQueryString = "show tables"
theQueryString "SELECT * FROM INFORMATION_SCHEMA.TABLES" ' WHERE TABLE_TYPE 'BASE TABLE'"

Dim theOleDbConnection As New OleDbConnection(theConnectionString)
Dim theOleDbCommand As OleDbCommand = theOleDbConnection.CreateCommand()
ReDim tabloRetour(0)
tailleTabloretour = -1
theOleDbCommand.CommandText = theQueryString


Try
theOleDbConnection.Open()
Catch ex As Exception
seeError = ex.ToString
End Try

Dim theOleDbDataReader As OleDbDataReader = theOleDbCommand.ExecuteReader()
Do While theOleDbDataReader.Read()
For countFor = 0 To theOleDbDataReader.VisibleFieldCount - 1
Try
'And theOleDbDataReader.GetString(countFor) <> "sysdiagrams"
If Not theOleDbDataReader.IsDBNull(countFor) And theOleDbDataReader.GetString(countFor).Length > 2 And theOleDbDataReader.GetString(countFor) <> "sysdiagrams" Then
'ajtxt("no: " & countFor & " = " & theOleDbDataReader.GetName(countFor) & ": " & theOleDbDataReader.GetString(countFor) & "; " & theOleDbDataReader.GetValue(countFor))
tailleTabloretour = tailleTabloretour + 1
ReDim Preserve tabloRetour(tailleTabloretour)
tabloRetour(tailleTabloretour) = theOleDbDataReader.GetString(countFor)
'Me.ajtxt(theOleDbDataReader.GetString(countFor))
End If
Catch ex2 As Exception
seeError = ex2.ToString
End Try
Next
Loop


theOleDbDataReader.Close()
theOleDbConnection.Close()
liste_table_requete = tabloRetour
End Function
**************************************************************************************

2 réponses

Messages postés
218
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
17 mars 2012

Oups fausse manip!!!!!!

Je continu

j'ai essayé aussi de lister les tables via les objets VB:

Il y a bien une méthode getSchema de la classe OleDbConnection pour obtenir un objet datatable mais aucune méthode ne donne le nom d'une table!

Faut t'il utiliser la classe OleDbSchemaGuid????

Quelqun connait il une méthode de la classe OleDbConnection qui renvoi un objet qui peut renvoyer une liste de nom de tables. Ou bien quelle requête utiliser?

J'ai vu plusieurs méthodes avec JAVA, VB6 ... mais aucunes ne fonctione avec VB2008 (ou 2005).


ps: ma deuxième fonction de tests:
*********************************************************************************
Public Function liste_table(ByVal bdd As String)
Dim returnArray
Dim usefull_tab
Dim i, j, k
Dim recup
Dim dt As New DataTable
Dim sdo As New System.Data.OleDb.OleDbSchemaGuid
Dim sg As New System.Guid
Dim dcol As New DataColumn
ReDim returnArray(0)

Using connection As New OleDbConnection(connectionACCESS(bdd))
Try
connection.Close()
Catch ex As Exception
End Try
Try
connection.Open()
Catch ex As Exception
connection.Close()
End Try
i = 0
Try

'****************************************************************************************************************
'****************************************************************************************************************
dt = connection.GetSchema() '.TableName(i)
'dt = connection.GetOleDbSchemaTable(sg, restric)
recup = dt.ToString

k = 0
For i = 0 To dt.Rows.Count
usefull_tab = dt.Rows(i).ItemArray
For j = 0 To UBound(usefull_tab)
ReDim Preserve returnArray(k)
returnArray(k) = usefull_tab(j)
k = k + 1
Next 'tab element
Next 'row

'For i = 0 To dt.Rows.Count
' ReDim Preserve returnArray(i)
' returnArray(i) = usefull_tab(j)
' 'returnArray(i) = dt.Rows(8).Item(j)
' 'returnArray(i) = dt.TableName.ToString
' 'returnArray(i) = dt.Rows(i).Item("TABLE_NAME").ToString()
'Next 'row

'dcol = dt.Columns.Item("tables")
'For i = 0 To dt.Columns.Count
' ReDim Preserve returnArray(i)
' returnArray(i) = dcol.Table 'dt.Columns("Tables").ToString()
'Next

'recup = connection.GetSchema("Tables").ToString
'If Len(recup) >= 1 Then
' ReDim Preserve returnArray(i)
' returnArray(i) = recup
' i = i + 1
'End If


'****************************************************************************************************************
'****************************************************************************************************************

Catch ex As Exception
End Try
connection.Close()
End Using
liste_table = returnArray
End Function
****************************************************************************
Messages postés
218
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
17 mars 2012

Il faut utiliser les classes VB2008, les recherches sont parfois presque hazardeuses, il y a tellement de possibilité mais au final ça donne ça:

Dim dt As New DataTable
...
dt = connection.GetSchema(System.Data.OleDb.OleDbMetaDataCollectionNames.Tables)


For i = 0 To dt.Rows.Count
usefull_tab = dt.Rows(i).ItemArray

If usefull_tab(3) = "TABLE" Then
ReDim Preserve returnArray(i)
returnArray(i) = usefull_tab(2)
End If
Next 'row

[System.Data.OleDb.OleDbMetaDataCollectionNames.Tables] est la constante a utiliser