sábado, 24 de diciembre de 2011

Mensaje navideño de fin de curso


Mensaje navideño de fin de curso





Este post es solo para desearos Feliz Navidad a todos.

Solo recordaros que aquellos que que estéis interesado en que se haga referencia a que vuestro trabajo en este blog, os pongáis en contacto conmigo.

También podéis elegir si lo que queréis es un texto con capturas de imagen, vídeos, o incluso incluir un enlace de descarga al ejecutable.

Sin más os deseo lo mejor en estas fiestas y que el futuro os sonría.

Vicente Arosa

Fuente Imagen: Foto realizada por Vicente Arosa

martes, 13 de diciembre de 2011

Atención al cliente

Presentación sobre la atención al cliente

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

Presentación
https://docs.google.com/presentation/d/1bh9eo_lManfQRgUvFD4bviLESv1bU95gfBO6KpkJ8_o/edit

lunes, 12 de diciembre de 2011

Grabación de soportes opticos


Métodos de Grabación o Quemado de soportes gráficos

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

Presentación

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

Seguridad del software

Seguridad del software

Métodos de protección de aplicaciones informáticas.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

Presentación

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




lunes, 5 de diciembre de 2011

Autoejecutables


Creación de CDs Autoejecutables.

Presentación:
https://docs.google.com/presentation/d/1xkjGYQJeXy5jyAk0ejZL2RN2YE-kCmMCwwbNB8NqmNI/edit





Cd autoejecutable
Introducción

En Windows, los parámetros de autoejecución se definen en un documento de texto sin formato llamado Autorun.inf, que se debe guardar en la carpeta principal de la unidad en cuestión.

Aunque es posible utilizarlo en unidades USB, es necesario activarlo modificando el registro de windows.


Comandos

Los posibles comandos son:


  • icon
  • label
  • open
  • shellexecute
  • shell
  • shell\verb



Comentarios

El comentario es el punto y coma ;



Asignar un icono al CD
Icon

Establece un icono al medio removible, el cual es visible en el Explorador de Windows y en Mi PC.

El archivo debe tener extensión .ico o .bmp en caso de que se trate, exclusivamente, de un archivo de imagen.

Ejemplos:

icon=icono.ico


Asignar un icono al CD
Icon

También se puede emplear un icono incrustado en un archivo ejecutable (.exe) o uno de librería (.dll).

Se puede añadir una coma y un número a continuación en el caso de que el archivo elegido contenga más de un icono.

Ejemplos:
icon=archivo.exe,1

O también podemos escribirlo de la siguiente forma para el caso de los archivos .exe y .dll que contengan varios iconos:

icon=icono.exe
IconIndex=1


Abrir aplicaciones

Open

Abre una aplicación o archivo ejecutable guardado en el medio extraíble.

Se emplea, fundamentalmente, para iniciar la instalación de un programa de forma automática.

Ejemplo (para archivos ejecutables):

open=setup.exe


Abrir aplicaciones

Open

Se puede especificar el nombre de cualquier tipo de archivo, cuidando de que, si no es un archivo ejecutable (.exe, .bat, .com), se anteponga el comando "Start" a la ruta del mismo.

Ejemplo (para archivos no ejecutables):
open=Start 5años.pps

Ejemplo (para archivos no ejecutables con programa especifico):
open=programa.exe archivonoejecutable.extensión

Ejemplo (en caso de tener un archivo no ejecutable con espacios el nombre de este deberá ir entre comillas)
open=Start "mi presentación.pps"


Cambiar nombre dispositivo

Label

Etiqueta el medio extraíble con un nombre que sustituirá al nombre integrado.

En windows la etiqueta tiene un maximo de 32 caracteres, al sobre pasar esta cantidad, es posible no recibir un mensaje de error del S.O., tampoco se mostrarán más de 32 caracteres.

Ejemplo: (no se pone con comillas)
label=TPV Bar Arosa


Abrir archivos no ejecutables

Shellexecute

Abre un archivo no ejecutable, como por ejemplo, una página web o un documento PDF.

Ejemplo:
shellexecute=Inicio2007.html


Menú contextual

Shell\verb
Agregar opciones al menú contextual del medio extraíble (CD, DVD, etc.), accesible desde el Explorador de Windows.

Se pueden añadir tantas opciones como se desee.

La forma de usarlo es la siguiente:

