jueves, 29 de julio de 2010

Ejercicio No. 1

Para este ejercicio es necesario tener en cuenta que necesitamos crear una base de datos en Sql Server 2005 ya sea  la versión gratis (SQL Server 2005 Express) o la de pago (SQL Server 2005 Standard.

1) Crear una base de datos llamada Prueba

2) Crear una tabla dentro de la base de datos Prueba con el nombre Coches.  La estructura de la tabla es la siguiente

Nombre
Campo
Tipo de Datos Tamaño Descripción
Matricula Varchar 10 Placa del vehículo.  Corresponde al identificador de la tabla
Marca Varchar 15 Marca del vehículo
Modelo Varchar 15 Modelo del vehículo
Kilómetros Int   Cantidad de Kilómetros recorridos por el vehículo
Costo Real   Costo por día del vehículo

La clave primaria de la tabla será el campo Matricula.

3) Una vez creada la tabla, procedemos a llenar algunos datos para que podamos utilizarla desde Visual Basic 2008

M-2125    Toyota        Yaris           70820    28
M-3150    Toyota        Corolla       50453    30
M-7315    Mitsubishi   Montero     15800    35
M-9817    Nissan         Sentra      140782    23

Ahora el programa.  Expliquemos primero que es lo que queremos hacer.  Imaginemos que tenemos una empresa de alquiler de vehículos y queremos hacer una pantalla donde tengamos un combo con las marcas de los vehiculos que tenemos disponibles y queremos seleccionar del combobox una marca y que en un listbox aparezcan los vehiculos disponibles.

El formulario final sería así:

Formulario1

Control Nombre
ComboBox cboMarca
Button1 btnMostrar
Button2 btnLimpiar
Button3 btnSalir
ListBox1 lstCoches
Imports System.Data
Imports System.Data.SqlClient
 
Public Class Form1
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Definir el arreglo de marcas y asignar algunos valores
        Dim aMarcas() As String = {"Mitsubishi", "Toyota", "Nissan", "Chevrolet"}
 
        'Cargar los datos en el combobox con las marcas de los vehiculos
        For i = 0 To aMarcas.Length - 1
            cboMarca.Items.Add(aMarcas(i))
        Next
 
    End Sub
 
    Private Sub btnMostrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMostrar.Click
        'hay que validar primero que se ha seleccionado un valor
        'en el combobox
        If cboMarca.Text = "" Then
            MsgBox("No ha seleccionado una marca...")
            Exit Sub
        End If
 
        'Si llegamos hasta esta linea de código significa que ya habíamos
        'seleccionado una marca en el combo entonces nos conectamos a la base de datos
        ' y sacamos la información a través de un datareader
 
        '== Se define y abre la conexión
        Dim cn As SqlConnection = New SqlConnection("Data Source=D7PPS31\SQLEXPRESS;Initial Catalog=Prueba1;Integrated Security=true")
        cn.Open()
        '== Se crea un comando con la sentencia SELECT, INSERT, DELETE o UPDATE a utilizar
        Dim cmd As SqlCommand = New SqlCommand("SELECT * FROM Coches WHERE Marca='" & cboMarca.Text & "'", cn)
        '== Se abre un datareader y se le asigna los datos que traerá el comando con sui
        '== metodo EXECUTEREADER
        Dim dr As SqlDataReader = cmd.ExecuteReader()
        '== Se crea un ciclo WHILE utilizando el método Read del datareader que permite
        '== obtener el valor verdadero o falso si lee o no datos
        While dr.Read()
            'Se añaden los campos que devuelve el datareader con un tabulador por medio cada
            'uno. Note que los campos que son numéricos hay que usar el método ToString()
            'al final para que los convierta a Texto
            lstCoches.Items.Add(dr("Matricula") + vbTab + dr("Modelo") + vbTab + dr("Kilometros").ToString() + dr("Costo").ToString())
        End While
 
        'Se cierra el datareader y la conexión
        dr.Close()
        cn.Close()
    End Sub
 
    Private Sub btnLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpiar.Click
        'limpia el listbox
        lstCoches.Items.Clear()
    End Sub
 
    Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click
        Me.Dispose()
        Me.Close()
    End Sub
End Class
  

ADO .NET y Visual Basic 2008 (Parte 3)

Para conectar una base de datos a ADO .NET y acceder a los datos, se utilizan las clases que vienen integradas al Visual Studio.  Estas clases están organizadas en varias librerías que se usan dependiendo del tipo de base de datos a utilizar.

System.Data
Se utiliza para todos las bases de datos.

System.Data.SqlClient
Para bases de datos SQL Server

