miércoles, 30 de noviembre de 2011

Empaquetar aplicaciones

Para crear paquetes de distribución de aplicaciones, se puede utilizar el entorno de programación, o aplicaciones externas.

Entre las aplicaciones GPL disponibles destaca
Inno Setup http://www.jrsoftware.org/isinfo.php
Enlace de descarga del ejecutable -> http://mlaan2.home.xs4all.nl/ispack/isetup-5.4.2.exe

Sobre esta aplicación se pueden ejecutar otras aplicaciones que facilitan la creación de los paquetes de distribución:

IsTool -> http://sourceforge.net/projects/istool/files/1.%20ISTool/release-5.2.1/istool-5.2.1.exe/download
InnoIDE -> http://www.innoide.org/

jueves, 24 de noviembre de 2011

Try Catch Finally


Control extructurado de errores (excepciones) mediante Try Catch Finally

https://docs.google.com/presentation/d/15nXdmA8MPU-EtWKsMemRCxFMBCELyPEWGgyATyErRek/edit





Una vez subsanados los errores de sintaxis en tiempo de diseño, conocidos como errores de compilación. La aplicación ya se puede compilar.

Sin embargo pueden seguir existiendo errores, que al no deberse a mala sintaxis no son detectables por el IDE.

Estos errores se detectarán al ejecutar la aplicación desde el IDE, y provocan que la ejecución de la aplicación se detenga de forma no deseada.

Los errores detectados en esta etapa se conocen como errores en tiempo de ejecución o excepciones.

Los errores en tiempo de ejecución, usualmente se pueden solucionar reescribiendo el código de la parte afectada.

ej.En una división, en la que se producirá una excepción si se intenta dividir entre cero.

La mayor parte de este tipo de errores se puede solucionar, incluyendo en el código validaciones previas a la ejecución del código que provoca el error.

Sin embargo a pesar de validar los datos que se introducen, se puede dar el caso de que se produzcan excepciones.

Un ejemplo sería el caso de un fichero dañado o incompatible.

Para obtener un listado de las excepciones se puede acceder a la web de MSDN:
La clase Exception representa todas las excepciones que se producen durante la ejecución de una aplicación
http://msdn.microsoft.com/es-es/library/system.exception.aspx

En concreto las excepciones que más nos interesan son las de sistema:
La clase SystemExcepciton es la clase base para las excepciones predefinidas en el espacio de nombres System
http://msdn.microsoft.com/es-es/library/system.systemexception.aspx

Entre ellas podemos encontrar:

Fichero inexistente (FileNotFoundException)
Excepción que se produce cuando se produce un error al intentar tener acceso a un archivo que no existe en el disco.
http://msdn.microsoft.com/es-es/library/system.io.filenotfoundexception.aspx

División por cero (DivideByZeroException)
Excepción que se produce cuando se intenta dividir un valor entero o decimal entre cero.
http://msdn.microsoft.com/es-es/library/system.dividebyzeroexception.aspx

Asignación incorrecta (InvalidCastException)
Indica una conversión de tipos o una conversión explícita de otra naturaleza que no es válida.
http://msdn.microsoft.com/es-es/library/system.invalidcastexception.aspx

Indice de matriz incorrecto (IndexOutOfRangeException)
Se produce cuando se intenta tener acceso a un elemento de una matriz con un índice que está fuera de los límites de la matriz.
http://msdn.microsoft.com/es-es/library/system.indexoutofrangeexception.aspx

La forma de tratar estas excepciones es a través de

Try ..... Catch .... Finally

Esta instrucción permite capturar las excepciones y ejecutar las instrucciones deseadas para controlarlas.

Es posible indicar vários bloques Catch, de los cuales solo se ejecutará uno, comenzando a evaluarlos por el primero.

Se aconseja indicar en el primer bloque Catch las excepciones más concretas y en los subsiguentes las más genéricas.

Bibliografía
MSDN.
Wikipedia.

viernes, 18 de noviembre de 2011

Implementación de ayudas con HelpProvider

Uso del control HelpProvider para implementar ayudas en programas Visual Basic.

El uso de este control permite mostrar información contextual sobre los controles de un formulario de forma sencilla.

Cuando se usa este control, se activa un botón en la barra de título del formulario con un interrogante. Al pulsar en ese interrogante se cambia el icono del ratón, y pulsando en cualquier control se muestra una ayuda contextual acerca del funcionamiento de ese control.