shell\verb=&Instalar
shell\verb\command=Setup.exe
shell=verb


Menú contextual

Shell\verb

La palabra verb es un objeto de tipo MenuItem.

Los objetos MenuItem deben ser únicos, cuya línea de comando (command) respectiva deberá ser también la misma palabra.

La palabra command es la línea de comandos que el sistema operativo ejecutará, cuando se haga click en el menú.

El símbolo & indica que la letra que le sigue se definirá como tecla de acceso directo para ejecutar dicha opción.


Menú contextual


Cuando se hace doble clic a la unidad se ejecuta la acción definida por shell=verb donde verb es alguno de los objetos definidos anteriormente, además pasa a ser el primer ítem del menú contextual.

Si no se define, la acción por defecto será abrir la unidad en una ventana nueva.
Menú contextual

Ejemplo. Agregar 2 opciones nuevas al menú contextual sustituyendo la palabra verb por ejemplo y WindowsMSN, hacer de ejemplo la acción por defecto de la unidad:

shell\ejemplo=&Ejemplo
shell\ejemplo\command=ejemplo.exe

shell\WindowsMSN=&Instalar mensajero
shell\WindowsMSN\command=msnInstall.exe

shell=ejemplo


Autoejecución
UseAutoPlay

Especifica al sistema operativo si debe hacer caso o no de la información de autoejecución (autorun.ini) contenida en el medio extraíble. Si el valor es igual a 1se está indicando que sí. Un valor igual a 0 le indicará que lo omita.

En caso de que autoplay esté habilitado, significa que el sistema puede mostrar su diálogo de opciones de auto ejecución.

Con Windows, es soportado desde su versión Windows XP, en adelante.

UseAutoPlay=1


Descripción de contenido
[Content]
Establece el tipo de archivos multimedia (música, vídeo, imágenes) que se muestra en el diálogo Autoplay de windows.

Sólo para Windows Vista.

La finalidad de esta sección es permitir al autor que comunique que tipo de contenido se muestra en el Autoplay. Por ejemplo, un CD puede ser mostrado como que sólo tiene contenido de música aunque también contenga imágenes y vídeos, de otro modo mostraría que tiene contenido mixto.

MusicFiles, PictureFiles y VideoFiles.

Para que se muestren se pueden usar los valores: 1, y, yes, t, true. Para que no se muestren se pueden usar los valores: 0, n, no, f, false.


Descripción de contenido

Ejemplo:

[Content]
MusicFiles=Y
PictureFiles=0
VideoFiles=false


Contenido

[ExclusiveContentPaths]

Disponible a partir de Windows Vista.

Las carpetas listadas en esta sección limitan a Autoplay a buscar contenido sólo en esas carpetas y subcarpetas.

Esto permite al autor limitar las áreas de disco donde se encuentran los contenidos y mejorar el rendimiento a la hora de buscar contenido ya que no se escanea la unidad entera.

Los siguientes ejemplos son rutas válidas:
[ExclusiveContentPaths]
\music
\music\more music
music2


Contenido

[IgnoreContentPaths]

Disponible a partir de Windows Vista.

Hace lo inverso al anterior, es decir, ignora las carpetas y subcarpetas que le indiquemos.

Se puede usar junto a ExclusiveContentPaths para eliminar búsquedas en subcarpetas.

Ejempplo: [IgnoreContentPaths]
\music\covers
\images
music3


Controladores

[DeviceInstall]

Sólo soportado en Windows XP.

Establece la ruta para la búsqueda recursiva de archivos de controladores en la unidad.

Sólo es usado a la hora de instalar controladores y no como operaciones de Autorun.

Si no se pone la entrada DriverPath en [DeviceInstall] o la entrada DriverPath, no tiene ningún valor, entonces la unidad es ignorada durante una búsqueda de archivos de controladores.


Controladores

Ejemplos:

[DeviceInstall]
DriverPath=drivers

Buscará en la carpeta drivers y todos sus subdirectorios.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

[DeviceInstall]
DriverPath=drivers\video
DriverPath=drivers\audio

Buscará recursivamente sólo en los subdirectorios video y audio de la carpeta drivers.


Ejemplo
[autorun]
;open=5040_Messagebox.exe
icon=icono.ico

label=TPV_TACTIL_V1

SHELL\EXPLORAR=Explorar o contido do DVD
SHELL\EXPLORAR\COMMAND=EXPLORER.EXE /E,\

SHELL\INSTALAR=Instalar a aplicación
SHELL\INSTALAR\COMMAND=5040_Messagebox.exe

SHELL = INSTALAR


Conclusión
El caso más habitual es asignar un icono y activar la ejecución de un fichero.



NOTA:
Independientemente de si está habilitada la autoejecución de los CDs o no, las entradas icon y label siempre se ejecutan.









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

jueves, 27 de octubre de 2011

MessageBox

Como usar un MessageBox.

El MessageBox, es un control muy útil a la hora de interactuar con el usuario, especialmente a la hora de mostrar avisos de errores, que de otra manera, no serían tan visibles (Por ejemplo mostrando un texto en la barra de estado)

A continuación de muestran los usos más comunes de este control.




Opción 1 - Mostrar un mensaje

La opción más sencilla pasa por mostrar solamente un mensaje, mediante el primer parámetro de tipo String.

MessageBox.Show("Texto a mostrar")





Opción 2 - Mostrar un mensaje y un título

Es posible indicar el título mediante un segundo parámetro de tipo String.

MessageBox.Show("Texto a mostrar", "Título")






Opción 3 - Configurar los botones que se muestran.

Es posible indicar los botones que se mostrarán mediante el tercer parámetro de tipo MessageBoxButtons.
En el ejemplo se añaden los botones Aceptar y Cancelar.
El resultado de la pulsación de estos botones se puede utilizar, si el MessageBox se llama desde un IF, y se compara con una variable tipo DialogResult.

MessageBox.Show("Texto a mostrar", "Título", MessageBoxButtons.OKCancel)









Opción 4 - Añadir un icono.

Como cuarto parámetro es posible indicar un icono a mostrar. El valor debe ser de tipo MessageBoxIcon.

MessageBox.Show("Texto a mostrar", "Título", MessageBoxButtons.OKCancel, MessageBoxIcon.Information)






Opción 5 - Asignar foco a un botón

El quinto parámetro permite indicar cual es el botón por defecto, mediante una un valor de la enumeración MessageBoxDefaultButton.

MessageBoxDefaultButton.Button1 - Envía el foco al primer botón (el de la izquierda)
MessageBoxDefaultButton.Button2 - Envía el foco al segundo botón.
MessageBoxDefaultButton.Button3 - Envía el foco al tercer botón.

En el ejemplo se selecciona como botón por defecto al segundo botón, en este caso el correspondiente a la opción de Cancelar.

MessageBox.Show("Texto a mostrar", "Título", MessageBoxButtons.OKCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2)







Opción 6 - Alineación

El sexto parámetro permite, entre otras cosas, la alineación del texto, mediante un valor de tipo  MessageBoxOptions.

En el ejemplo se cambia la alineación a derecha ("MessageBoxOptions.RightAlign")

MessageBox.Show("Texto a mostrar", "Título", MessageBoxButtons.OKCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)








Opción 7 - Botón de Ayuda

El séptimo y último parámetro permite, indicar si se desea añadir un botón de ayuda o no, es un parámetro de tipo Boolean.

En el ejemplo con True se le indica que se añada dicho botón. El valor por defecto es False.

MessageBox.Show("Texto a mostrar", "Título", MessageBoxButtons.OKCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign, True)








Tratamiento de la pulsación del botón

Para realizar una acción dependiendo de la pulsación de los botones de un TextBox, es preciso incluirlo en un If y compararlo con algún valor de la enumeración DialogResult.

 If MessageBox.Show("Texto a mostrar", "Título", MessageBoxButtons.OKCancel) = DialogResult.OK Then

            Label1.Text = "Se ha pulsado el botón Aceptar"
        Else
            Label1.Text = "Se ha pulsado el botón Cancelar"
End If


Se llama al Message Box:

Se pulsa el botón Cancelar.




lunes, 24 de octubre de 2011

Bases de datos con Visual Basic

Bases de datos con Visual Basic

Enunciado creación base de datos en Microsoft Access de una sola tabla
https://docs.google.com/presentation/d/1iW1ftPsJbyVOCYCGz8W-cL47xGPxwGsKHtqgmyu9OtY/edit?hl=en_US


Gestíon de equipo infantil de Fútbol Sala
Crear una base de datos de Microsoft Acces, de una sola tabla, que permita gestionar la ficha de los jugadores de un equipo de futbol sala infantil.

Deberá permitir guardar al menos los siguientes datos:
  • Identificación del jugador (Nombre y apellidos, dirección, Fecha nacimiento, etc.)
  • Datos de los padres.
  • Foto.
  • Puesto de juego.
  • Talla de ropa y calzado.
  • Rotulacion de la equipación.
  • Estadísticas principales de juego.

Gestíon de equipo de Fútbol Sala de Senior
Crear una base de datos de Microsoft Acces, de várias tablas, que permita gestionar la ficha de los jugadores de un equipo de futbol sala senior.

Deberá permitir guardar al menos los siguientes datos:
  • Identificación del jugador (Nombre y apellidos, dirección, Fecha nacimiento, etc.)
  • Foto.
  • Puesto de juego.
  • Rotulacion de la equipación.
  • Estadísticas principales de juego.
  • Datos de contacto (varios telefonos, dirección trabajo, dirección residencia, etc.)
  • Talla de ropa y calzado, y control de entrega, incluyendo fecha y cantidades.
  • Ayudas recibidas, (cantidades, concepto, fecha)


Facturas de clientes
Crear en la base de datos de Microsoft Acces, una base de datos que permita gestionar facturas de venta.

Según la normativa actual, el contenido mínimo de una factura es:
  • Número de factura, y en su caso, serie. El número de factura siempre tiene que ser correlativo, es decir, no se pueden emitir dos facturas con el mismo número de factura y serie. Además debe guardar correlación con la fecha de factura.
  • La fecha de factura.
  • Nombre y apellidos o Razón Social del empresario que expide la factura y el destinatario.
  • NIF / CIFdel empresario y el destinatario.
  • Domicilio fiscal del empresario y destinatario.
  • Descripción de la operación (prestación del servicio o productos que se venden).
  • Tipo de IVA aplicable/s.
  • Desglose entre BASE y CUOTA de IVA. Si la factura tiene varios tipos de IVA, la factura deberá recoger por separado base y cuota de cada uno de los tipos.
  • Fecha de realización de la operación si es distinta a la fecha de expedición de la factura.
  • En el caso de que emitamos una factura exenta o no sujeta a IVA es necesario indicar el precepto de la Ley que lo recoge.

Facturas de clientes
Crear una aplicación en Visual Basic, que permita acceder a la base de datos de clientes.

Deberá permitir obtener los siguientes listados por pantalla:
  • Listado de clientes.
  • Listado de todas las facturas (solo encabezados).
  • Listado de facturas de un cliente determinado, permitiendo navegar entre los distintos clientes.
  • Datos de factura, incluyendo encabezado y líneas.

viernes, 21 de octubre de 2011

Acceso a disco con Visual Basic

Para poder acceder a directorios y ficheros se dispone de varias clases:

Directory, implementa métodos estáticos para acceso a directorios.
DirectoryInfo, implementa métodos de instancia para acceso a directorios, incluye las mismas opciones que Directory, pero es preciso la creación de una instancia de la clase.
Si se van a realizar muchas acciones sobre el mismo directorio, es más cómoda al no tener que introducir la ruta en todas las acciones como habría que hacer con Directory.

File, implementa métodos estáticos para acceso a ficheros.

FileInfo, implementa métodos de instancia para acceso a ficheros, incluye las mismas opciones que File, pero es preciso la creación de una instancia de la clase.
Si se van a realizar muchas acciones sobre el mismo fichero, es más cómoda al no tener que introducir la ruta en todas las acciones como habría que hacer con File.


DriveInfo, permite acceder a información sobre las unidades de disco.



Directory.Exists("C:\mi_directorio")

Devuelve True si existe el fichero y False si no existe

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

        If Directory.Exists("C:\mi_directorio") Then
            MessageBox.Show("O directorio C:\mi_directorioexiste")
        Else
            MessageBox.Show("O directorio C:\mi_directorioNON existe")
        End If



 Directory.CreateDirectory("C:\mi_directorio")

Si el directorio no existe lo crea.

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

        Directory.CreateDirectory("C:\mi_directorio")


Directory.Exists("C:\mi_directorio")  +  Directory.CreateDirectory("C:\mi_directorio")

Sería lógico, aunque no necesário, unir las dos opciones anteriores, y comprobar si el directorio existe antes de intentar crearlo

