
'Imports System.Data.OleDb
Imports System.Data.SQLite

Public Class FTestDB

    Dim MiConexion As New SQLiteConnection
    Dim MisDatos As New DataSet
    Dim NombreTablaEnDB As String
    Dim MiComando As New SQLiteCommand

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

    Private Sub BCargarAdapter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BCargarAdapter.Click
        CargarLaTablaConAdapter()
    End Sub

    Private Sub BCargarDataReader_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BCargarDataReader.Click
        CargarLaTablaConDataReader()
    End Sub

    Private Sub ParametroConexion()

        '     Dim RutaYNombreDB As String = "D:\Tmp\TestSQLite\Owner.db"
        Dim RutaYNombreDB As String = "Owner.db"   ' La DB es puesta en la carpeta Bin del proyecto
        MiConexion.ConnectionString = "Data Source=" & RutaYNombreDB & ";"
        NombreTablaEnDB = "TProduits"   ' este es LaTablaQueMeGusta

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

        'Dim RutaYNombreDB As String = "D:\Tmp\TestAccesDBSimpleConMostrar\MonStock2013.accdb"   ' MiExistencia
        'MiConexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & RutaYNombreDB & ";"  ' Ejecutar en x64
    End Sub


    Private Sub CargarLaTablaConDataReader()

        If MisDatos.Tables.Count > 0 Then  ' Para muchas pruebas
            MisDatos.Tables.Clear()
        End If

        ParametroConexion()
        MiConexion.Open()

        Dim UnaTabla As New DataTable

        ' Connexion effective 
        MiComando = MiConexion.CreateCommand()
        MiComando.CommandType = CommandType.Text
        MiComando.CommandText = "SELECT * FROM " & NombreTablaEnDB

        Dim UnosDatos As SQLiteDataReader
        UnosDatos = MiComando.ExecuteReader()
        ' crear colunas en  DataTabla
        For C As Integer = 0 To UnosDatos.FieldCount - 1
            UnaTabla.Columns.Add(UnosDatos.GetName(C))
        Next

        UnaTabla.TableName = NombreTablaEnDB

        Do While UnosDatos.Read
            UnaTabla.Rows.Add(UnosDatos.Item(0), UnosDatos.Item(1), UnosDatos.Item(2))
        Loop
        UnosDatos.Close()

        MisDatos.Tables.Add(UnaTabla)

        MiConexion.Close()

        MostrarDatos()

    End Sub

    Private Sub MostrarDatos()

        For Each C As Control In Me.Controls  ' Para muchas pruebas
            Try
                C.DataBindings.Clear()
            Catch
            End Try
        Next

        DGVTest.DataSource = MisDatos.Tables(NombreTablaEnDB)

        CBTest.DataSource = MisDatos.Tables(NombreTablaEnDB)
        CBTest.DisplayMember = "Produit"

        LBTest.DataSource = MisDatos.Tables(NombreTablaEnDB)
        LBTest.DisplayMember = "Produit"

        TBTest.DataBindings.Add("Text", MisDatos.Tables(NombreTablaEnDB), "Stock")
    End Sub

    Private Sub CargarLaTablaConAdapter()


        If MisDatos.Tables.Count > 0 Then  ' Para muchas pruebas
            MisDatos.Tables.Clear()
        End If

        ParametroConexion()

        Dim UnaTabla As New DataTable
        Dim Consulta As String
  
        Consulta = "SELECT * FROM " & NombreTablaEnDB

        Dim MiAdapter As SQLiteDataAdapter = New SQLiteDataAdapter(Consulta, MiConexion)

        MiAdapter.Fill(UnaTabla)
        UnaTabla.TableName = NombreTablaEnDB
        MisDatos.Tables.Add(UnaTabla)
  
        MiAdapter.Dispose()

        MiConexion.Close()

        MostrarDatos()

    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 MisDatos.Tables.Count > 0 Then
            ' El BindingContext pertenece a un contenedor, el formulario en este caso.
            With Me.BindingContext(MisDatos.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

End Class