El mismo efecto produce pulsar la tecla F1 sobre un control que tenga el foco activado.

Este control está pensado para ser usado en cuadros de diálogo, por lo que exige el cumplimiento de unos requisitos.

1 - Activar el botón de ayuda
HelpButton = True

2 - Desactivar el botón Minimizar
Me.MinimizeBox = False

3 - Desactivar el botón Maximizar
Me.MaximizeBox = False

NOTA: En caso de no desactivar los botones de minimizar y maximizar, el botón de ayuda (HelpButton) no se mostrará aunque se haya activado.


    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.MaximizeBox = False
        Me.MinimizeBox = False
    End Sub

En caso de realizar el proceso correctamente los cuadros que aparecen en la parte superior derecha del formulario se cambian. de la siguiente manera:

Estado originalTras aplicar cambios



Una vez realizadas estas operaciones ya se pueden asignar los valores deseados a las propiedades de los controles.

Tras insertar el control HelpProvider, en todos los controles aparecerán cuatro nuevas propiedades:

  1. HelpKeyword.
  2. HelpNavigator.
  3. HelpString.
  4. ShowHelp.

El comportamiento de la ayuda contextual variará dependiendo de los valores asignados a estas propiedades.

En primer lugar, si se asigna el valor False a la propiedad ShowHelp, no se mostrará ayuda contextual.




Por lo tanto para poder usar este control se debe asignar el valor True a la propiedad ShowHelp

























    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        HelpButton = True
        Me.MaximizeBox = False
        Me.MinimizeBox = False
    End Sub

Otros usos de Visual Basic


Presentación otros usos de Visual Basic

https://docs.google.com/presentation/d/1SeDRmuJhFYupB0h-9sM1Vwqe1WrXjtMPmKN_kWnyIfo/edit


jueves, 17 de noviembre de 2011

Implementación de ayudas con Help.ShowHelp

Implementación de ayudas con Help.ShowHelp

Net Framework implementa la clase Help que permite gestionar los ficheros de ayuda, tanto ficheros de tipo chp, hlp como html.

Estos ejemplos se realizarán con el fichero con un fichero CHM, creado con HelpNDoc.







        'Abre la ayuda en contenido
        Help.ShowHelp(Me, "c:/ejemplo.chm")








        'Abre la ayuda en indice
        Help.ShowHelpIndex(Me, "c:/ejemplo.chm")









        'Abre la ayuda en indice
        Help.ShowHelp(Me, "c:/ejemplo.chm", HelpNavigator.Index)








        'Abre la ayuda en búsqueda
        Help.ShowHelp(Me, "c:/ejemplo.chm", HelpNavigator.Find, "")







        'Abre la ayuda en topic
        Help.ShowHelp(Me, "c:/ejemplo.chm", HelpNavigator.TopicId, "7")







        'Abre la ayuda en Keyword
        'si el keyword esta asignado a varios topics abre la ventana de seleccion
        Help.ShowHelp(Me, "c:/ejemplo.chm", HelpNavigator.KeywordIndex, "numeros")


miércoles, 9 de noviembre de 2011

Diagrama de Gantt

Enlace a la presentación sobre el diagrama de Gantt

https://docs.google.com/presentation/d/1Gi2OCTg24fdiLPWMud6Z5NEytPVByklc68LPlplWF3Q/edit

Rellenar un DataGridView

En este ejemplo se muestra como rellenar un DataGridView, a partir de una tabla, sin haber creado con anterioridad las columnas.

Se parte de un formulario en el que se incluye un DataGridView, sin configurar ninguna columna.

Tanto las columnas como las filas serán anexadas mediante código.



El resultado final será un DataGridView, que contendrá todas las columnas que devuelva la consulta a la base de datos. Incluyendo la posibilidad de añadir otras mediante código.


ACLARACIÓN:


En el caso de conocer cuantas columnas nos devolverá la consulta se pueden añadir de una en una con la instrucción DataGridView1.Columns.Add, pasandole como parámetro el nombre de cada columna, y el texto que aparecerá en la cabecera de la misma.
Suele ser habitual que ambos sean iguales, aunque no es imprescindible.

Con esto se puede recuperar el nombre de la tabla:
DataGridView1.Columns.Add(lector.GetName(0), lector.GetName(0))

