Δείτε ποιούς πίνακες και ερωτήματα επιλογής έχει μία 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.
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.
·
Χρήστος
Μουρατίδης