Base de Datos Parte 2

download Base de Datos Parte 2

of 18

description

sql

Transcript of 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