System.Data.OleDb
Para acceder a fuentes de datos OLEDB como Microsoft Access, Excel, etc

ado_net_arq

En el gráfico anterior se muestra una idea de como funciona la arquitectura ADO .NET.  Se puede ver que existen objetos o clases específicas para cada proveedor de datos, estos son los objetos Connection, Command, DataReader y DataAdapter y otros que son independientes del origen de los datos, como son los DataSet.

Por ejemplo si usamos el proveedor de datos de Sql Server, los objetos se llamarán SqlConnection, SqlCommand, SqlDataReader, SqlDataAdapter.  Si usamos el OLEDB para conectar a una base de datos de Access por ejemplo, estos objetos seran OleDbConnection, OleDbDataReader, OleDbDataAdapter, OleDbCommand, etc.  Como el dataset es independiente del origen, este siempre se llamará Dataset.

De aqui en adelante usaremos el proveedor de SQL Server para ejemplificar el uso de cada objeto.

Siempre que se desee hacer uso de las librerías de acceso a datos, hay que colocar al inicio de cada clase, módulo o formulario dos instrucciones

Imports System.Data
Imports System.Data.SqlClient

La segunda instrucción cambiará dependiendo del proveedor de datos.  El siguiente código muestra un ejemplo de su uso

Imports System.Data
Imports System.Data.SqlClient

Public Class Form1

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

End Sub
End Class


Como puede observarse siempre se colocan las lineas Imports antes de cualquier instrucción.

 

Vamos a explicar cada uno de los objetos en forma breve

 



 

 

 

 

 

 

 

 

lunes, 19 de julio de 2010

Comentarios en el Blog

Pueden hacer comentarios en el post si tienen dudas respecto a lo impartido en clase, lo escrito en el blog o algun otro comentario.

Saludos

ADO .NET y Visual Basic 2008 (Parte 2)

Continuando con el tema anterior, el motor de un DBMS (Database Management System) o SGBD (Sistema Gestor de Base de Datos) se encarga de usar un lenguaje para la manipulación de los datos de forma eficiente.  Los datos están guardados en tablas y estas tablas a su vez tienen reglas de integridad relacional (Relaciones) y otras restricciones como clave primaria, tipos de datos, validación de columnas, etc. que permiten restringir el tipo de datos a utilizar, la seguridad de estos, etc.

Lenguaje SQL

Podemos manipular los datos desde el gestor de base de datos (en nuestro caso SQL Server) a través de las instrucciones DML (Data Manipulation Languaje).  También podemos crear objetos en la base de datos como tablas, vistas, procedimientos almacenados, disparadores, etc, a través de las instrucciones DDL (Data Definition Languaje), los dos parte del SQL.  SQL Server como tal contiene el lenguaje llamado T-SQL (Transact SQL) que contiene todas estas instrucciones.  Las instrucciones básicas de manipulación de datos son SELECT, INSERT, DELETE y UPDATE para consultar, agregar, borrar y modificar los datos respectivamente.

SELECT

Este comando se utiliza para leer una o más tablas.  Su sintaxis más sencilla se muestra a continuación

SELECT [campo1], [campo2]… [campoN]
FROM [Tabla1]
WHERE 
[campo1] = condición búsqueda
ORDER BY [campo1] ASC | DESC

Tomando como referencia la tabla creada en clase


Tablas


Por ejemplo si quisieramos obtener todos los vehículos marca Toyota de la tabla Coches tendríamos que hacer lo siguiente



SELECT * FROM Coches WHERE Marca = 'Toyota'

Tendríamos como resultado dos registros con la marca Toyota.  Para hacer esta consulta en SQL Server 2005 basta con presionar el botón “Nueva Consulta” o “New Query” y se abrirá una pantalla en blanco para ingresar este script, presionamos “Ejecutar” y listo tendremos los datos correspondientes.


image El comando SELECT tiene muchas variantes, es necesario para el curso de Programación II revisar los apuntes de Bases de Datos I y II para recordar toda su sintaxis y las diferentes formas en que se puede utilizar.


Se pueden agrupar los datos a través de las funciones de grupo, entre las cuales podremos sumar (SUM), contar (COUNT), promediar (AVG), etc


Por ejemplo si queremos tener un listado de cuantos vehiculos tenemos de cada marca podemos hacer lo siguiente



SELECT Marca, COUNT(Marca) 
FROM Coches
GROUP BY Marca

Revisen la documentación del SQL para que nos actualizemos con el uso de la sentencia SELECT


INSERT


La sentencia INSERT se utiliza para agregar nuevos registros a una tabla.  Su uso es casi siempre igual ya que su sintaxis no es muy compleja.



