sábado, 18 de junio de 2011
Programación III
ucytprog3.blogspot.com
Saludos.
martes, 19 de abril de 2011
Ejercicio de DataGridView y Reporte
Si nos detenemos en la pantalla un momento podemos ver que hay varios puntos que podemos corregir para evitar que los usuarios cuando ingresen información registren información inconsistente.
Por ejemplo en el caso de la asignatura, en la pantalla de ingreso hay que digitarla, esto podría generar inconsistencia por ejemplo si alguien digita Programación I y posteriormente se ingresa Pogramación I, son dos cosas diferentes y si queremos generar posteriormente un listado de esta asignatura no nos aparecerían las dos correctamente. Para reforzar este punto vamos a crear una nueva tabla en la base de datos con la siguiente estructura.
Del mismo modo los estudiantes deberían tener una tabla donde estén registrados y tengan un valor único como lo es su código de carnet. La estructura de la tabla de estudiantes sería así:
Al final modificamos la estructura original de la tabla Notas quedando de la siguiente manera:
El código de carnet debe enlazarse con el carnet de la tabla Estudiantes y el código de asignatura debe enlanzarse con el código de asignatura de la tabla Asignaturas. De esta manera no se podrán ingresar a la tabla de notas estudiantes que no estén registrados en la tabla Estudiantes y lo mismo pasaría con las asignaturas.
Para el caso de las asignaturas, cambiaremos la pantalla eliminando el cuadro de texto txtAsignatura y lo sustituiremos por un control ComboBox llamado ComboBox1.
Utilizando los objetos DataAdapter, Dataset y Datatable, asignaremos al formulario los datos de las asignaturas para que puedan ser seleccionadas de las existentes en la tabla de Asignaturas.
Para ello daremos doble click en el formulario para que nos lleve al evento Form1_Load y escribiremos en el procedimiento lo siguiente:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim da As New SqlDataAdapter("SELECT * FROM Asignaturas", cn) Dim ds As New DataSet da.Fill(ds) ComboBox1.DataSource = ds.Tables(0) ComboBox1.DisplayMember = "Descripcion" ComboBox1.ValueMember = "Asignatura" End Sub
ACLARACION:
Muchos controles tienen la propiedad o atributo DataSource la cual especifica una tabla de donde se sacarán los datos para mostrarlos. En el caso del ComboBox en la propiedad DataSource se asigna la tabla 0. También pudo ampliarse la declaración de la siguiente manera:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim da As New SqlDataAdapter("SELECT * FROM Asignaturas", cn) Dim ds As New DataSet da.Fill(ds) Dim dt as new Datatable dt = ds.Tables(0) ComboBox1.DataSource = dt ComboBox1.DisplayMember = "Descripcion" ComboBox1.ValueMember = "Asignatura" End Sub
Queremos también construir un formulario que muestre todas las notas ingresadas. Para esto utilizaremos algunos de los conocimientos adquiridos en Bases de Datos II y me refiero a las vistas de SQL Server.
CREACION DE LA VISTA EN SQL SERVER
El proceso de creación de la vista es sencillo. Queremos obtener el carnet del estudiante, su nombre, el nombre de la asignatura y su nota final. Para ello tendríamos que construir una sentencia select que mezcle la información de las tres tablas.
Podemos construirla manualmente. La tabla principal es Notas que es la que contiene tanto el carnet como el código de asignatura y la nota final, así que comenzamos con ella.
SELECT Notas.Carnet, Estudiante.Nombre, Asignatura.Descripcion, Notas.NotaFinal FROM Notas INNER JOIN Estudiante ON Notas.Carnet = Estudiante.Carnet INNER JOIN Asignatura ON Notas.Asignatura = Asignaturas.Asignatura
La vista puede crearse directamente en SQL Server para ello seleccionamos el objeto Views o Vistas y presionando click con el botón derecho del mouse seleccionamos Nueva Vista (New View)
Se abrirá un diseñador de vistas y un cuadro de diálogo con las tablas existentes. Seleccionar las tres tablas con Shift + Flechas y presionar el botón Add. Se añadiran las tablas y quedará una pantalla parecida a la siguiente.
Ahora seleccione los campos necesarios marcando cada uno en la tabla correspondiente. De la tabla Notas el carnet, de la tabla Estudiantes el nombre, de la tabla asignaturas la descripción y de la tabla Notas la nota final. Si se fija en el diseñador se va creando la sentencia SQL cada vez que selecciona algo.
Guardemos la vista con el nombre VistaNotas.
Ahora agregaremos un botón al formulario y le pondremos como nombre btnTodasNotas. También agregaremos al proyecto un nuevo formulario llamado ConsultaNotas y agregaremos al formulario un control DataGridView, podemos dejarlo con el mismo nombre que Visual Basic asigna : DataGridView1 y dos botones, el primero dirá Salir y lo llamaremos btnSalir y su código ya lo conocemos (Me.Dispose()) y un segundo botón que se llamará btnReporte que explicaremos luego. El formulario lucirá más o menos como el siguiente:
Ahora en el botón btnListado colocaremos el siguiente código
Private Sub btnTodasNotas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTodasNotas.Click ConsultaNotas.ShowDialog() End Sub
Con este código llamaremos al formulario ConsultaNotas desde el formulario Form1
El código del formulario ConsultaNotas es el siguiente:
Imports System.Data Imports System.Data.SqlClient Public Class ConsultaNotas 'Declararemos la conexión aquí para que esté visible a todos los procedimientos Dim cn As New SqlConnection("Data source=3PHPB01\SQLEXPRESS;Initial Catalog=Examen2;Integrated Security=true") Private Sub ConsultaNotas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim da As New SqlDataAdapter("SELECT * FROM VistaNotas", cn) Dim ds As New DataSet da.Fill(ds) DataGridView1.DataSource = ds.Tables(0) End Sub End Class
Nos falta crear el reporte de Notas registradas en el sistema. Visual Basic 2008 en su versión Profesional permite crear reportes con dos componentes Microsoft ReportViewer y Crystal Reports. Vamos a crear un reporte usando el Microsoft ReportViewer. Para ello podemos usar el asistente de reportes que es la manera más fácil, pero no la mas adecuada cuando programamos una aplicación real. Seleccionamos el proyecto y presionamos el botón derecho del mouse y seleccionamos la opción Add (Agregar) / New Item (Nuevo Elemento)
Seleccionar el elemento Report Wizard y colocar en el nombre del Reporte Notas.rdlc
(la extensión rdlc significa Report Definition Language Client side). Este asistente nos llevará de la mano para crear el reporte a través de varias pantallas.
En la primer pantalla nos dará una bienvenida al asistente de reportes, necesitamos dar click al botón Next. La pantalla solo nos informa de los pasos que se seguirán hasta concluir con el reporte que queremos.
En la segunda pantalla debemos escoger Database y presionar Next.
En esta tercer pantalla debemos crear una nueva conexión si no la hemos creado aún. Cuando le damos click al botón correspondiente nos aparecerá un cuadro de diálogo donde debemos escribir el nombre de nuestro servidor y seleccionar la base de datos requerida (Examen2).
La pantalla es parecida a la siguiente:
Aqui podemos cambiar el nombre de la conexión o dejarlo como lo recomienda el sistema. Presionamos Next y continuamos con la siguiente pantalla donde nos aparecerá los objetos de la base de datos.
Queremos generar el reporte a partir de los datos contenidos en la vista recien creada (VistaNotas). Así que seleccionamos las vistas y marcamos la vista correspondiente
En la siguiente pantalla nos creará un nuevo dataset en forma gráfica donde aparecerán los datos de los campos de la vista. Presionamos Next.
Ahora en las siguientes pantallas ya entramos al diseño del reporte. La primera pantalla es para seleccionar el tipo de reporte. Seleccionaremos tabular y presionamos Next.
Posteriormente miraremos una pantalla donde podremos entre otras cosas agrupar el reporte, definir que campos van en el detalle, etc. Para nuestro caso lo que haremos será seleccionar todos los campos y presionar el botón Details (Detalle)
De aqui en adelante si queremos podemos presionar Finish o seguir dando algunas características para el reporte.
Seleccionamos en esta pantalla en tipo Stepped y presionamos Next
Aquí definimos el modelo de colores que nos guste más. Seleccionemos el primero y presionemos Next. Ya casi llegamos al final de la elaboración del reporte de esta manera fácil.
Esta pantalla es la conclusión del reporte con datos de lo creado por el asistente. Solo presionamos Finish y nos llevará hasta el reporte creado para que le hagamos cambios si es necesario.
Llegaremos a la pantalla siguiente.
Aqui está creado el reporte.
Ahora grabamos y regresemos a la aplicación. Agreguemos un nuevo formulario y pongamosle como nombre Reporte. Agreguemos a este formulario un control Microsoft ReportViewer que encontraremos en la categoría Reporting de la Caja de Herramientas.
Ahora en el control añadido vamos a la esquina superior derecha y encontraremos una flecha; presionémosla y aparecerá un menú emergente donde podremos seleccionar el reporte creado y además usar la ocpión DOCK IN PARENT CONTAINER (Acoplar en el contenedor principal), lo cual hará que el control tenga las dimensiones del formulario y se agrande o reduzca si el formulario se cambia de tamaño.
Bueno con esto estamos listos, solo falta ir al formulario ConsultaNotas y dar click en el boton btnReporte y escribir el código
Private Sub btnReporte_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReporte.Click Reporte.ShowDialog() End Sub
En los enlaces siguientes les dejo el código completo de la aplicación y el script para la generación de la base de datos Examen2. Si la base ya la tenían deben eliminarla y posteriormente ejecutar el script. Dentro del script se crean dos estudiantes y dos asignaturas. Pueden revisar los datos para que anoten el código del carnet y consulten. No hay notas registradas para los estudiantes. Prueba registrar notas para un estudiante y pruebe el botón Todas las Notas y el reporte.
NOTA
Para que funcione en su máquina debe cambiar las cadenas de conexión del programa para que apunten a su servidor. Además para que funcione el reporte debe ir al menú principal del Visual Basic y en el menú PROYECTO seleccionar la última opción ExamenSP_1C2011 Properties, y en el cuadro que aparece seleccionar el tab Setting. Aparecerá la configuración del dataset creado por el asistente del reporte y podrá ver una cadena de conexión; con mucho cuidado solo cambie el nombre del servidor y listo.
Los enlaces para bajar la aplicación y el script están a continuación:
Programa completo
Script de creación de la BD
sábado, 9 de abril de 2011
Solución Examen Parcial (II) Miércoles 06 Abril 2011 - Matutino
1) Crear una base de datos en SQL Server 2005 llamada Examen2
2) Crear una tabla llamada notas en la base Examen2 que tenga la siguiente estructura:
Campo | Tipo |
Carnet | char(7) |
Nombre | varchar(50) |
Asignatura | varchar(50) |
NotaPP | int |
NotaSP | int |
NotaTA | int |
NotaEF | int |
NotaFinal | real |
3) Crear un programa en visual basic 2008 que permita ingresar datos a
la tabla Notas.
4) La nota final se calculará en base a los parámetros de UCYT para los
cursos regulares.
5) El programa también deberá poder consultar las notas de un estudiante
y mostrar su estado (Aprobado o REPROBADo) en la barra de título
6) Se debe validar que las notas no sean menor que 0 ni mayor que 100
Si ingresara un dato en ese rango debe aparecer un mensaje de error
correspondiente.
SOLUCION:
Hay que diseñar un formulario para obtener o mostrar los datos al usuario. El diseño era parte del examen. Todo programador deber diseñar su propio formulario de acuerdo a su creatividad e ingenio. Una solución sencilla podría ser la siguiente:
El proyecto a realizar consta de un formulario. Lo primero que hay que hacer es colocar al inicio del formulario dos líneas que nos permitirán tener acceso a la librería de datos ADO .NET para SQL Server.
Imports System.Data Imports System.Data.SqlClient
Estas líneas se deben colocar al inicio del formulario, antes de la declaración de clase del formulario (Public Class Form1)
Para que nuestro sistema conecte al servidor SQL Server donde creamos la base de datos Examen2 necesitamos crear una cadena de conexión. Es importante en este paso saber que usaremos la cadena de conexión por lo menos en dos puntos del programa y dos procedimientos diferentes, entonces para evitar estar digitando la cadena varias veces, se puede definir después de la declaración de la clase del formulario y antes de cualquier procedimiento.
Public Class Form1 'Declararemos la conexión aquí para que esté visible a todos los procedimientos Dim cn As New SqlConnection("Data source=3PHPB01\SQLEXPRESS;Initial Catalog=Examen2;Integrated Security=true")
El botón Grabar (llamado btnGrabar) es el que hará el proceso de insertar el nuevo registro en la base de datos
Private Sub btnGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGrabar.Click 'Hay que validar las notas If Val(txtNotaPP.Text) < 0 Or Val(txtNotaPP.Text) > 100 Then MessageBox.Show("La nota del primer parcial no esta en el rango establecido...por favor revise") Exit Sub End If If Val(txtNotaSP.Text) < 0 Or Val(txtNotaSP.Text) > 100 Then MessageBox.Show("La nota del segundo parcial no esta en el rango establecido...por favor revise") Exit Sub End If If Val(txtNotaTA.Text) < 0 Or Val(txtNotaTA.Text) > 100 Then MessageBox.Show("La nota del trabajo acumulado no esta en el rango establecido...por favor revise") Exit Sub End If If Val(txtNotaEF.Text) < 0 Or Val(txtNotaEF.Text) > 100 Then MessageBox.Show("La nota del exámen final no esta en el rango establecido...por favor revise") Exit Sub End If 'Calcular la nota final usando la función de usuario CalcularNotaFinal() y colocar el resultado 'en la caja de texto. txtNotaFinal.Text = CalcularNotaFinal() 'Si todo esta bien se sigue con la grabación de los datos Dim sql As String sql = "INSERT INTO Notas " sql &= "(Carnet, Nombre, Asignatura, NotaPP, NotaSP, NotaTA, NotaEF, NotaFinal)" sql &= "VALUES(@Carnet, @Nombre, @Asignatura, @NotaPP, @NotaSP, @NotaTA, @NotaEF, @NotaFinal)" Dim cmd As New SqlCommand(sql, cn) cmd.Parameters.AddWithValue("@Carnet", txtCarnet.Text) cmd.Parameters.AddWithValue("@Nombre", txtNombre.Text) cmd.Parameters.AddWithValue("@Asignatura", txtAsignatura.Text) cmd.Parameters.AddWithValue("@NotaPP", Val(txtNotaPP.Text)) cmd.Parameters.AddWithValue("@NotaSP", Val(txtNotaSP.Text)) cmd.Parameters.AddWithValue("@NotaTA", Val(txtNotaTA.Text)) cmd.Parameters.AddWithValue("@NotaEF", Val(txtNotaEF.Text)) cmd.Parameters.AddWithValue("@NotaFinal", CalcularNotaFinal()) cn.Open() Dim i As Integer = cmd.ExecuteNonQuery() If i > 0 Then MessageBox.Show("Registro grabado...") Else MessageBox.Show("No se pudo guardar el registro...") End If cn.Close() End Sub
Comentando un poco el código, hemos hecho inicialmente la validación de las cajas de texto que corresponden a las notas para garantizar que estas no sean ni menor que 0 ni mayor que 100. La validación se puede hacer de diferentes maneras, la que se presenta no es la mejor pero la más simple. Nótese que el código se puede copiar cuatro veces solo cambiando el control de texto correspondiente. La función VAL convierte una expresión en un número. Se recomienda usar la funciones Convert (Ej. Convert.ToInt32(txtNotaPP.Text))
Si revisan el código, hemos utilizado una función llamada CalcularNotaFinal que calcula la nota final del estudiante en base a lo que hemos digitado en las cajas de texto. El uso de funciones simplifican el código que se escribe y lo deja más legible. La función es la siguiente:
Private Function CalcularNotaFinal() As Integer Dim npp, nsp, nta, nef As Integer npp = Val(txtNotaPP.Text) nsp = Val(txtNotaSP.Text) nta = Val(txtNotaTA.Text) nef = Val(txtNotaEF.Text) Dim notafinal As Integer notafinal = npp * 0.2 + nsp * 0.2 + nta * 0.2 + nef * 0.4 Return notafinal End Function
Finalmente en el botón con los tres puntos (btnBuscar) hacemos la búsqueda del carnet del estudiante y mostramos los datos. Se evalúa la nota final y se coloca en la barra de titulo el estado del estudiante (APROBADO o REPROBADO)
Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click 'Validemos que ya hemos colocado un código de carnet If txtCarnet.Text = "" Then MessageBox.Show("No se ha digitado el código de carnet") Exit Sub End If Dim cmd As New SqlCommand("SELECT * FROM Notas WHERE Carnet = @Carnet", cn) cmd.Parameters.AddWithValue("@Carnet", txtCarnet.Text) cn.Open() Dim dr As SqlDataReader = cmd.ExecuteReader() If dr.Read() Then txtNombre.Text = dr("Nombre") txtAsignatura.Text = dr("Asignatura") txtNotaPP.Text = dr("NotaPP") txtNotaSP.Text = dr("NotaSP") txtNotaTA.Text = dr("NotaTA") txtNotaEF.Text = dr("NotaEF") txtNotaFinal.Text = dr("NotaFinal") 'Colocar el estado de la nota en la barra de titulo If Val(txtNotaFinal.Text) >= 70 Then Me.Text = "Alumno : " & txtNombre.Text & " esta APROBADO " Else Me.Text = "Alumno : " & txtNombre.Text & " esta REPROBADO " End If Else MessageBox.Show("El carnet " & txtCarnet.Text & " no tiene notas registradas") End If cn.Close() End Sub
Y eso es todo. El programa completo lo pueden bajar en el siguiente enlace para que lo tengan. Es probable que lo usemos en clase.
Proyecto Completo en VB 2008
Script para crear la base de datos
El script para crear la base de datos Ejercicio2 es un archivo con las instrucciones para crear la BD. Solo se requiere abrir en el SQL Management Studio (consola de SQL Server) y ejecutarlo. No se preocupe si la base no aparecer, solo vaya al objeto Databases y con el botón derecho seleccione Refresh.
Hasta pronto.
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í:
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
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
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
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.
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
- El comando INSERT generará un error si queremos ingresar un registro con la misma clave principal de un registro existente.
- Podemos omitir el ingreso de algunos campos siempre y cuando estos acepten valores nulos o no tengan referencia a claves foráneas.
- El orden en que se establecen los nombres de campos es el orden en que se establece los valores en la claúsula VALUES.
- 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.