O también se puede asignar el nombre que se desee:
DataGridView1.Columns.Add("Nombre columna", "Texto Cabecera Columna")

En caso de no conocer cuantas columnas devolverá la consulta, es posible realizar un bucle que añada columnas hasta alcanzar el valor indicado por el lector, en la propiedad FieldCount.

For i As Integer = 0 To lector.FieldCount - 1
      DataGridView1.Columns.Add(lector.GetName(i), lector.GetName(i))
Next

En cuanto al proceso de rellenar las filas se pueden añadir como se mostró en el ejemplo anterior o utilizando una tabla de cadenas de caracteres.
En el detalla se muestra esta solución:

 DataGridView1.Columns.Add("Importe", "Importe")
        Dim tabla_cadenas(lector.FieldCount) As String
        While lector.Read()
            'Se añade una fila al grid con un string por cada columna
            For j As Integer = 0 To lector.FieldCount - 1
                tabla_cadenas(j) = lector.GetValue(j).ToString
            Next
            DataGridView1.Rows.Add(tabla_cadenas)
        End While

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Ejemplo de código
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

'1 - Importar espacio de nombres
Imports System.Data.OleDb

Public Class Form5

    Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '2 - crear conexion
        Dim conexion As New OleDbConnection

        '3 - cadena de conexion
        conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\factura_cliente.accdb;Persist Security Info=False;"

        '4 - abrir conexion
        conexion.Open()

        '5 - crear la sentencia SQL
        Dim comando_SQL As New OleDbCommand("SELECT * FROM Lineas_factura WHERE Numero_factura_fk = " & Form2.factura_numero, conexion)

        '6 - se crea el reader
        Dim lector As OleDbDataReader = comando_SQL.ExecuteReader

        ' *****************************************************************
        '7 - Mostrar valores del reader en el DataGridView
        DataGridView1.Rows.Clear()
        'DataGridView1.Columns(0).HeaderText = lector.GetName(0)
        'DataGridView1.Columns.Add(lector.GetName(0), lector.GetName(0))
        'DataGridView1.Columns.Add(lector.GetName(1), lector.GetName(1))
        'DataGridView1.Columns.Add(lector.GetName(2), lector.GetName(2))
        'DataGridView1.Columns.Add(lector.GetName(3), lector.GetName(3))
        'DataGridView1.Columns.Add(lector.GetName(4), lector.GetName(4))

        'Otra opción de añadir columnas
        For i As Integer = 0 To lector.FieldCount - 1
            DataGridView1.Columns.Add(lector.GetName(i), lector.GetName(i))
        Next

        DataGridView1.Columns.Add("Importe", "Importe")

        Dim tabla_cadenas(lector.FieldCount) As String

        While lector.Read()
            'Se añade una fila al grid con un string por cada columna
            'DataGridView1.Rows.Add(lector.GetValue(0), lector.GetValue(1), lector.GetValue(2), lector.GetValue(3), lector.GetValue(4))

            For j As Integer = 0 To lector.FieldCount - 1
                tabla_cadenas(j) = lector.GetValue(j).ToString
            Next

            DataGridView1.Rows.Add(tabla_cadenas)

        End While

        'punto final cerrar conexion
        conexion.Close()

        Dim total_factura As Single
        Dim parcial_factura As Single

        'Se restan 2 a DataGridView1.Rows.Count para descartar la línea en blanco
        For i As Integer = 0 To DataGridView1.Rows.Count - 2
            parcial_factura = CSng(DataGridView1.Rows(i).Cells(3).Value) * CSng(DataGridView1.Rows(i).Cells(4).Value)
            total_factura += parcial_factura
            DataGridView1.Rows(i).Cells(5).Value = parcial_factura
        Next

        '**********************************************************************

        TextBox1.Text = Form2.factura_numero
        TextBox2.Text = Form2.factura_fecha
        TextBox4.Text = Form1.codigo_cliente
        TextBox5.Text = Form1.dato_Nombre_fiscal
        TextBox6.Text = Form1.dato_Cif
        TextBox7.Text = Form1.dato_Direccion
        TextBox3.Text = Form1.dato_Nombre_comercial
        TextBox5.Text = Form1.dato_Nombre_fiscal

        TextBox8.Text = total_factura.ToString
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Form6.Show()
    End Sub
End Class

