Δείτε ποιούς πίνακες και ερωτήματα επιλογής έχει μία Access database

Για το σκοπό αυτό θα χρησιμοποιήσουμε τη μέθοδο GetOleDbSchemaTable του αντικειμένου OleDBConnection. H μέθοδος δέχεται δύο παραμέτρους: Η πρώτη καθορίζει το κομμάτι του σχήματος της Βάσης Δεδομένων (schema) που θα επιστρέψει (π.χ. tables, views, indexes, primary keys, foreign keys, columns κλπ). Και η δεύτερη έναν array "τιμών περιορισμών" (restrictions), τύπου Object, που φιλτράρει, για το επιστρεφόμενο σχήμα, το "είδος" των πληροφοριών που θέλουμε. Για παράδειγμα, αν καθορίσουμε στην πρώτη οτι θέλουμε το κομμάτι του σχήματος που αναφέρεται σε πεδία (columns) τότε στη δεύτερη μπορούμε να ορίσουμε για ποιόν πίνακα της Βάσης επιθυμούμε (table_name).

Το επιστρεφόμενο αποτέλεσμα της μεθόδου είναι ένα DataTable. Οι γραμμές του είναι ανάλογες με το πλήθος των πληροφοριών του επιστρεφόμενου σχήματος. Π.χ. να περιέχει τόσες γραμμές όσοι είναι οι πίνακες της ΒΔ ή τόσες γραμμές όσα είναι τα πεδία ενός πίνακα.

Στην παρακάτω εικόνα γεμίζουμε το ένα ListBox με τους πίνακες και το άλλο ListBox με τα ερωτήματα επιλογής (select queries) μίας Access database.

http://users.sch.gr/mouratx/VB-NET_Tips/DataManagement/Images/GetTablesOfDatabase.gif

Imports System.Data.OleDb
Imports System.IO

'Ανοιγμα της ΒΔ.
Private Sub btnOpenDataBase_Click(ByVal sender As System.Object,_
                                  ByVal e As System.EventArgs) _
            Handles btnOpenDataBase.Click

Dim fopenDialog As New OpenFileDialog()

With fopenDialog

.CheckFileExists = True
.Filter = "Access 2000,2002,2003 (*.mdb)|*.mdb"
.FilterIndex = 1 : .Title = "
Άνοιγμα Βάσης Δεδομένων"

'Ανοιξε τη ΒΔ εφόσον έδωσε Filename και πάτησε το Ανοιγμα.
If .ShowDialog() = DialogResult.OK And _
                          .FileName.Length > 0 Then

'Δείξε στο Label μόνο το όνομα+επέκταση του αρχείου mdb.
lblDatabaseFileName.Text = Path.GetFileName(.FileName)

'Δείξε ποιούς πίνακες και ερωτήματα έχει
‘αυτή η πηγή δεδομένων (ΒΔ)
ShowTablesAndQueries(.FileName)

End If

End With

End Sub


'-----------------------------------------------------------------

'Δείχνει, στα ListBoxes, ποιούς πίνακες και
ερωτήματα Eπιλογής (Select Queries) έχει αυτή η πηγή δεδομένων (ΒΔ)
Private Sub ShowTablesAndQueries (ByVal DBPath$)

Try

'Κάνε τη σύνδεση με τη ΒΔ.
Dim objConn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;
                                                        Data Source=" & DBPath)

'Η λίστα πινάκων της ΒΔ.
Dim objTablesCatalog As DataTable

'Η λίστα select queries της ΒΔ.
Dim
objQueriesCatalog As DataTable

'Πάρε τους πίνακες και τα ερωτήματα από τη ΒΔ.
With objConn

.Open()

'πίνακες.
objTablesCatalog = .GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
                    New Object()
                      {Nothing, Nothing, Nothing, "TABLE"})

'ερωτήματα επιλογής.
objQueriesCatalog = _
   .GetOleDbSchemaTable(OleDbSchemaGuid.Tables,  
                     New Object()
                       {Nothing, Nothing, Nothing, "VIEW"})

.Close()

End With

'Δείξε τα στα αντίστοιχα Listboxes.
Dim r As DataRow

LstTables.Items.Clear()

'Πάρε τα ονόματα των πινάκων της Βάσης.
For Each r In objTablesCatalog.Rows

'το όνομα του πίνακα – στήλη 3.
LstTables.Items.Add(r.Item(2).ToString)

Next

LstQueries.Items.Clear()

'Πάρε τα ονόματα των ερωτημάτων επιλογής της Βάσης
For Each r In objQueriesCatalog.Rows

'το όνομα του ερωτήματος-στήλη 3.
LstQueries.Items.Add(r.Item(2).ToString)

Next

Catch ex As Exception

MsgBox(ex.Message)

End Try

End Sub


H 3η στήλη μίας γραμμής ( r.item(2), ) του DataTable περιλαμβάνει το όνομα του πίνακα / ερωτήματος επιλογής. Για περισσότερες πληροφορίες ανατρέξτε στο on-line help της VB.NET.

 

·         Χρήστος Μουρατίδης