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/
Blog del curso de Programación de Aplicaciones informáticas, que se imparte en el Multicentro Torneiros en Porriño.
Se imparte programación en lotes en MSDOS, SQL, Clipper, y lenguaje C, C++ y Visual Basic.
miércoles, 30 de noviembre de 2011
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.
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:
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:
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
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 original | Tras 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:
- HelpKeyword.
- HelpNavigator.
- HelpString.
- 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")
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, 16 de noviembre de 2011
Creacion de ayudas con HelpNDoc
Presentación de creacion de ayudas con HelpNDoc
https://docs.google.com/presentation/d/19KpfN8pzYefycpYLLPrcMFeClSHUaEsVVP87-7Mlamw/edit
https://docs.google.com/presentation/d/19KpfN8pzYefycpYLLPrcMFeClSHUaEsVVP87-7Mlamw/edit
martes, 15 de noviembre de 2011
Creación de ayudas.
Presentación creación de ayudas.
https://docs.google.com/presentation/d/1iiBBc-b08BtI2pI3OxyoQFsVM4qZFBOzRgjX70QVvow/edit
Para las prácticas se usará la aplicación HelpNdoc, que se puede descargar desde:
http://www.helpndoc.com/download
https://docs.google.com/presentation/d/1iiBBc-b08BtI2pI3OxyoQFsVM4qZFBOzRgjX70QVvow/edit
Para las prácticas se usará la aplicación HelpNdoc, que se puede descargar desde:
http://www.helpndoc.com/download
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
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
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
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.
'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 - 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 - María Jesús Barros Fernández
Ejercicio final de curso - María Jesús Barros Fernández
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.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
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
Suscribirse a:
Entradas (Atom)