Se comprueba si el directorio no existe, y en ese caso lo crea.

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


        'Si no existe el directorio, lo crea
        'puede valer para asegurarse de que tenemos el directorio creado
        If Not Directory.Exists("C:\mi_directorio") Then
            Directory.CreateDirectory("C:\mi_directorio")
        End If



Directory.Delete("C:\mi_directorio")

Con Delete eliminamos un directorio no vacío.

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

          Directory.Delete("C:\mi_directorio")



Directory.GetCurrentDirectory()

Obtiene el directorio actual de trabajo.

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

        'recupera el directorio actual de trabajo
        MessageBox.Show(Directory.GetCurrentDirectory())



Directory.Move(origen, destino)

Mueve un directorio, si el nombre de origen y destino son distintos, lo renombra

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

        Directory.Move("C:\mi_directorio", "c:\mi_directorio_nuevo")




Directory.GetFiles("c:\")

Devuelve una tabla de cadenas de caracteres con los ficheros contenidos en la carpeta que se le pasa por parámetro.

Se muestra una implementación para rellenar un ListBox con el contenido recuperado por Directory.GetFiles

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

        'Se declara una tabla de cadenas de caracteres y se carga con los

        'ficheros del directorio C:\
        Dim ficheros() As String = Directory.GetFiles("c:\")

        'Se vacia el ListBox por si ya contiene datos
        ListBox1.Items.Clear()

        'Para cada dato contenido en ficheros
        'se añade una entrada en el ListBox1
        For Each dato As String In ficheros
            ListBox1.Items.Add(dato)
        Next





Directory.GetDirectories("c:\")

Devuelve una tabla de cadenas de caracteres con los directorios contenidos en la carpeta que se le pasa por parámetro.

Se muestra una implementación para rellenar un ListBox con el contenido recuperado por Directory.GetDirectories

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


        'Se declara una tabla de cadenas de caracteres y se carga con los
        'directorios del directorio C:\
        Dim directorios() As String = Directory.GetDirectories("c:\")

        'Se vacia el ListBox por si ya contiene datos
        ListBox1.Items.Clear()

        'Para cada datos contenido en ficheros
        'se añade una entrada en el ListBox1
        For Each dato As String In directorios
            ListBox1.Items.Add(dato)
        Next





Directory.GetCreationTime("c:\mi_directorio")

Devuelve un objeto tipo Date con la fecha de creación del directorio o fichero que se le pasa por parámetro.

Se muestra una implementación para mostrar la fecha al usuario mediante un MessageBox.

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



        'devuelve la fecha de creación de un fichero o directorio
        MessageBox.Show(Directory.GetCreationTime("c:\vicente").ToString)


NOTA 1: También existen


        Directory.GetLastAccessTime() - Devuelve la fecha de ultimo acceso.
        Directory.GetLastWriteTime() Devuelve la fecha de modificación.


NOTA 2:
Asímismo existen las mismas funciones acabadas en Utc (Coordinated Universal Time - Tiempo Universal Coordinado, equivalente al antes conocido como hora de Greenwich ), las cuales devuelven el valor de la fecha y hora pero basandose en la hora UTC.

        Directory.GetCreationTimeUtc()
        Directory.GetLastAccessTimeUtc()
        Directory.GetLastWriteTimeUtc()

NOTA 3
También existe otra variante de todas estas funciones, pero con Set en lugar de Get, lo que permite modificar las horas antes indicadas:


        Directory.SetCreationTimeUtc()
        Directory.SetLastAccessTimeUtc()
        Directory.SetLastWriteTimeUtc()

        Directory.SetCreationTimeUtc()
        Directory.SetLastAccessTimeUtc()
        Directory.SetLastWriteTimeUtc()






Directory.GetLogicalDrives()


Devuelve una tabla de cadenas de caracteres con las unidades lógicas presentes en el sistema.

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


        'declaro una tabla de cadenas de caracteres y la cargo
        Dim letras_unidad() As String = Directory.GetLogicalDrives()

        'vacio el ListBox por si ya contiene datos
        ListBox1.Items.Clear()

        'para cada dato
        'añado una entrada en el ListBox1
        For Each dato As String In letras_unidad
            ListBox1.Items.Add(dato)
        Next
Related Posts Plugin for WordPress, Blogger...