martes, 8 de noviembre de 2011

Ejercicio final de curso - Enunciado


Ejercicio final de curso

Sois autónomos y tenéis una empresa de programación en la que sois el único empleado.

Un día os llama por teléfono el jefe de camareros del “Bar Arosa”, indicándoos que han conseguido una buena oferta por un TPV, pero no tiene programa, y que pretenden cambiar la caja registradora actual por este dispositivo.

Le ha indicado un conocido común que os dedicáis a la programación y os quiere solicitar la creación de una aplicación para la venta en barra de la cafetería.

Las aplicaciones comerciales le vienen un tanto grandes, y os pide un desarrollo a medida.

Os solicita un programa con las siguientes características:
Que sea fácil de usar, ya que lo tienen que utilizar los camareros y los que actualmente trabajan no tienen conocimientos informáticos, y están acostumbrados al uso de la caja registradora.
El programa será muy sencillo, solo tiene que permitir realizar las ventas y controlar el stock, también deberá permitir reimprimir tickets en caso de que el cliente así lo solicite.
Muestra su preocupación por el tema de los permisos de los usuarios y también por las posibles pérdidas de datos.
No es capaz de concretaros si se utilizará lector de código de barras o no, ni si será preciso realizar algún tipo de listado.

Puntuación
Concepto
2
Pseudocódigo en un fichero tipo Word
0,5
Añadir Clientes, Artículos y Proveedores
0,5
Modificar Clientes, Artículos y Proveedores
0,5
Eliminar Clientes, Artículos y Proveedores
0,5
Eliminar tickets, facturas
0,5
Imprimir tickets venta
0,5
Consultar ticket venta – factura compra
0,5
Listado de stock de artículos, cliente y proveedor a pantalla
0,5
Exportación de listados de stock a ficheros de texto
0,5
Listado 347 para clientes y proveedores, pantalla y texto
1
Permisos de usuario
1
Interfaz táctil
0,5
Copia de seguridad de base de datos a FTP
1
Facilidad de uso


Nota:
Cualquier aclaración sobre el contenido del enunciado se solicitará y será respondida a través del blog, estando disponible una entrada para cada alumno, a fin de personalizar las respuestas a cada caso.
Las consultas de tipo genérico podrán ser respondidas en clase.





Buenos días, soy el señor Arosa, propietario del Bar Arosa.


Acabo de recibir a mi jefe de camareros, al que le pedí que se pusiese en contacto con ustedes para indicarles que me hiciesen un programa para el TPV que he comprado de segunda mano.


En concreto el modelo que he adquirido es un Toshiba ST-A10
Características TPV Toshiva ST-A10


He tenido la oportunidad de recibir demostraciones de diversos programas de TPV comerciales, y se me hacen demasiado grandes, con demasiadas funciones.


Lo que necesito es un programa que permita a los camareros que vendan de forma sencilla.


Se imprimirán todos los tickets de venta.


Me gustaría que fuese fácilmente configurable, pudiendo asignar a cada artículo una posición en la pantalla.


También me interesaría poder obtener información de las últimas compras, sin tener que andar llamando por teléfono a mi gestoría que es quien tiene todas las facturas.


También me interesa poder saber el stock de un artículo a seleccionar, así como los artículos y cantidades vendidas a un cliente o compradas a un proveedor

Rellenar un DataGridView


Rellenar un DataGridView a partir de una base de datos Microsoft Access mediante un DataReader.

La intención es poder leer y filtrar los datos almacenados en una tabla de la Base de Datos.

Es resultado final esperado es el mostrado en la siguiente imagen:



Para ello se parte de un formulario en el que se incluyen dos Labels y dos Textbox para indicar el filtro a aplicar.

También se incluye un Button para aplicar el filtro.

Finalmente para albergar los datos se utiliza un control DataGridView.

Para simplificar el proceso y dado que se conoce de antemano el número de campos que devolverá la consulta a la Base de Datos, se añaden las columnas adecuadas en tiempo de diseño.


El proceso para agregar las columnas, implica acceder a las propiedades del control DataGridView1, Seleccionar la opción Columns, en la ventana que aparece, pulsar el botón Agregar.