INSERT INTO [Tabla] ( [Campo1], [Campo2], …)
VALUES ('Valor1','Valor2',…)

Para ingresar un valor a la tabla Coches por ejemplo tendríamos que tener la siguiente instrucción



INSERT INTO Coches (Matricula, Marca, Modelo, Kilometros, CostoPorHora)
VALUES ('M-1111', 'Mitsubishi', 'Lancer',65432,7.89)





Consideraciones que hay que tener con el comando INSERT son las siguientes



  1. El comando INSERT generará un error si queremos ingresar un registro con la misma clave principal de un registro existente.

  2. Podemos omitir el ingreso de algunos campos siempre y cuando estos acepten valores nulos o no tengan referencia a claves foráneas.

  3. El orden en que se establecen los nombres de campos es el orden en que se establece los valores en la claúsula VALUES.

  4. Los datos tipo cadenas o caracteres siempre se colocan entre comillas simples. Los numéricos se escriben normal.  Los valores booleanos o lógicos se colocan como 0 para falso y 1 para verdadero.

DELETE


Es el comando más facil de usar, pero el más peligroso ya que sirve para eliminar registros de una tabla de la base de datos.  Su sintaxis es sencilla



DELETE FROM [Tabla]
WHERE [Campo1]=Condición

Si queremos por ejemplo borrar el registro ingresado en el ejemplo del insert, usaríamos la siguiente instrucción



DELETE FROM Coches
WHERE Matricula = 'M-1111'

Obsérvese que el campo utilizado en el Where corresponde a la clave primaria que identifica de forma única al registro que queremos eliminar.


Si no colocamos la sentencia WHERE eliminaríamos todos los registros de la tabla, lo cual sería un problema si no queremos ese resultado.


UPDATE


Se utiliza para actualizar uno o más campos de uno o más registros de una tabla de la base de datos.


Su sintaxis es la siguiente



UPDATE [Tabla]
SET [Campo1] = Nuevo Valor, [Campo2] = Nuevo Valor,...
WHERE [Campo1] = Condición

La claúsula WHERE se utiliza cuando queremos actualizar un solo registro y tenemos que establecer el valor de la clave principal del registro que queremos actualizar.  Por ejemplo si queremos cambiar el valor de Costo por hora del alquiler del Coche con matrícula M-3143 de 7.34 a 6.80 tendríamos que utlizar una instrucción como esta



UPDATE Coches
SET CostoPorHora = 6.80
WHERE Matricula = 'M-3143'

Si no colocáramos la claúsula WHERE la instrucción actualizaría todos los registros a 6.80.


Pero si por ejemplo quisieramos aumentar un 25% el costo por hora de los coches de marca Mitsubishi debido a un aumento de precio en los respuestos de esa marca deberiamos utilizar una instrucción como la siguiente



UPDATE Coches
SET CostoPorHora = CostoPorHora * 1.25
WHERE Marca='Mitsubishi'

La instrucción SET toma el costo por hora actual y lo multiplica po 1.25 con lo que le aumentamos el 25% al costo por hora y se lo asigna al campo con el mismo nombre.  Los vehículos que serán afectados por esta actualización son los que tengan como marca Mitsubichi.


Bueno, creo que es un resumen super rápido de lo que es el SQL y como se usan las instrucciones básicas.  Es bueno leer más sobre el T-SQL ya que es la base de las aplicaciones de Visual Basic con SQL Server y su uso con ADO.NET.


Hasta el próximo post. 

ADO .NET y Visual Basic 2008 (Parte 1)

Cuando comenzamos a trabajar con ADO .NET tenemos que recordar o estudiar algunos conceptos básicos como bases de datos, Lenguaje SQL, SQL Server, etc. y además conoceremos otros conceptos como Comandos, Adaptadores, Datasets, DataReaders, etc. 

En el post anterior explicamos algunos conceptos como Bases de Datos, Orígenes de Datos y Proveedores.

Decíamos que una base de datos es un conjunto de datos que además cuenta con dos partes fundamentales: el motor de la base de datos (Data Engine) y los datos que son almacenados.  El motor de la base de datos permite manipular los datos a través del lenguaje SQL que para cada base de datos tiene sus diferencias en sintáxis pero el objetivo es el mismo.

Tablas

En todo caso, toda base de datos almacena DATOS y estos datos a su vez están distribuidos en TABLAS

Tablas

Las tablas están conformadas por filas y columnas.  Las columnas se llaman campos y en forma conceptual atributos.  Estas columnas tienen además un tipo de dato establecido, es decir, pueden ser del tipo cadena, numérico, fecha, etc.

