Oledb acces table in lijst brengen

Status
Niet open voor verdere reacties.

st0ne2thedge

Gebruiker
Lid geworden
26 nov 2008
Berichten
43
ik probeer uit een acces database alle tabellen in lijst te brengen, wat niet gelukt is.

ik heb de volgende code uitgeprobeert;

Private Sub FrmUserInlog_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load

TslStatus.Text = "loading database..."

Dim fileNaam As String
Dim verbTekst As String

Dim dbVerbinding As OleDbConnection
Dim tblTabellen As DataTable

Dim restrictions() As String = New String(4) {}
restrictions(3) = "Table"

fileNaam = "GroentenEnFruit.mdb"
verbTekst = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|" & _
"" & fileNaam & ";"

'initialiseer
dbVerbinding = Nothing
tblTabellen = Nothing

Try
dbVerbinding = New OleDbConnection(verbTekst)



'tblTabellen = dbVerbinding.GetSchema("Tables", New String() {Nothing, Nothing, "TABLE"})

'For posInTabellen As Integer = 0 To tblTabellen.Rows.Count - 1
' LstTables.Items.Add(tblTabellen.Rows(posInTabellen).Item(2).ToString())
'Next

Catch ex As Exception
MessageBox.Show(ex.Source.ToString & NewLine & ex.Message, Me.Text, _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
dbVerbinding.Close()
End Try

TslStatus.Text = "Done"

End Sub


dit levert echter enkel fouten :S
 
Ja dat kan ik me wel voorstellen..

Dit is een onderdeel van een grotere code. Ik kan hier niet zoveel over zeggen. Het hangt ook een beetje van die andere code af. Wat je bijvoorbeeld als imports heb staan enzo.


Code:
verbTekst = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|" & _
[B]"" &[/B] fileNaam & ";"

er staan daar 2 aanhalingstekens achter elkaar, dat kan weg.

Code:
MessageBox.Show(ex.Source.ToString & [B]NewLine[/B] & ex.Message, Me.Text, _
MessageBoxButtons.OK, MessageBoxIcon.Error)

Maar ook bijvoorbeeld de NewLine in de code moet zijn : vbCrLf

Er kan gewoon niet zoveel over gezegt worden als er niet meer wordt gepost.
 
oplossing

ja sorry kheb men imports er niet bij gezet, waardoor waarsch wel wat verwarring ontstaan is maar ik zal onderaan de volledige code bijvoegen...

ik heb ondertussen dus een oplossing gevonden in de volgende code;

Code:
Option Strict On
Option Explicit On

Imports System.Data
Imports System.Data.OleDb
Imports Microsoft.VisualBasic.ControlChars

Public Class FrmTblTest

    Private Sub FrmTblTest_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim fileNaam As String
        Dim verbTekst As String

        Dim dbVerbinding As OleDbConnection
        Dim tblTabellen As DataTable

        fileNaam = "GroentenEnFruit.mdb"
        verbTekst = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|" & _
        "" & fileNaam & ";"

        dbVerbinding = Nothing
        tblTabellen = Nothing

        Try
            dbVerbinding = New OleDbConnection(verbTekst)
            dbVerbinding.Open()


            tblTabellen = dbVerbinding.GetSchema("Tables")

            For posInTabellen As Integer = 0 To tblTabellen.Rows.Count - 1
                If tblTabellen.Rows(posInTabellen)!TABLE_TYPE.ToString = "TABLE" Then
                    LstTables.Items.Add(tblTabellen.Rows(posInTabellen).Item(2).ToString())
                End If
            Next

        Catch ex As Exception
            MessageBox.Show(ex.Source.ToString & NewLine & ex.Message, Me.Text, _
                           MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

End Class

voila :D

en dan krijg je dus het resultaat zoals in de bijlage ;)

hoop dat er mensen zijn die er wat aan hebben

als er iets niet duidelijk is in de code vraag het maar :cool:
 

Bijlagen

Je code is verder prima, ik snap alleen niet helemaal waar je naar toe wilt met je code.
 
Je code is verder prima, ik snap alleen niet helemaal waar je naar toe wilt met je code.

wel het is natuurlijk makkelijk de tabellen in een database door het programma zelf te laten vinden (of een deel van de tabellen) voor bijvoorbeeld zoekacties nog dynamischer te maken...

Code:
            For posInTabellen As Integer = 0 To tblTabellen.Rows.Count - 1
                If [COLOR="Red"]tblTabellen.Rows(posInTabellen)!TABLE_TYPE.ToString = "TABLE"[/COLOR] Then
                    LstTables.Items.Add(tblTabellen.Rows(posInTabellen).Item(2).ToString())
                End If
            Next

door het rode gedeelte in de ifstructuur worden enkel tabellen van het type 'TABLE' in de lijst ingebracht, dus systeemtabellen en dergelijke die door acces worden aangemaakt maar niet worden weergegeven komen ook niet in de lijst te staan.

hoop dat dit een antwoord is op je vraag:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan