Download - Base de Datos Parte 2
Si2007A\ Cap 6 Programa de base datos
- 18-
BASE DE DATOS
PROGRAMA N 033 Este programa permite mostrar un listado de una tabla llamada personal creada en SQL Server Dentro de una base de datos llamada Comercio
Este programa sirve de ejemplo para acceder a bases de datos creados en SQL Server utilizando el objeto DataSet . Estructura de la tala personal
Como puede observarse , la clave de esta tabla es el campo IdPersonal definido de tipo Int y esta considerado como identidad para que el ID se genere en forma automtica por cada nuevo registro
El campo Area almacena el nombre del rea de empresa donde trabaja cada personal como por ejemplo contabilidad , logstica, Abastecimientos, etc.
El campo FechaIngreso almacena la fecha en la cual cada persona ingres a trabajar a la empresa.
Para que el programa pueda mostrar informacin se han ingresado algunos registros como se muestra a continuacin
Ventana de programa del listado
Elaborar listado con codigo
Para desarrollar este y los siguientes programas de ejemplo . debe agregar a su aplicacin referencias a System.Dat y System.Xml
Para esto haga clic en la opcin proyect del men principal y luego en la subopcin Property. El Botn reference(Agregar referencia) .. permite agregar las referencias.
Controles utilizados
Para desarrollar este programa solo necesita dibujar un Botn de comandos (BtnMostrar y un DataGrid (DgPersonal)
Si no se encuentra el DataGrid , haga clic derecho en el cuadro de herramientas y elija choose Item (elegir elementos) en la ventana que se visualiza active la casilla de DataGrid de system.Windows Form
En la seccin general declaration importe a System.data y System.Data.SqlClient
Imports Systems.Data
Imports Systems.Data.sqlclient
Dentro de la clase Form1 crea una constante para que almacene la cadena de conexion a la base de datos
Const strCn As String = "Data Source = (Local);Initial Catalog =Comercio;uid=sa;pwd=."
Instrucciones del botn llenar
Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
Const StrCN As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\MATERIAL DE SIST INFORMACION 2008A(MAYO)\ado net de castaeda\DataBases\Comercial_Data.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True"
Private Sub BtnMostrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnMostrar.Click
'Crea la conexin a la base de datos
Dim CN As New SqlConnection(StrCN)
'Crea un Objeto DataAdapter de SQL con la instruccin SQl que necesitamos
Dim DA As New SqlDataAdapter("Select * From empleados", CN)
'Crea el objeto DataSet para que almacene los registros obtenidos
Dim DS As New DataSet
'Llena el DataSet
DA.Fill(DS)
'Muestra los registo en el DataGrid
DgPersonal.DataSource = DS.Tables(0)
End Sub
End Class
PROGRAMA N34
Este programa Tambin muestra un listado de la tabla Personal (Empleado). Pero utilizando un objeto DataReader para acceder a los datos y un control ListView(Lv Personal para visualizarlos.Intrucciones del programa
En la Seccin General Declarations importe a systems.dta y system.Data.SqlClient
Para ese programa se ha creado un procedimietno llamado Titulo que permite asignar un formato a LIst View
Codigo
Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
Const StrCN As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\MATERIAL DE SIST INFORMACION 2008A(MAYO)\ado net de castaeda\DataBases\Comercial_Data.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True"
Sub Titulo()
LvPersonal.Clear()
'Asigna el formato inicial al control ListView
LvPersonal.View = View.Details
LvPersonal.GridLines = True
LvPersonal.FullRowSelect = True
LvPersonal.Columns.Add("Codigo", 30, HorizontalAlignment.Center)
LvPersonal.Columns.Add("Nombre", 130, HorizontalAlignment.Left)
LvPersonal.Columns.Add("Sexo", 40, HorizontalAlignment.Center)
LvPersonal.Columns.Add("CodActividad", 90, HorizontalAlignment.Left)
LvPersonal.Columns.Add("FecIngreso", 70, HorizontalAlignment.Center)
LvPersonal.Columns.Add("RemunPersonal", 70, HorizontalAlignment.Right)
End Sub
Private Sub Mostrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Mostrar.Click
Dim CN As New SqlConnection(StrCN)
REM Dim CMD As New SqlCommand("Select *IdPersonal,Nombre,Sexo,Area,FecIngreso,Sueldo From Personal", CN)
Dim CMD As New SqlCommand("Select Codigo, Nombre,Sexo,CodActividad,FecIngreso, RemunPersonal From empleados", CN)
Dim DR As SqlDataReader
Dim Personal As ListViewItem
Titulo()
CMD.Connection.Open()
DR = CMD.ExecuteReader
While DR.Read
Personal = New ListViewItem(DR("Codigo").ToString, 0)
Personal.SubItems.Add(DR("Nombre"))
Personal.SubItems.Add(DR("Sexo"))
Personal.SubItems.Add(DR("CodActividad"))
Personal.SubItems.Add(DR("FecIngreso"))
Personal.SubItems.Add(DR("RemunPersonal").ToString)
LvPersonal.Items.Add(Personal)
End While
End Sub
End Class
PRRIGRMA n 35Este programa muestra un listado del personal por su area de trabajo utilizando un control TreeView y un Control ListaView
El programa lea las reas donde trbaja el personal y los muestra en forma automtica en el control TreeView y cuando se hace clic en una ea de muestra todo el personal que trabajo en esa rea utilizando el control LIstView y ordenados por su nombre : En esta ventana de ejemplo se muestra todo el personal que trabaja en el res de personal
Para este programa , slo dibuje dos Labels para los ttulos ,un control TreeView Llamado TvPerosnal y un control ListView llamdo LvPerosnal
Instrucciones InicialesImports System.Data
Imports System.Data.SqlClientPublic Class Form1
Const StrCN As String = "Data Source=(Local);Initial Catalog=Comercio;uid=sa;pwd=."
Creacin de function Titulo
Sub Titulo()
LvPersonal.Clear()
'Asigna el formato inicial al control ListView
LvPersonal.View = View.Details
LvPersonal.GridLines = True
LvPersonal.FullRowSelect = True
LvPersonal.Columns.Add("Id", 30, HorizontalAlignment.Center)
LvPersonal.Columns.Add("Nombre", 130, HorizontalAlignment.Left)
LvPersonal.Columns.Add("Sexo", 40, HorizontalAlignment.Center)
'LvPersonal.Columns.Add("Area", 90, HorizontalAlignment.Left)
LvPersonal.Columns.Add("FecIngreso", 70, HorizontalAlignment.Center)
LvPersonal.Columns.Add("Sueldo", 70, HorizontalAlignment.Right)
End Sub
Intrucciones del Evento Load del Formulario
'Crea la conexin
Dim CN As New SqlConnection(StrCN)
'Crea un objeto SQLCommand con slo uno de cada grupo de
'nombres de las areas.
Dim CMD As New SqlCommand("Select Distinct Area From Personal", CN)
Dim DR As SqlDataReader
Titulo()
'Llena el TreeView con los nombres de las areas encontradas.
TvPersonal.Nodes.Clear()
Dim Padre As TreeNode
With CMD
.Connection.Open()
DR = .ExecuteReader
While DR.Read
Padre = New TreeNode(DR("Area"))
TvPersonal.Nodes.Add(Padre)
End While
.Connection.Close()
End With
Instrucciones el AfterSelect del ListView
Private Sub TcPersonal_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TvPersonal.AfterSelect
Dim Area As String
'Almacena el Area seleccionada del TreeView
Area = TvPersonal.SelectedNode.Text
Dim CN As New SqlConnection(StrCN)
'Selecciona slo el personal del area
REM Dim CMD As New SqlCommand("Select IdPersonal,Nombre,Sexo,FechaIngreso,Sueldo From Personal Where Area='" & Area & "' Order By Nombre", CN)
Dim CMD As New SqlCommand("Select * From Personal ", CN)
Dim DR As SqlDataReader
Dim Personal As ListViewItem
Titulo()
LblArea.Text = "Personal del Area: " & Area
'Muestra los datos del personal en el control ListView
With CMD
.Connection.Open()
DR = .ExecuteReader
While DR.Read
Personal = New ListViewItem(DR("IdPersonal").ToString, 0)
Personal.SubItems.Add(DR("Nombre"))
Personal.SubItems.Add(DR("Sexo"))
Personal.SubItems.Add(DR("FechaIngreso"))
Personal.SubItems.Add(DR("Sueldo").ToString)
LvPersonal.Items.Add(Personal)
End While
.Connection.Close()
End With
End SubPROGRAMA Nro 036
Este porgrma muestra un listado del personal por su area de trabajo osexo omes que ingreso a trabajar :como en el caso anterior , el Control TreeView se llena en forma automatica con las reas , sexo y slo los mese de ingreso del persona l que se encuentran en la tablas
Controles untilizdosImports System.Data
Imports System.Data.SqlClient
Public Class Form1
Const StrCN As String = "Data Source=(Local);Initial Catalog=Comercio;uid=sa;pwd=."
Dim CN As New SqlConnection(StrCN)
Dim Condicion As String
Procedimiento Titulo
Este procedimiento asigna el formato de visualizavin de los registros en el control ListView Asignandolo Titulos , ancho y alineacin de los campos
Sub Titulo()
LvPersonal.Clear()
'Asigna el formato inicial al control ListView
LvPersonal.View = View.Details
LvPersonal.GridLines = True
LvPersonal.FullRowSelect = True
LvPersonal.Columns.Add("Id", 25, HorizontalAlignment.Center)
LvPersonal.Columns.Add("Nombre", 120, HorizontalAlignment.Left)
LvPersonal.Columns.Add("Sexo", 40, HorizontalAlignment.Center)
LvPersonal.Columns.Add("Area", 90, HorizontalAlignment.Left)
LvPersonal.Columns.Add("FecIngreso", 70, HorizontalAlignment.Center)
LvPersonal.Columns.Add("Sueldo", 70, HorizontalAlignment.Right)
End Sub
Procedimiento Llenar
Este procedimietno llena los resgistros en Control ListView , pero oslamente el grupo seleccionado en el control TreeView
La ocndicin que deben cumplir los registros a visualizar se encuentrana en la variable condicin definida a nivel de formulario
Cada vez que se llenan los registros en el control ListView se asigna el formato a ese control llamado el procedimiento Titulo
Sub Llenar()
Dim CMD As New SqlCommand("Select IdPersonal,Nombre,Sexo,Area,FecIngreso,Sueldo From Personal Where " & Condicion & " Order By Nombre", CN)
Dim DR As SqlDataReader
Dim Personal As ListViewItem
'Asigna el formato para el ListView
Titulo()
'Muestra los datos del personal en el control ListView
With CMD
.Connection.Open()
DR = .ExecuteReader
While DR.Read
Personal = New ListViewItem(DR("IdPersonal").ToString, 0)
Personal.SubItems.Add(DR("Nombre"))
Personal.SubItems.Add(DR("Sexo"))
Personal.SubItems.Add(DR("Area"))
Personal.SubItems.Add(DR("FecIngreso"))
Personal.SubItems.Add(DR("Sueldo").ToString)
LvPersonal.Items.Add(Personal)
End While
.Connection.Close()
End With
End Sub
Instrucciones del evento Load del formulario
Estas instrucciones llenan el contenido del control TreeView con las areas , sexos y meses de ingreseo del personal, Tambien lman la procedimiento ittulo para asignar un formato al control ListView
Dim CN As New SqlConnection(StrCN)
'Comando para almacenar slo las areas que existe
Dim CMDAreas As New SqlCommand("Select Distinct Area From Personal", CN)
'Comando para almacenar slo los meses que existen
Dim CMDMeses As New SqlCommand("Select Distinct Month(FecIngreso) As mes From Personal", CN)
Dim DR As SqlDataReader
Dim Padre As TreeNode
'Asigna el formato al ListView
Titulo()
'Limpia el TreeView
TvPersonal.Nodes.Clear()
'Agrega las Areas segun el contenido de la tabla
With CMDAreas
.Connection.Open()
DR = .ExecuteReader
Padre = New TreeNode("Area")
TvPersonal.Nodes.Add(Padre)
While DR.Read
Padre.Nodes.Add(DR("Area"))
End While
.Connection.Close()
End With
'Agrega los dos Sexos
Padre = New TreeNode("Sexo")
TvPersonal.Nodes.Add(Padre)
Padre.Nodes.Add("Femenino")
Padre.Nodes.Add("Masculino")
'Agrega los meses segun el contenido de la tabla
With CMDMeses
.Connection.Open()
DR = .ExecuteReader
Padre = New TreeNode("Mes")
TvPersonal.Nodes.Add(Padre)
While DR.Read
'Muestra el nombre del mes
Padre.Nodes.Add(MonthName(DR("Mes")))
'Almacena el nmero del mes en la propiedad Tag
Padre.Nodes(Padre.Nodes.Count - 1).Tag = DR("Mes")
End While
End With
Ventana Inicial del formulario gracias a las instrucciones del evento Load del formulario
Instrucciones del After Select del LIstView
Private Sub TvPersonal_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TvPersonal.AfterSelect
'Pregunta si se ha seleccionado un elemento
If TvPersonal.SelectedNode.Level = 1 Then
Select Case TvPersonal.SelectedNode.Parent.Text
Case "Area" 'Si se ha seleccionado una Area
Condicion = "Area='" & TvPersonal.SelectedNode.Text & "'"
LblTitulo.Text = "Personal del Area: " & TvPersonal.SelectedNode.Text
Llenar()
Case "Sexo"
'Si se ha seleccionado un Sexo
If TvPersonal.SelectedNode.Text = "Femenino" Then
Condicion = "Sexo='F'"
Else
Condicion = "Sexo='M'"
End If
LblTitulo.Text = "Personal del Sexo: " & TvPersonal.SelectedNode.Text
Llenar()
Case "Mes"
'Si se ha seleccionado un Mes
'Selecciona el mes con ayuda del contenido de la propiedad Tag
Condicion = "Month(FechaIngreso)=" & TvPersonal.SelectedNode.Tag
LblTitulo.Text = "Personal que ingreso un mes de : " & TvPersonal.SelectedNode.Text
Llenar()
End Select
End If
End SubPrograma N 037Este prorama es similar al anterior , se diferencia porque cunado en est eprogrma se selecciona un Area , sexo o me sde Ingreso , se meustra en e mismo ControlTreeView los nombres del personal que pertenece al aemento seleccionado
Cunado se hace clic en el nombre de un personal , muestra todos sus datos en el formulario
En la siguiente ventana de ejemplo e ha seleccionado al Lopez Castilo Aurora que pertenece al area de contabilidad
Controles Utilizadas
Intrucciones InicialesImports System.Data
Imports System.Data.SqlClient
Public Class Form1
Const StrCN As String = "Data Source=(Local);Initial Catalog=Comercio;uid=sa;pwd=."
Dim CNEmpleados As New SqlConnection(StrCN)
Dim DREmpleados As SqlDataReader
Dim Hijo As TreeNode
Dim Condicion As String
Procedimiento Llenar
Este procedimiento llena los nombres del elemento seleccionado en el control TreeView y en la propiedad tag de cada nodo almaena el Id de cada personal para que cuadno se haga clic en algn nombre la consulta se realice en forma rpida utilizando el Id para la bsqueda
Sub Llenar()
'Crea un objeto Command slo con el Id y Nombre de los registros del elemento seleccionado
Dim CMDEmpleados As New SqlCommand("Select IdPersonal,Nombre From Personal Where " & Condicion & " Order By Nombre", CNEmpleados)
CMDEmpleados.Connection.Open()
DREmpleados = CMDEmpleados.ExecuteReader
While DREmpleados.Read
'Muestra en el TreeView el Nombre del personal
Hijo.Nodes.Add(DREmpleados("Nombre"))
'Almacena el Id del Personal en la propiedad Tag
'para que la consulta sea mas rapida
Hijo.Nodes(Hijo.Nodes.Count - 1).Tag = DREmpleados("IdPersonal")
End While
CMDEmpleados.Connection.Close()
End Sub
Instrucciones del evento Load del formularioEstas instrucciones llenan el contenido del control TreeView con las eas sexos y meses del ingreso del personal y cada elemento se meustra con los nombres de su personal
Dim CN As New SqlConnection(StrCN)
'Comando para almacenar slo las areas que existe
Dim CMDAreas As New SqlCommand("Select Distinct Area From Personal", CN)
'Comando para almacenar slo los meses que existen
Dim CMDMeses As New SqlCommand("Select Distinct Month(FecIngreso) As mes From Personal", CN)
Dim DR As SqlDataReader
Dim Padre As TreeNode
'Limpia el TreeView
TvPersonal.Nodes.Clear()
'Agrega las Areas segun el contenido de la tabla
With CMDAreas
.Connection.Open()
DR = .ExecuteReader
Padre = New TreeNode("Area")
TvPersonal.Nodes.Add(Padre)
While DR.Read
Hijo = Padre.Nodes.Add(DR("Area"))
Condicion = "Area='" & DR("Area") & "'"
'Agrega los empleados del Area
Llenar()
End While
.Connection.Close()
End With
'Agrega los dos Sexos
Padre = New TreeNode("Sexo")
TvPersonal.Nodes.Add(Padre)
Hijo = Padre.Nodes.Add("Femenino")
Condicion = "Sexo='F'"
'Agrega los empleados de Sexo Femenino
Llenar()
Hijo = Padre.Nodes.Add("Masculino")
Condicion = "Sexo='M'"
'Agrega los empleados de Sexo Masculino
Llenar()
'Agrega los meses segun el contenido de la tabla
With CMDMeses
.Connection.Open()
DR = .ExecuteReader
Padre = New TreeNode("Mes")
TvPersonal.Nodes.Add(Padre)
While DR.Read
'Muestra el nombre del mes
Hijo = Padre.Nodes.Add(MonthName(DR("Mes")))
Condicion = "Month(FecIngreso)=" & DR("Mes")
'Agrega los empleados de Sexo Masculino
Llenar()
End While
End With
End SubVentana Inicial del formulario gracias a las instrucciones del evento Load del formulario
Instrucciones del AfterSelect del Treview
Estas instruccioens muestran todos los datos del personal seleccionado
'Pregunta si se ha seleccionado un Personal
If TvPersonal.SelectedNode.Level = 2 Then
'Se busca el personal con el contenido de la propiedad Tag
'que contiene el Id
Condicion = "IdPersonal=" & TvPersonal.SelectedNode.Tag
Dim CMDEmpleados As New SqlCommand("Select IdPersonal,Nombre,Sexo,Area,FecIngreso,Sueldo From Personal Where " & Condicion, CNEmpleados)
CMDEmpleados.Connection.Open()
DREmpleados = CMDEmpleados.ExecuteReader
DREmpleados.Read()
'Muestra todos los datos del personal seleccionado
LblId.Text = DREmpleados("IdPersonal")
LblNombre.Text = DREmpleados("Nombre")
LblSexo.Text = DREmpleados("Sexo")
LblArea.Text = DREmpleados("Area")
LblIngreso.Text = DREmpleados("FecIngreso")
LblSueldo.Text = DREmpleados("Sueldo").ToString
CMDEmpleados.Connection.Close()
End IfPrograma Nro 038
Este programa muestra en un control DataGrid la lista de personal segn su mes y aos de ingreso
En este programa se utiliza un procedimiento Lamacenado Llamado Leer_Pa creado en el Sqlserver . este procedimiento almaendao recibe ds parmetros , mes y aos de ingreso y devueve la relacin dlpersnal que ingres en ese mes y aos
Los meses se seleccionan desde un control ComboBox y el aos de Ingreso en un control Numeric UpDown
Controles Utilizados
Crear Procedimiento Almacenado
Para crear procedimietno almacendao relice los siguiente
1. En el exporador de base de datos(servidores) da clic derecho en procedimiento alamacenado y seleccione agregar nuevo procedimietno
Create PROCEDURE Leer_pa
@Mes As SmallInt,
@Ao As smallInt
AS
Select IdPersonal , Nombre, Sexo ,Area, FechaIngreso, Sueldo from personal
Where Month(FechaIngreso)=@Mes And Year(FechaIngreso)=@Ao
RETURN
Instrucciones Inciales
Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
REM Const StrCN As String = "Data Source=(Local);Initial Catalog=Comercio;uid=sa;pwd=."
Const StrCN As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\PERSONAL.mdf;Integrated Security=True;User Instance=True"
Instrucciones del evento Load delformualrioEstas instrucciones llenan el control ComboBox con os nombres de lso 12 meses del ao y en e control Numerric Updows muestra el ao de la fecha del sistema 'Llena los meses
Dim N As Byte
For N = 1 To 12
'Muestra los meses con la primera en maysculas
CboMes.Items.Add(StrConv(MonthName(N), VbStrConv.ProperCase))
Next
'Muestra el primer mes
CboMes.SelectedIndex = 0
'Muestra el ao actual
UpAo.Value = Date.Today.Year
Instrucciones del botn BtnMostrar
Esta Intrucciones llenan el control DataGrid (DgDatos) con los datos del personal que ingreso en el mes y aos seleccionado
En estas isntrucciones se hace uso del procedimiento almacendao llamado Lee_pa que se ha creado en SQl Server asignndole los valores de los dos paramatreo (Mes y Ao) y ejecutndolo
Dim CN As New SqlConnection(StrCN)
'Crea un comando con el procedimiento almacenado
Dim CMD As New SqlCommand("Leer_Pa", CN)
With CMD
.CommandType = CommandType.StoredProcedure
'Pasa los parametros al procedimiento
.Parameters.Add(New SqlParameter("@Mes", CboMes.SelectedIndex + 1))
.Parameters.Add(New SqlParameter("@Ao", UpAo.Value))
Dim DA As New SqlDataAdapter(CMD)
Dim DT As New DataTable
'Llena el DataTable
DA.Fill(DT)
'Muestra los datos en el DataGrid
DgDatos.DataSource = DT
End With