En la tabla anterior los tipos de datos se muestran a continuación

diseño tabla

Los tipos de datos dependen del tipo de información que se pretende almacenar en cada campo o columna.  Los campos serán entonces el tipo de información a almacenar y las filas son ya nuestra información almacenada.

Relaciones

En el modelo relacional, que es el usado por la mayoría de las bases de datos más conocidas en el mercado (SQL Server, Oracle, MySQL, etc), la tablas se unen a otras para establecer restricciones y mantener la integridad de los datos.

Por ejemplo en la tabla anterior tenemos los coches que están disponibles para ser alquilados, pero siempre tenemos que escribir la marca y el modelo.  Es probable que en un determinado momento cometamos un error y no escribamos correctamente la marca de un vehículo, esto afectaría cualquier consulta que hagamos sobre la tabla coches con respecto a una marca en particular.  Para solventar este problema podría crearse una tabla que contenga las marcas de vehículos correspondientes debidamente codificada, así en la tabla Coches solo tendríamos que escribir el código de la marca y no el nombre completo.  Además estaremos optimizando el espacio necesario para almacenar información y evitaremos la redundancia de datos.

diseño marcas image

En la figura anterior se muestra la nueva tabla Marcas su estructura y su contenido.  La relación existente entre Marcas y Coches será la siguiente

image

Nótese que se cambió el campo “Marca” por el campo “Id_Marca” en la tabla “Coches” y además la información de ese campo se cambió por el Id de cada marca existente en la tabla “Marcas”.

De esta manera no podremos asignar en la tabla Coches cualquier marca, sino solo aquella registrada en la tabla Marcas, estableciendose una relación de integridad entre los datos.

domingo, 18 de julio de 2010

Bases de Datos con Visual Basic 2008

Si hacemos un análisis de las aplicaciones actuales, casi en todo desarrollo de software vemos involucrado el almacenamiento y recuperación de información desde y hacia repositorios de datos.  Algunas veces ésta información se aloja localmente, en otros casos en servidores remotos.  Ya sea aplicaciones de Formularios de Windows (Windows Forms) o Aplicaciones WEB (ASP .NET), siempre encontraremos necesario el uso de bases de datos para almacenar y recuperar información.

ADO .NET es la plataforma de Microsoft para el acceso a datos que supone un universo de posibilidades para el programador.  La tecnología es una evolución del ADO (Activex Data Object; de ahi su nombre), pero completamente renovada con un paradigma conceptual completamente diferente.

Con ADO .NET tenemos la solución global al acceso de datos desde acceso a archivos locales hasta aplicaciones cliente/servidor con conexión permanente o no al origen de datos, aplicaciones n-capas o aplicaciones distribuidas basadas en Internet.

Algunos conceptos que debemos tener en cuenta al usar ADO .NET son los siguientes:

Origenes de Datos

Los servicios de ADO.NET, pueden ser usados para operar sobre origenes de datos diversos, no exclusivamente sobre lo que se conoce como bases de datos. Un origen de datos puede ser una base de SQL  Server, un documento XML,  una hoja de cálculo de Microsoft Excel, el Directorio Activo de Windows 0, en general, cualquier recurso para el que exista un Proveedor de datos  .NET.

 

Bases de Datos

La base de datos es el origen de datos más usado. Las bases de datos pueden ser de diferentes tipo, siendo el más usado el relacional.  Las bases de datos se dividen en dos clases: bases de datos de escritorio y servidores de bases de datos.  Las de escritorio son bases de datos locales, con una interfaz completa para usuarios con un conocimiento medio en el tema; entre ellas tenemos el Microsoft Access, Paradox, Foxpro, etc.

Se llama  servidor de datos  a una aplicaci6n que se encarga de manipular  fisicamente los datos, ocupándose de su almacenamiento y recuperación. Aunque una base de datos de escritorio o local puede colocarse en una unidad
compartida de red,  facilitando el acceso a ella desde diferentes puestos,  no es la configuraci6n más adecuada para  construir un acceso multiusuario. En este caso resultan mucho más eficientes y  seguros los servidores de bases de datos.  Aquí entran en juego los DBMS (Database Management System) que además de almacenar información en las bases de datos, permiten su manipulación de forma eficiente.  Entre los DBMS más conocidos tenemos el SQL Server, Oracle, DB2 de IBM, MySQL, etc.

Proveedores y Controladores

Para accesar un orígen de datos se necesita un Proveedor ADO .NET que  es una implementación específica de una serie de componentes que facilitan el acceso a un origen de datos determinado.