Aparece una nueva ventana (Agregar columna), en la que se indicarán dos datos:
Nombre - Será el nombre de la columna, que nos servirá para acceder a ella mediante código.
Texto del encabezado - Será el texto que aparecerá en la cabecera de la columna.
Suele ser normal aplicar el mismo valor a estas dos propiedades, definiendo tanto el nombre como el texto al mismo valor.


El código para agregar filas al DataGrid es el siguiente:


    '7 - Mostrar valores del reader en el DataGridView
        DataGridView1.Rows.Clear()


        While lector.Read()
            'Se añade una fila al grid con un string por cada columna
            DataGridView1.Rows.Add(lector.GetValue(0), lector.GetValue(1), lector.GetValue(2), lector.GetValue(3), lector.GetValue(4))
        End While


En este código primero se eliminan las filas existentes.
DataGridView1.Rows.Clear()



Luego se ejecuta un bucle hasta que se llegue al final del lector que es un DataReader.
While lector.Read()


Dentro del bucle While se ejecuta el procedimiento Add que permite añadir filas en el DataGridView.
Recibe como parámetros una variable de tipo objeto con el contenido de cada celda de la fila a añadir.

DataGridView1.Rows.Add(lector.GetValue(0), lector.GetValue(1), lector.GetValue(2), lector.GetValue(3), lector.GetValue(4))


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Ejemplo de código
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


'1 - Importar espacio de nombres
Imports System.Data.OleDb

Public Class Form1

    Public codigo_cliente As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        '2 - crear conexion
        Dim conexion As New OleDbConnection

        '3 - cadena de conexion
        conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\factura_cliente.accdb;Persist Security Info=False;"

        '4 - abrir conexion
        conexion.Open()

        '5 - crear la sentencia SQL
        Dim comando_SQL As New OleDbCommand("SELECT * FROM Clientes WHERE Id_cliente BETWEEN " & TextBox1.Text & " AND " & TextBox2.Text & " ORDER BY Id_cliente", conexion)

        '6 - se crea el reader
        Dim lector As OleDbDataReader = comando_SQL.ExecuteReader

        ' *****************************************************************
        '7 - Mostrar valores del reader en el DataGridView
        DataGridView1.Rows.Clear()

        While lector.Read()
            'Se añade una fila al grid con un string por cada columna
            DataGridView1.Rows.Add(lector.GetValue(0), lector.GetValue(1), lector.GetValue(2), lector.GetValue(3), lector.GetValue(4))
        End While

        '**********************************************************************

        'punto final cerrar conexion
        conexion.Close()
    End Sub
End Class

lunes, 7 de noviembre de 2011

Ejercicio final de curso - Iván Souto Groba

Ejercicio final de curso - Iván Souto Groba

Ejercicio final de curso - Irene Soriano Hernández

Ejercicio final de curso - Irene Soriano Hernández

Ejercicio final de curso - Cristina Rodriguez Juncal

Ejercicio final de curso - Cristina Rodriguez Juncal

Ejercicio final de curso - Ana Isabel Martínez Juste

Ejercicio final de curso - Ana Isabel Martínez Juste

Ejercicio final de curso - Enrique Sinuhé Martínez Gradín

Ejercicio final de curso - Enrique Sinuhé Martínez Gradín

Ejercicio final de curso - Leopoldo José González Espinel

Ejercicio final de curso - Leopoldo José González Espinel

Ejercicio final de curso - Gonzalo Charro Graña

Ejercicio final de curso - Gonzalo Charro Graña

Ejercicio final de curso - Carlos Casa Gabian

Ejercicio final de curso - Carlos Casa Gabian

Ejercicio final de curso - María Jesús Barros Fernández

Ejercicio final de curso - María Jesús Barros Fernández

Ejercicio final de curso - Esteban Bacelo Souto

Ejercicio final de curso - Esteban Bacelo Souto

miércoles, 2 de noviembre de 2011

Añadir datos a una tabla de Access







'1 - Importar espacio de nombres
Imports System.Data.OleDb

Public Class Form4

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '2 - crear conexion
        Dim conexion As New OleDbConnection

        '3 - cadena de conexion
        conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\factura_cliente.accdb;Persist Security Info=False;"

        '4 - abrir conexion
        conexion.Open()

        '5 - crear la sentencia SQL
        Dim comando_SQL As New OleDbCommand("INSERT INTO Clientes (Nombre_comercial, Nombre_fiscal, Cif, Dirección) VALUES ('" & TextBox2.Text & "', '" & TextBox3.Text & "', '" & TextBox4.Text & "', '" & TextBox5.Text & "')", conexion)

        '6 - se crea el reader
        Dim registros_afectados As Integer = comando_SQL.ExecuteNonQuery

        Button1.Enabled = False

        conexion.Close()

        MessageBox.Show("El número de registros añadidos ha sido: " & registros_afectados.ToString)
    End Sub
