VB 2008-2005 lister des tables ACCESS erreurs

l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012 - 4 déc. 2009 à 14:30
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012 - 7 déc. 2009 à 12:41
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

l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
4 déc. 2009 à 14:38
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
****************************************************************************
0
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
7 déc. 2009 à 12:41
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
0
Rejoignez-nous