Visual Basic incorpora dos proveedores de acceso a orígenes de datos : uno para SQL Server y otro capaz de emplear cualquier controlador OLEDB. Otros dos disponibles son para Oracle y otro para ODBC.

Resumen

Para esta primera parte tenemos que aprender que ADO .NET es la tecnología que Visual Studio 2008 posee para el acceso a datos en diferentes orígenes de datos ya sea local o a nivel de servidor. Para acceder a ése origen de datos se requiere de un proveedor o controlador que facilite ese acceso.  Las Bases de Datos tienen diferentes tipos de datos y formas de ejecutar las modificaciones, inserciones, actualizaciones y selección de datos y es ahí donde el proveedor entra en juego para facilitar la labor de almacenaje y recuperación de datos.

jueves, 15 de julio de 2010

Uso de Fechas

El uso de fechas en visual basic es una tarea rutinaria, sobre todo cuando se trabaja con bases de datos.  Los valores de fecha y hora son almacenados en un formato especial.  Estos son almacenados como números de doble precisión.  La parte entera representa la fecha y la decimal la hora.  Se pueden declarar variables como fecha de la siguiente manera.

Dim expiracion As Date

'Todos las siguientes sentencias de asignación son válidas

expiration = #01/01/2008#
expiration = #8/27/2008 6:29:11 PM#
expiration = ”July 2, 2008”
expiration = Today()

La función Today() regresa la fecha y hora actual, mientras que la función Now() regresa la fecha actual. Usted puede recuperar la fecha actual llamando llamando la propiedad Today de tipo Date: Date.Today.

El formato de fecha es determinado por la configuración regional (Panel de Control) que esta fijado en Windows XP, Vista o Windows 7.

Hay funciones específicas para la fecha y la hora. Se pueden efectuar operaciones aritméticas con las variables del tipo fecha como una resta o suma de fechas.

Dim d1, d2 As Date
d1 = Now
d2 = #1/1/2010# 
Debug.Print d2-d1

Arreglos en Visual Basic

Un arreglo es un elemento del lenguaje que nos permite agrupar un conjunto de valores del mismo tipo y acceder a ellos a través de una misma variable o identificador.

En visual basic los arreglos son equivalentes a los vectores o matrices en matemáticas, estos pueden ser unidimensionales o multidimensionales.  Los arreglos se definen haciendo uso de la CLASE ARRAY la cual está contenida en el espacio de nombres System y es una de las muchas clases incluidas en el .NET Framework que está a disposición de los programadores para efectuar operaciones con estas.

Los arreglos se pueden declarar de diferentes formas, desde la tradicional usada en Visual Basic 6.0 hasta la forma orientada a objetos que posee Visual Basic 2008.

Sintaxis para declarar un arreglo en visual basic


'Estableciendo el número de elementos
Dim aNombres(2) As String
'Asignar los valores de cada elemento
aNombres(0) = "María"
aNombres(1) = "Ana"
aNombres(2) = "Juana"

En el código se puede ver que los elementos parten desde el índice 0, así cuando decimos aNombres(n), donde n es el número de elementos, estamos hablando que se crearán n+1 elementos. aNombres(2) crea 2+1 = 3 elementos, sus indices serán 0,1 y 2 respectivamente.

Otra forma de declarar un arreglo es asignar los valores al array al mismo tiempo que se declara

Dim aNombres() As String = {"María", "Ana", "Juana"}

Al igual que la primera forma, los elementos quedan asignados en la forma en que fueron declarados, es decir aNombres(0) será igual a "María", y así respectivamente.

Como los arreglo en visual basic son una clase, al hacer la declaración de la variable con la sentencia Dim, la clase hereda todas sus propiedades al objeto creado, en este caso a la variable aNombres. Algunas de estas propiedades son:

PROPIEDADES DE LOS ARREGLOS

Length
Devuelve la cantidad de elementos que contiene el array.
'Declarar el arreglo y asignar valores
Dim aDias() As String = {"Lunes", "Martes","Miercoles", "Jueves","Viernes","Sábado","Domingo"}
Dim nElementos As Integer = aDias.Length
MsgBox(nElementos)

Se obtendrá el valor 7, que son la cantidad de elementos que contiene el arreglo.

Ahora bien, que pasa si se quiere imprimir la cantidad de elementos del arreglo
podemos hacer la siguiente rutina.

For i= 0 to aDias.Length - 1
   MsgBox(aDias(i))
Next 

Como puede observarse el ciclo comienza desde 0 porque es el índice inicial de los arreglos en visual basic. El ciclo finaliza cuando el arreglo llega al indice 6, es decir al elemento 7, es por eso que se resta 1 a la propiedad.

Mas información pronto...