End Class

Eliminar un registro de una base de datos

En este ejemplo se indica por una parte como leer y mostrar los datos de una tabla, de uno en uno.
Para lo cual en vez de leer del DataReader mediante un bucle While, se ejecuta una lectura del DataReader por cada pulsación del botón.


'7 - Mostrar valores del reader
        lector.Read()
        'Se añaden datos a los textbox
        TextBox1.Text = lector.GetValue(0).ToString
        TextBox2.Text = lector.GetValue(1).ToString
        TextBox3.Text = lector.GetValue(2).ToString
        TextBox4.Text = lector.GetValue(3).ToString
        TextBox5.Text = lector.GetValue(4).ToString


Por otro lado, se muestra como tratar el proceso de eliminación de un registro, intentando evitar que se eliminen datos accidentalmente, mostrando un MessageBox que solicita confirmación de la eliminación del registro, pero que tiene asignado por defecto el botón de cancelar, para evitar que una  pulsación errónea provoque la eliminación accidental de un registro.

MessageBox.Show("¿De verdad desea eliminar el cliente número " & TextBox1.Text & "?", "Eliminación de registro", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)

Por último se muestra como utilizar una consulta de eliminación.


Dim comando_SQL As New OleDbCommand("DELETE FROM Clientes WHERE Id_cliente = " & TextBox1.Text, conexion)






- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CÓDIGO
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


'1 - Importar espacio de nombres
Imports System.Data.OleDb

Public Class Form3


    Public lector As OleDbDataReader


    Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        '2 - crear conexion
        Dim conexion As New OleDbConnection

        '3 - cadena de conexion
        conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\factura_cliente.accdb;Persist Security Info=False;"

        '4 - abrir conexion
        conexion.Open()

        '5 - crear la sentencia SQL
        Dim comando_SQL As New OleDbCommand("SELECT * FROM Clientes ORDER BY Id_cliente", conexion)

        '6 - se crea el reader
        lector = comando_SQL.ExecuteReader

        ' *****************************************************************
        '7 - Mostrar valores del reader
        lector.Read()
        'Se añaden datos a los textbox
        TextBox1.Text = lector.GetValue(0).ToString
        TextBox2.Text = lector.GetValue(1).ToString
        TextBox3.Text = lector.GetValue(2).ToString
        TextBox4.Text = lector.GetValue(3).ToString
        TextBox5.Text = lector.GetValue(4).ToString


        '**********************************************************************

        'punto final cerrar conexion
        'conexion.Close()
    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If lector.Read() Then
            'Se añade una fila al grid con un string por cada columna
            TextBox1.Text = lector.GetValue(0).ToString
            TextBox2.Text = lector.GetValue(1).ToString
            TextBox3.Text = lector.GetValue(2).ToString
            TextBox4.Text = lector.GetValue(3).ToString
            TextBox5.Text = lector.GetValue(4).ToString
        Else
            MessageBox.Show("Se han mostrado todos los registros")

        End If


    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        '2 - crear conexion
        Dim conexion As New OleDbConnection

        '3 - cadena de conexion
        conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\factura_cliente.accdb;Persist Security Info=False;"

        '4 - abrir conexion
        conexion.Open()


        If MessageBox.Show("¿De verdad desea eliminar el cliente número " & TextBox1.Text & "?", "Eliminación de registro", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = DialogResult.OK Then
            '5 - crear la sentencia SQL
            Dim comando_SQL As New OleDbCommand("DELETE FROM Clientes WHERE Id_cliente = " & TextBox1.Text, conexion)


            Dim total_datos_afectados As Integer
            '6 - Se ejecuta la consulta
            total_datos_afectados = comando_SQL.ExecuteNonQuery
            MessageBox.Show("Se han eliminado correctamente " & total_datos_afectados & " registros.")
        Else
            MessageBox.Show("Eliminación cancelada.")

        End If

    End Sub
End Class
Related Posts Plugin for WordPress, Blogger...