
Imports System.Data.OleDb

Public Class FTestDB

    Dim MiConexion As New OleDbConnection
    Dim MiDatos As New DataSet
    Dim NombreTablaEnDB As String

    Private Sub CargarLaTabla()


        'Dim NombreDBCompleto As String = "D:\Tmp\TestAccesDBSimpleConMostrarSAVE\MonStock2003.mdb"   ' MiExistencia  Access antes 2007
        'MiConexion.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" & NombreDBCompleto & ";"  ' Exécuter en x86

        Dim NombreDBCompleto As String = "D:\Tmp\TestAccesDBSimpleConMostrarSAVE\MonStock2013.accdb"   ' MiExistencia  Access desde 2007
        MiConexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & NombreDBCompleto & ";"  ' Ejecutar en x64


        Dim UnaTabla As New DataTable
        Dim Consulta As String
        NombreTablaEnDB = "TProduit"   ' este es LaTablaQueMeGusta

        Consulta = "SELECT * FROM " & NombreTablaEnDB

        Dim MiAdapter As New OleDbDataAdapter(Consulta, MiConexion)
        MiAdapter.Fill(UnaTabla)
        UnaTabla.TableName = NombreTablaEnDB
        MiDatos.Tables.Add(UnaTabla)
        DGVTest.DataSource = UnaTabla

        MiAdapter.Dispose()

        'DGVTest es un DataGridView

        DGVTest.DataSource = UnaTabla  ' Para ejemplo, todos campos

        'CBTest es un ComboBox

        CBTest.DataSource = UnaTabla
        CBTest.DisplayMember = "Article" ' este es el NombredelCampoQueMeGustaAqui, articulo

        'LBTest es un ListBox

        LBTest.DataSource = UnaTabla
        LBTest.DisplayMember = "Article" ' este es ElNombredelCampoQueMeGustaAqui, articulo

        'TBTest es un TextBox

        TBTest.DataBindings.Add("Text", UnaTabla, "Stock") ' este es ElNombredelCampoQueMeGustaAqui, este es la cuantidad de articulos

        MiAdapter.Dispose()
        MiConexion.Close()
        MiConexion.Dispose()

    End Sub

    ' El bloque de gestión de lectura. Un solo procedimiente evento responde a 4 fuentes de Click : BPrimero, BAnterior, BSiguiente y BUltimo
    Private Sub LecturaCircular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BUltimo.Click, BAnterior.Click, BSiguiente.Click, BPrimero.Click
        ' No es necesario intentar un movimiento si el DataSet no contiene ninguna tabla.
        If MiDatos.Tables.Count > 0 Then
            ' El BindingContext pertenece a un contenedor, el formulario en este caso.
            With Me.BindingContext(MiDatos.Tables(NombreTablaEnDB))
                ' Modificacion de la propiedad Position segun el boton seleccionado.
                Select Case sender.Name
                    Case "BPrimero"
                        .Position = 0
                    Case "BAnterior"
                        If .Position = 0 Then
                            .Position = .Count - 1              ' Lectura circular (como un reloj pero al revés)
                        Else
                            .Position -= 1
                        End If
                    Case "BSiguiente"
                        If .Position = .Count - 1 Then
                            .Position = 0                       ' Lectura circular (como un reloj)
                        Else
                            .Position += 1
                        End If
                    Case "BUltimo"
                        .Position = .Count - 1
                End Select
            End With
        End If
    End Sub

    Private Sub BCargar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BCargar.Click
        MiDatos.Reset()
        DGVTest.DataSource = Nothing
        CBTest.DataSource = Nothing
        LBTest.DataSource = Nothing
        TBTest.DataBindings.Clear()
        CargarLaTabla()
    End Sub

End Class

