Professional Documents
Culture Documents
1. MANEJANDO LA CONEXIN
conectarse a SQL Server usando el proveedor de
datos de SQL, para lo cual veremos algunas
propiedades y mtodos de la clase SqlConnection.
Para ello arrastre un botn de comando y un cuadro
de lista
Imports System.Data.SqlClient
Public Class Form1
Private Sub Btnconectar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnConectar.Click
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
With con
.Open()
ListBox1.Items.Add("nombre del servidor de datos =" & .DataSource)
TBD2015B \ 7
Nota si usted copia la base de datos al directorio del proyecto su cadena de conexxion
seria
Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\demo35\demo35\ALUMNOS.mdf;
Integrated Security=True;Connect Timeout=30;User Instance=True
Si su base de datos es obtenido del servidor ( creado en SQL Server 2008) solo
deberia poner)
Dim CadenaConexion As String = "Data Source=.\sqlexpress;Initial
Catalog=Alumnos;Integrated Security=True"
Y su solucion seria
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
End Try
End Sub
End Class
DEMO 37 controlar errores de acceso a datos a SQL Server mediante la estructura Try..
Catch.. Finally y el uso de los objetos SqlExcpetion y Sql Error. Y guardar los errores en
un archivo de texto para ser revisado por el administrador de la aplicacin.
TBD2015B \ 7
Inherits System.Windows.Forms.Form
Private Sub ControlErrores(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Dim cmd As New SqlCommand("Select count(*) from alumnos", con)
Try
con.Open()
Dim intEmpleados As Integer = cmd.ExecuteScalar
MessageBox.Show(intEmpleados.ToString, "Numero de alumnos",
MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch sqlEx As SqlException
Dim Archivo1 As New StreamWriter("E:\datos\Errores.txt", True)
Dim sqlEr As SqlError
For Each sqlEr In sqlEx.Errors
Archivo1.WriteLine("Fecha y Hora : " & Now.ToString)
Archivo1.WriteLine("Numero Error : " & sqlEr.Number)
Archivo1.WriteLine("Mensaje Error: " & sqlEr.Message)
Archivo1.WriteLine(New String("=", 50))
Next
Archivo1.Flush()
Archivo1.Close()
Finally
If con.State = ConnectionState.Open Then con.Close()
End Try
End Sub
Private Sub BtnMostrarErrores_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnMostrarErrores.Click
If File.Exists("E:\datos\Errores.txt") Then
Dim Archivo1 As New StreamReader("E:\datos\Errores.txt")
Dim Linea As String
ListBox1.Items.Clear()
Do While True
Linea = Archivo1.ReadLine
If Linea Is Nothing Then Exit Do
ListBox1.Items.Add(Linea)
Loop
Archivo1.Close()
Else
MessageBox.Show("No existe el archivo de Errores", "Aviso",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
End Sub
End Class
Si no hay errores muestra la cantidad de registros que hay en la tabla
TBD2015B \ 7
TBD2015B \ 7
btnModificarConexion.Text = "Conectar"
End If
End Sub
End Class
TBD2015B \ 7
TBD2015B \ 7
Este es muy rpido y consume pocos recursos de memoria ya que mantiene una
sola fila a la vez.
Solo permite el desplazamiento hacia adelante (ForwardOnly)
No sirve para modificar registros
No es enlazable a controles Windows ( No Binding Windows Controls) para
mostrar los datos hay que leer y mostrar registro por registro.
1. Para recuperar un valor del DataReader usar la propiedad Value de los mtodos
GetSql de acuerdo al tipo de datos a leer y el ndice de campo en la instruccin
Select , por ejemplo para un Select de 3 columnas , una entera , otra cadena, y otra
moneda, tenemos:
Dim valor1 as integer = drd: getSqlInt32(0).Value
Dim valor2 as Stringr = drd: getSqlString(1).Value
Dim valor3 as Decimal = drd: getSqlMoney(2).Value
Consejos
TBD2015B \ 7
TBD2015B \ 7
Modifique y pruebe
Puede listar dos campos de texto a la vez nombre y cdigo
Para el campo tipo fecha seria ListBox1.Items.Add(drd.GetDateTime(0))
DEMO 41 comandos de seleccin que recuperen varios campos de un conjunto de datos.
Ejercicio 1 .Devolver todos los campos de la tabla alumnos
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Private Sub ListarNombres(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select * FROM alumnos", con)
Dim dst As New DataSet()
dap.Fill(dst, "Alumnos")
DataGridView1.DataSource = dst.Tables(0)
Dim cadena1 As String = "select CodAlumno,NombreAlumno,FechaNac from
alumnos"
Dim cmd As New SqlCommand(cadena1, con)
con.Open()
Dim drd As SqlDataReader = cmd.ExecuteReader
Do While drd.Read
ListBox1.Items.Add(drd.GetSqlString(0).Value & drd.GetSqlString(1).Value &
Space(30) & drd.GetDateTime(2).Date)
Loop
drd.Close()
con.Close()
End Sub
TBD2015B \ 7
End Class
Puede usar el signo + en vez de &
Ejercicio 3 . Combinar tabla pagos con tabla alumnos como se muestra
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\SI2011B\DATOS\ALUMNOS.mdf;Integrate
d Security=True;Connect Timeout=30;User Instance=True"
Private Sub ListarNombres(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select A.Nro, A.CodAlumno ,B.NombreAlumno,
A.Monto FROM Pagos A, Alumnos B Where A.Codalumno=B.codalumno", con)
Dim dst As New DataSet()
dap.Fill(dst, "Alumnos")
DataGridView1.DataSource = dst.Tables(0)
Dim cadena1 As String = "Select Nro, A.CodAlumno ,B.NombreAlumno, Monto FROM
Pagos A, Alumnos B Where A.Codalumno=B.codalumno"
Dim cmd As New SqlCommand(cadena1, con)
con.Open()
Dim drd As SqlDataReader = cmd.ExecuteReader
Do While drd.Read
ListBox1.Items.Add(drd.GetInt32(0).ToString.PadLeft(5) +
drd.GetSqlString(1).Value.PadLeft(15) + drd.GetSqlString(2).Value.PadLeft(20) +
drd.GetDecimal(3).ToString.PadLeft(20))
Loop
drd.Close()
con.Close()
End Sub
TBD2015B \ 7
End Class
Ejercicio 5 .Listar los campos nro, codigo del alumno, monto y el final que obtenga la
suma del monto , y el mayor monto
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Private Sub ListarNombres(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("select Nro, CodAlumno,Monto from pagos", con)
Dim dst As New DataSet()
dap.Fill(dst, "Alumnos")
DataGridView1.DataSource = dst.Tables(0)
Dim cadena1 As String = "select Nro, CodAlumno,monto from pagos "
Dim cmd As New SqlCommand(cadena1, con)
con.Open()
Dim drd As SqlDataReader = cmd.ExecuteReader
Do While drd.Read
ListBox1.Items.Add(drd.GetInt32(0) & Space(30) & drd.GetSqlString(1).Value &
Space(30) & drd.GetDecimal(2))
Loop
drd.Close()
cmd.CommandText = "Select sum (Monto) From Pagos"
Dim SumaPagos As Integer = cmd.ExecuteScalar
ListBox1.Items.Add(" Suma de monto es " & SumaPagos)
cmd.CommandText = "Select MAX (Monto) From Pagos"
ListBox1.Items.Add(" el maximo monto es " & cmd.ExecuteScalar)
TBD2015B \ 7
con.Close()
End Sub
End Class
3.3 RECUPERANDO MULTIPLES CONJUNTOS DE DATOS
Para ejecutar comandos que devuelven mltiples conjuntos de datos tambin se usa el
mtodo ExecuteReader del objeto SqlCommand,
Ejercicio 1. Generar dos tablas uno de cdigos de alumnos y otro de los nombres de
alumnos y luego mostrarlos su contenido
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim CadenaConexion As String = " Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select * FROM alumnos", con)
Dim dst As New DataSet()
dap.Fill(dst, "Alumnos")
DataGridView1.DataSource = dst.Tables(0)
Dim cmd As New SqlCommand("Select CodAlumno from Alumnos;Select
NombreAlumno From Alumnos;", con)
Dim drd As SqlDataReader
con.Open()
drd = cmd.ExecuteReader
TBD2015B \ 7
ListBox1.Items.Clear()
Do While drd.Read
ListBox1.Items.Add(drd.GetSqlString(0).Value)
Loop
If drd.NextResult Then
ListBox1.Items.Add("siguiente tabla")
Do While drd.Read
ListBox1.Items.Add(drd.GetSqlString(0).Value)
Loop
End If
drd.Close()
con.Close()
End Sub
End Class
Ejercicio 2. Mostrar datos de las todas las tablas de base de datos Alumnos
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select * FROM alumnos;Select * From Pagos;
select * from Cursos; ", con)
Dim dst As New DataSet()
dap.Fill(dst, "Alumnos")
DataGridView1.DataSource = dst.Tables(0)
TBD2015B \ 7
TBD2015B \ 7
usando el objeto
TBD2015B \ 7
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Dim cmd As New SqlCommand("Select Codalumno,nombrealumno,foto From alumnos",
con)
Dim drd As SqlDataReader
Private Sub MostrarAlumno()
If drd.Read() Then
'Mostrar textos
Try
TextBox1.Text = drd.GetSqlString(0).Value
TextBox2.Text = drd.GetSqlString(1).Value
TextBox3.Text = drd.GetSqlString(2).Value
PictureBox1.Load(" e:\fotos\" & TextBox3.Text & ".bmp")
Catch ex As Exception
MsgBox("error " & ex.Message)
End Try
Else
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
stb.Length = 0
Loop
drd.Close()
con.Close()
End Sub
Private Sub GrabarError(ByVal vMensaje As String)
Try
Dim Archivo As New StreamWriter("C:\MISDATOS\ErroresManEmp.txt", True)
Archivo.WriteLine("Fecha y Hora = " & Now.ToString)
Archivo.WriteLine("Cliente = " & pc)
Archivo.WriteLine("Error = " & vMensaje)
Archivo.WriteLine(New String("=", 50))
Archivo.Flush()
Archivo.Close()
Catch ex As Exception
End Try
End Sub
Private Sub CargarAlumnos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
ListarAlumnos()
End Sub
Private Sub MostrarAlumnos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ListBox1.SelectedIndexChanged
With ListBox1.SelectedItem.ToString
'Mostrar textos
TextBox1.Text = .Substring(0, 5).Trim REM codalu
TextBox2.Text = .Substring(5, 25).Trim REM nombre
TextBox3.Text = .Substring(30, 30).Trim REM FechaNac
End With
End Sub
Private Sub NuevoAlumno(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnNuevo.Click
con.Open()
TextBox1.Clear()
con.Close()
TextBox2.Clear()
TextBox3.Clear()
TextBox2.Focus()
BtnAdicionar.Enabled = True
End Sub
Private Sub AdicionarAlumno(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnAdicionar.Click
Dim nombre1 As String
If TextBox1.Text <> "" And TextBox2.Text <> "" And TextBox3.Text <> "" And
TextBox3.Text <> "" Then
Try
stb.Length = 0
stb.Append("Insert Into Alumnos(codAlumno,nombreAlumno,FechaNac) Values('")
stb.Append(TextBox1.Text)
TBD2015B \ 7
stb.Append("','")
stb.Append(TextBox2.Text)
stb.Append("','")
stb.Append(TextBox3.Text)
stb.Append("' )")
nombre1 = stb.ToString
con.Open()
cmd.CommandText = stb.ToString
reg = cmd.ExecuteNonQuery()
If reg <= 0 Then Throw New Exception("No se pudo adicionar el Alumno")
Catch ex As Exception
GrabarError(ex.Message)
MessageBox.Show(ex.Message, ex.Source, MessageBoxButtons.OK,
MessageBoxIcon.Error)
Finally
If con.State = ConnectionState.Open Then con.Close()
stb.Length = 0
ListarAlumnos()
BtnAdicionar.Enabled = False
End Try
End If
End Sub
Private Sub ActualizarAlumno(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnActualizar.Click
Dim nombre As String
If TextBox1.Text <> "" And TextBox2.Text <> "" And TextBox3.Text <> "" And
TextBox3.Text <> "" Then
Try
stb.Length = 0
stb.Append("Update Alumnos Set CodAlumno='")
stb.Append(TextBox1.Text)
stb.Append("',NombreAlumno='")
stb.Append(TextBox2.Text)
stb.Append("',FechaNac='")
stb.Append(TextBox3.Text)
stb.Append("' Where CodAlumno='")
stb.Append(TextBox1.Text)
con.Open()
stb.Append("'")
nombre = stb.ToString
cmd.CommandText = stb.ToString
reg = cmd.ExecuteNonQuery()
If reg <= 0 Then Throw New Exception("No se pudo actualizar el alumno")
Catch ex As Exception
GrabarError(ex.Message)
MessageBox.Show(ex.Message, ex.Source, MessageBoxButtons.OK,
MessageBoxIcon.Error)
Finally
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
CODIGO
Imports System.Data.SqlClient
Public Class Form1
Private Sub LitarAlumnosagos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
TBD2015B \ 7
Imports System.Data.SqlClient
Public Class Form1
Private Sub LitarAlumnosagos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("", con)
Dim dst As New DataSet()
TBD2015B \ 7
dap.SelectCommand.CommandText = "Select
CODALUMNO,NOMBREALUMNO,fechanac FROM alumnos"
dap.Fill(dst, "Alumnos")
dap.SelectCommand.CommandText = "Select
NRO,CODALUMNO,FECHAPAGO,MONTO,CODCURSO FROM PAGOS"
dap.Fill(dst, "pagos")
dap.SelectCommand.CommandText = "Select CODCURSO,
NOMBRECURSO,PROFESOR FROM CURSOS"
dap.Fill(dst, "CURSOS")
Dim drn As New DataRelation("CURSOS_Pagos", dst.Tables(2).Columns(0),
dst.Tables(1).Columns(4))
dst.Relations.Add(drn)
DataGrid1.DataSource = dst.Tables(2)
DataGrid1.Expand(0)
End Sub
End Class
TAREA como obtener la relacion alumnos con cursos, dado un alumno listar que cursos
lleva
Nota
DataGrid1.DataSource = dst.Tables(1) lista la tabla pagos
DataGrid1.DataSource = dst.Tables(0) lista la tabla alumnos
2
Como ya sabemos el DataSet est compuesto por uno o ms tablas, las cuales pueden
contener registros. En un esquema desconectado todas las operaciones deben realizarse
dentro de las tablas o vistas de una tabla en el DataSet
2.1 Clase DataTable
2.2 Realizando el Mantenimiento de Datos
El Objeto DataTable tiene mtodos que permiten realizar operaciones con los registros
de la tabla, tales como insercin de nuevos registros, actualizacin de datos o eliminacin
de registros.
2.1.1 Insertando Registros en un tabla
Para insertar un nuevo registros en una tabla primero debe crearse un Objeto DataRow
que tenga la estructura de una fila existente de la tabla, la cual se obtiene con el mtodo
NewRow del Objeto DataTable
Luego debe llenarse los datos del DataRow y finalmente agregarse a la coleccin de
Rows del DataTable mediante el mtodo Add.
4 Crear un objeto DataRow que tome la estructura de una fila de la tabla mediante el
mtodo NewRow
Dim drw as datrow= dst.tables(0).NewRow
TBD2015B \ 7
5 Llenar los campos del DataRow con los valores deseados , por ejemplo ,para una tabla
con 3 columnas tenemos
Drw(0)= valor1
Drw(1)= valor2
Drw(2)= valor3
3 Finalmente agregar el dataRow a la coleccin de filas de la tabla mediante el
mtodos Add de la coleccin Rows de DataTable
Dst.Tables(0).Add(drw)
2.2.2 Actualizando Registros de una Tabla
Para actualizar un registro existente en una tabla primero debe de seleccionarse la fila
que se desea actualizar creando un objeto DataRow que apunte a dicha fila
Para Empezar la edicin debe usarse el Mtodo BeginInt del DataTable, luego debe
llenarse los datos del DataRow y finalmente debe llamarse al mtodo EndInit
A continuacin presentamos la forma de actualizar un registro de una tabla
4 Crear un objeto DataRow que apunte a la fila de la tabla que se desea modificar
Dim drw as DataRow= dst.tables(0),rows(N)
Nota.- El Prmetro N indica el indice de la fila que se desea modificar
5 Llamar al mtodo BeginInit del DataTable para empezar la edicin de un registro de la
tabla
Dst.tables(0).BeginInt()
6. Actualizar los campos de DataRow con los valores desados , por ejemplo , para una
tabla con 3 columnas tenemos
Drw(0)= valor1
Drw(1)= valor2
Drw(2)= valor3
7. Finalmente llamar al mtodo EndInit del Datatable para finalizar la edicin del registro
de la tabla
Dst.Tables(0).EndInit()
2.2.3. Eliminando Registro de una Tabla
Para eliminar un registro existente de una tabla primero debe de seleccionarse la fila
que se desea eliminar creando un objeto DataRow que apunte a dicha fila. Luego debe
llamarse al mtodo Delete del Objeto DataRow para eliminar dicha fila del DataTable
4 Crear un objeto DataRow que apunte a la fila de la tabla que se desea eliminar
Dim drw as DataRow= dst.Tables(0).Rows(N)
5. finalmente llamar al mtodo Delete del DataRow para elimnar el registro
drw.Delete()
Nota.- En realidad el registro slo se marca para despus ser borrado fsicamente al
enviar cambios desde la tabla hacia la base de datos.
2.3 Actualizando la Base de Datos
TBD2015B \ 7
TBD2015B \ 7
2.
Propiedad
Text
DataGridView
Button1
ReadOnly
Name
Tag
Text
Name
Tag
Text
Name
Tag
Text
Name
Text
Button2
Button3
Button4
Valor
Mantenimiento de base de
datos de alumnos
True
BtnNuevo
1
Nuevo
BtnEditar
2
Editar
BtnEliminar
3
Eliminar
BtnEnviarCambios
Enviar cambios
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
Module Module1
Public dst As New DataSet()
Public pos As Integer
Public opera As Operacion
Public Enum Operacion
Nuevo = 1
Editar = 2
Eliminar = 3
End Enum
End Module
NOTA
pos = DataGridView1.CurrentCell.RowIndex
pos = DataGrid1.CurrentRowIndex
pos = DataGridView1.CurrentRow.Index
APLICACION PARA DIFERENCIAR MODO CONECTADO DEL DESCONECTADO
MENU MODO CONECTADO EN MODO CONSOLA Y MODO
FORMULARIO
TBD2015B \ 7
TBD2015B \ 7
comando.ExecuteNonQuery()
conn.Close()
End Sub
Sub eliminar()
conn.Open()
Console.WriteLine("Ingrese el codigo del alumno a eliminar")
codalumno = Console.ReadLine()
comando.CommandText = " DELETE FROM ALUMNOS WHERE CODALUMNO = '"
& codalumno & "' "
Console.WriteLine("Ejecutando sentencia {0}", comando.CommandText)
comando.ExecuteNonQuery()
comando.CommandText = " INSERT INTO ALUMNOS
( Codalumno,nombrealumno,fechanac) values ('" & codalumno & "' , '" & nombrealumno &
"' , '" & FechaNac & "')"
conn.Close()
End Sub
End Module
CODIGO DEL MODULO 1
Imports System.Data.SqlClient
Module Module1
Public cadenaconexion As String = " Data
Source=(LocalDB)\v11.0;AttachDbFilename=E:\Datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30"
Public conn As SqlConnection = New SqlConnection(cadenaconexion)
Public sqlqry As String = "select count(*) from alumnos"
Public Opcion As Integer
Public codalumno As String
Public nombrealumno As String
Public FechaNac As String
Public comando As SqlCommand = New SqlCommand(sqlqry, conn)
Public rdr As SqlDataReader
Public nrocol As Integer
Public i As Integer
Sub Main()
Try
Do
Console.WriteLine(" 1. listar 2. modificar 3 Agregar 4 Eliminar 5 salir ")
Console.WriteLine(" Ingrese opcion ")
Opcion = Console.ReadLine()
Select Case Opcion
Case 1
listar()
Case 2
modificar()
Case 3
agregar()
TBD2015B \ 7
Case 4
eliminar()
End Select
Loop Until Opcion = 5
Catch ex As SqlException
Console.WriteLine(ex)
Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
End Module
CODIGO DEL FORMULARIO
Public Class Form1
Private Sub BtnListar_Click(sender As Object, e As EventArgs) Handles BtnListar.Click
conn.Open()
comando.CommandText = " SELECT * FROM ALUMNOS"
rdr = comando.ExecuteReader
nrocol = rdr.FieldCount
Dim cadena As String
cadena = ""
For i = 0 To nrocol - 1
cadena = cadena + rdr.GetName(i) + vbTab
Next
ListBox1.Items.Add(cadena)
' cadena = ""
While (rdr.Read)
cadena = ""
For i = 0 To nrocol - 1
cadena = cadena + rdr.GetValue(i) + vbTab
Next
ListBox1.Items.Add(cadena)
Console.WriteLine()
End While
conn.Close()
End Sub
Private Sub BtnAgregar_Click(sender As Object, e As EventArgs) Handles
BtnAgregar.Click
Try
conn.Open()
codalumno = txtCodAlumno.Text
nombrealumno = txtNombre.Text
FechaNac = TxtFechaNac.Text
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
Case 4
Console.WriteLine("Ingrese la fila a eliminar")
Pos = Console.ReadLine
filaReg = ds.Tables(0).Rows(Pos)
filaReg.Delete()
Case 5
conn.Open()
Dim cbd As New SqlCommandBuilder(da)
da.Update(ds, "alumnos")
conn.Close()
End Select
Loop Until Opcion = 6
Catch ex As SqlException
Console.WriteLine(ex)
Finally
conn.Close()
Console.WriteLine("Conneccion cerrada.")
End Try
Console.ReadLine()
End Sub
Public Sub RecuperarDeMatriz(ByVal nombrearchivo As String, ByRef A(,) As String,
ByRef nf As Integer, ByVal nc As Integer)
Dim srLector As StreamReader
srLector = New StreamReader(nombrearchivo)
Dim fila As Integer = 0, col As Integer
Dim cadena As String = ""
Dim subcadena As String
Dim pos As Integer = 0
Dim inicio As Integer = 1
cadena = srLector.ReadLine()
' recupera a partir de la segunda fila
cadena = srLector.ReadLine()
Do While Not (cadena Is Nothing)
cadena = cadena & Chr(9)
inicio = 1
For col = 0 To nc - 1
pos = InStr(inicio, cadena, Chr(9))
subcadena = Mid(cadena, inicio, pos - inicio)
A(fila, col) = subcadena
inicio = pos + 1
Next
fila = fila + 1
cadena = srLector.ReadLine()
Loop
nf = fila
Console.WriteLine("Archivo leido satisfactoriamente")
srLector.Close()
End Sub
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
End Sub
Private Sub btnenviar_Click(sender As Object, e As EventArgs) Handles btnenviar.Click
Try
conn.Open()
Dim cbd As New SqlCommandBuilder(da)
da.Update(ds, "alumnos")
conn.Close()
MsgBox("MODIFICACION CORRECTA")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub btnEliminar_Click(sender As Object, e As EventArgs) Handles
btnEliminar.Click
Try
Dim res As Integer
Pos = DataGridView1.CurrentCell.RowIndex
MostrarAlumno()
'
Pos = InputBox("Ingrese la fila a eliminar", "INGRESO", 2)
res = MsgBox("Realmente desea eliminar s/n", MsgBoxStyle.OkCancel)
If res = 1 Then
filaReg = ds.Tables(0).Rows(Pos)
filaReg.Delete()
MsgBox("ELIMINACION CORRECTA")
Else
MsgBox("Eliminacion cancelada ")
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub btnEditar_Click(sender As Object, e As EventArgs) Handles btnEditar.Click
'
Pos = DataGridView1.CurrentRow.Index
Dim res As Integer
res = MsgBox("Realmente desea modificar s/n", MsgBoxStyle.OkCancel)
If res = 1 Then
codalumno = txtCodigo.Text
nombrealumno = txtNombre.Text
FechaNac = TxtFechaNac.Text
ds.Tables(0).Rows(Pos).Item(0) = codalumno
ds.Tables(0).Rows(Pos).Item(1) = nombrealumno
ds.Tables(0).Rows(Pos).Item(2) = FechaNac
MsgBox("Modificacion realizada ")
Else
MsgBox("Modificacion cancelada ")
End If
End Sub
Sub Limpiar()
TBD2015B \ 7
txtCodigo.Text = ""
txtNombre.Text = ""
TxtFechaNac.Text = ""
txtCodigo.Focus()
End Sub
Private Sub btnAgregar_Click(sender As Object, e As EventArgs) Handles
btnAgregar.Click
Try
codalumno = txtCodigo.Text
nombrealumno = txtNombre.Text
FechaNac = TxtFechaNac.Text
filaReg = ds.Tables(0).NewRow()
filaReg(0) = codalumno
filaReg(1) = nombrealumno
filaReg(2) = FechaNac
ds.Tables(0).Rows.Add(filaReg)
MsgBox("SE AGREGO CORRECTAMENTE")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub btnNuevo_Click(sender As Object, e As EventArgs) Handles btnNuevo.Click
Limpiar()
End Sub
Private Sub DataGridView1_CellClick(sender As Object, e As
Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
Pos = DataGridView1.CurrentRow.Index
MostrarAlumno()
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
da.SelectCommand.CommandText = "SELECT * FROM ALUMNOS"
da.Fill(ds, "ALUMNOS")
DataGridView1.DataSource = ds.Tables(0)
End Sub
Private Sub EliminarTodoToolStripMenuItem_Click(sender As Object, e As EventArgs)
Handles EliminarTodoToolStripMenuItem.Click
With ds.Tables(0)
Dim fila As Integer
Dim filareg As DataRow
nreg = ds.Tables(0).Rows.Count
For fila = 0 To nreg - 1
filareg = ds.Tables(0).Rows(fila)
filareg.Delete()
Next
MsgBox("Operacion Realizada")
End With
TBD2015B \ 7
End Sub
Private Sub Simular(sender As Object, e As EventArgs) Handles
SimularToolStripMenuItem.Click
Dim i As Integer
With ds.Tables(0)
Dim fila As DataRow
For i = 0 To maxfilas - 1
fila = .NewRow
fila(0) = "A" & i
fila(1) = "Nombre " & i
fila(2) = "1/1/2001"
.Rows.Add(fila)
Next
DataGridView1.DataSource = ds.Tables(0)
MsgBox("Operacion Realizada")
End With
End Sub
Private Sub mnuGrabarEnArchivo_Click(sender As Object, e As EventArgs) Handles
mnuGrabarEnArchivo.Click
SaveFileDialog1.ShowDialog()
nombrearchivo = SaveFileDialog1.ShowDialog
grabar(nombrearchivo)
End Sub
Private Sub RecuperarMatriz_Click(sender As Object, e As EventArgs) Handles
mnuRecuperarMatriz.Click
OpenFileDialog1.ShowDialog()
nombrearchivo = OpenFileDialog1.ShowDialog
RecuperarDeMatriz(nombrearchivo, A, nreg, ncol)
ObtenerdeMatriz(A, nreg, ncol)
DataGridView1.DataSource = ds.Tables(0)
End Sub
Private Sub frmNormal_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load
da.Fill(ds, "Alumnos")
DataGridView1.DataSource = ds.Tables(0)
Call MostrarAlumno()
End Sub
Private Sub MoverRegistro(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnPrimero.Click, BtnAnterior.Click, BtnSiguiente.Click,
BtnUltimo.Click
Select Case sender.text
Case "<<"
TBD2015B \ 7
Pos = 0
Case "<"
If Pos > 0 Then Pos = Pos - 1
Case ">"
If Pos < ds.Tables(0).Rows.Count - 1 Then Pos = Pos + 1
Case ">>"
Pos = ds.Tables(0).Rows.Count - 1
End Select
DataGridView1.CurrentCell = DataGridView1.Rows(Pos).Cells(0)
MostrarAlumno()
End Sub
End Class
5.
Para realizar ciertas operaciones en el cliente no se puede hacer sobre toda la tabla , es
mejor crear una vista de datos
Las vistas son usadas para diversa tareas tales como
Filtrar o seleccionar registros de acuerdo a un criterio
Ordenar datos por uno o ms columnas
Buscar datos por un cierto campo clave
Actualizar datos de la tabla ya sea adicionando editando o eliminando registros ,etc
Clase DataView
Manejando Datos en una Vista
Creando una vista
La Vista se crea a partir de los datos de una tabla , mediante la propiedad DefaultView del
objeto DataTable que devuelve un Objeto DataView tal como se muestra en le siguiente
cdigo
Dim dvw As DataView =dst.Tables(n).DefaultView
Nota.- N Indica el ndice de la tabla de la cual se desea generar una vista
Por ejemplo para crear una vista de productos tenemos
Dim dvw As DataView =dst.tables(productos).DefaultView
Filtrando datos en una vista
Una vez creado la vista se puede filtrar datos de esta , es decir seleccionar ciertos
registros de acuerdo a un criterio de seleccin
Para filtrar registros de una vista se usa la propiedad RowFilter del objeto DataView. Tal
como se muestra en le siguiente cdigo
Dvw.RowFilter = criterio de seleccin
TBD2015B \ 7
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim dst As New DataSet()
Dim fila As Integer, col As Integer
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select CODALUMNO,
NOMBREALUMNO,FECHANAC From Alumnos", con)
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
dap.Fill(dst, "Alumnos")
DataGridView1.DataSource = dst.Tables(0)
End Sub
Private Sub DataGrid1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Handles DataGridView1.Click
Fila = DataGridView1.CurrentCell.RowIndex
TBD2015B \ 7
col = DataGridView1.CurrentCell.ColumnIndex
TextBox1.Text = fila
TextBox2.Text = col
ListBox1.Items.Clear()
ListBox1.Items.Add("COALU ==>" & dst.Tables(0).Rows(fila).Item(0))
ListBox1.Items.Add("NOMBRE ==>" & dst.Tables(0).Rows(fila).Item(1))
ListBox1.Items.Add("FECHANAC ==>" & dst.Tables(0).Rows(fila).Item(2))
End Sub
Private Sub PosicionarRegistro(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnPosicionar.Click
fila = Val(TextBox1.Text)
col = Val(TextBox2.Text)
DataGridView1.CurrentCell = DataGridView1(col, fila)
Dim drw As DataRow = dst.Tables(0).Rows(fila)
ListBox1.Items.Clear()
ListBox1.Items.Add("COALU ==>" & dst.Tables(0).Rows(fila).Item(0))
ListBox1.Items.Add("NOMBRE ALUMNO ==>" & dst.Tables(0).Rows(fila).Item(1))
ListBox1.Items.Add("FECHANAC ==>" & dst.Tables(0).Rows(fila).Item(2))
End Sub
End Class
Nota necesariamente debe haber un campo clave
Se se usa datagrid
DataGrid1.CurrentRowIndex = pos
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
Ejercicio1 (Modificacin Demo 49) Filtrar los registros de la tabla PAGOS por el campo
cdigo de alumno
TBD2015B \ 7
CODIGO
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Private dvw As DataView
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select CodAlumno ,NombreAlumno From Alumnos",
con)
Dim dst As New DataSet()
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
dap.Fill(dst, "ALUMNOS")
With ComboBox1
.DataSource = dst.Tables(0)
.DisplayMember = "NombreAlumno"
.ValueMember = "CodAlumno"
End With
dap.SelectCommand.CommandText = "Select
nro,fechaPago,codAlumno,Monto,Codcurso from Pagos"
dap.Fill(dst, "PAGOS")
dvw = dst.Tables(1).DefaultView
DataGridView1.DataSource = dvw
End Sub
Private Sub FiltrarPorAlumno(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Try
dvw.RowFilter = "CodAlumno ='" & ComboBox1.SelectedValue & "'"
Catch ex As Exception
'MsgBox(ex.Message)
End Try
End Sub
End Class
Nota : se podria filtrar tambien usando solo sentencias sql
TBD2015B \ 7
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select CodAlumno ,NombreAlumno From Alumnos",
con)
Dim dst As New DataSet()
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
dap.Fill(dst, "ALUMNOS")
With ComboBox1
.DataSource = dst.Tables(0)
.DisplayMember = "NombreAlumno"
.ValueMember = "CodAlumno"
End With
dap.SelectCommand.CommandText = "Select * from Pagos"
dap.Fill(dst, "PAGOS")
DataGridView1.DataSource = dst.Tables(1)
End Sub
Private Sub FiltrarPorAlumno(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Try
dst.Tables(1).Clear()
dap.SelectCommand.CommandText = "Select * from Pagos where CodAlumno ='"
& ComboBox1.SelectedValue & "'"
dap.Fill(dst, "PAGOS")
DataGridView1.DataSource = dst.Tables(1)
Catch ex As Exception
End Try
End Sub
End Class
Ejercicio 2. Filtrar por cdigo de curso
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Private dvw As DataView
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select CodCurso,NombreCurso From Cursos", con)
Dim dst As New DataSet()
TBD2015B \ 7
TBD2015B \ 7
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Private dvw As DataView
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\SI2011B\DATOS\ALUMNOS.mdf;Integrate
d Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select CodAlumno ,Monto From Pagos", con)
Dim dst As New DataSet()
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
dap.Fill(dst, " pagos1")
With ComboBox1
.DataSource = dst.Tables(0)
.DisplayMember = "Monto"
.ValueMember = "Monto"
End With
dap.SelectCommand.CommandText = "Select
nro,fechaPago,codAlumno,Monto,Codcurso from Pagos"
dap.Fill(dst, "PAGOS")
dvw = dst.Tables(1).DefaultView
DataGridView1.DataSource = dvw
End Sub
Private Sub FiltrarPorAlumno(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Try
dvw.RowFilter = "Monto =" & ComboBox1.SelectedValue
Catch ex As Exception
'MsgBox(ex.Message)
End Try
End Sub
End Class
3.2.3 ORDENANDO DATOS EN UNA VISTA
Para ordenar datos en la vista debemos usar la propiedad Sort del Objeto DataView
especificando el campo por el cual se desea realizar la ordenacin y opcionalmente
indicando en cada campo el tipo de ordenacin , que puede ser ascendente o
descendente tal como se muestra en el siguiene cdigo
dvw.Sort Campo1 [Asc|Desc] campo2 [Asc|Desc]
Nota: Por defecto si no se especifica el tipo de ordenacin , esta es ascendente
Ejemplo Ordenar la vista de productos por codigo categoria en forma ascedente y si
coinciden ordenar por codigo del proveedor en forma descendente
dws.sort= CategoryID Asc,SuplierID Desc
3.2.4 Buscando Datos en la vista
TBD2015B \ 7
Para buscar datos en la vista primero sta debe estar ordenada por el campo por el cual
se desea buscar, luego debemos usar el mtodo Find del objeto DataView pasando
como parametro el dato a buscar tal como se muestra en el siguiente codigo
Dim pos as integer = dvw.Find(dato)
Nota: El Mtodo Find devuelve un entero indicando la posicin del registro en la vista .
Si devuelve un nmero mayor o igual que el cero es que se encontr el dato ; si
devuelve -1 significa que el dato no se encuentra en dicho campo
Ejemplo Para buscar el codigo cuyo producto es 1 tenemos
dww.Sort productoID
Dim pos As integer =dvw.Find(1)
DEMO 50 ordenar y buscar datos usando una vista de datos creada a partir de una tabla .
La bsqueda se realiza por un campo numrico y por y por otro de tipo cadena de
acaracteres, para los cual los datos de la vista deben estar previamente ordenados
Ejercicio 1. Ordenando los alumnos por su codigo y luego buscar por ese campo
La tabla debe tener la siguiente estructura
TBD2015B \ 7
TBD2015B \ 7
TextBox3.Text = dvw.Table.Rows(npos).Item(2)
End If
End Sub
Private Sub BuscarPorNombre_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BuscarPorNombre.Click
Dim nombre1 As String
dvw.Sort = "Nombrealumno Asc"
nombre1 = InputBox("ingrese Nombre")
Dim drw() As DataRow = dvw.Table.Select("Nombrealumno Like '" & nombre1 & "%'")
If drw.Length > 0 Then
DataGridView1.Rows(npos).Selected = False
npos = dvw.Find(drw(0)(1))
DataGridView1.Rows(npos).Selected = True
DataGridView1.CurrentCell = DataGridView1(0, npos)
TextBox1.Text = dvw.Table.Rows(npos).Item(0)
TextBox2.Text = dvw.Table.Rows(npos).Item(1)
TextBox3.Text = dvw.Table.Rows(npos).Item(2)
End If
End Sub
End Class
Ejercicio en la tabla pagos buscar por nro de registro y codalumno ( Use el control
datagrid)
Imports System.Data.SqlClient
Public Class Form2
Inherits System.Windows.Forms.Form
Dim dvw As New DataView()
Dim npos As Integer
Dim pos As Integer
Private Sub LlenarDatos()
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select * from PAGOS ", con)
Dim dst As New DataSet()
dap.Fill(dst, "pagos")
dvw = dst.Tables(0).DefaultView
End Sub
Private Sub EnlazarDatos()
DataGrid1.DataSource = dvw
End Sub
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
LlenarDatos()
EnlazarDatos()
npos = 1
TBD2015B \ 7
End Sub
Private Sub OrdenarPorNro_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles OrdenarPorNro.Click
dvw.Sort = "Nro Asc"
End Sub
Private Sub OrdenarPorCodalumno_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles OrdenarPorCodalumno.Click
dvw.Sort = "CodAlumno Asc"
End Sub
Private Sub BuscarPorNro_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BuscarPorNro.Click
dvw.Sort = "Nro Asc"
pos = InputBox("ingrese nro de registro")
DataGrid1.UnSelect(npos)
npos = dvw.Find(pos)
DataGrid1.Select(npos)
DataGrid1.CurrentRowIndex = npos
End Sub
Private Sub BuscarCodalumno_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BuscarPorCodalumno.Click
Dim nombre1 As String
dvw.Sort = "CodAlumno Asc"
nombre1 = InputBox("ingrese Codalumno")
Dim drw() As DataRow = dvw.Table.Select("Codalumno = '" & nombre1 & "'")
If drw.Length > 0 Then
DataGrid1.UnSelect(npos)
npos = dvw.Find(drw(0)(1))
DataGrid1.Select(npos)
DataGrid1.CurrentRowIndex = npos
End If
End Sub
End Class
4. TRABAJANDO CON CONTROLES ENLAZADOS A DATOS
4.1 ENLAZANDO CONTROLES A DATOS
Cuando trabajamos con aplicaciones que manejan datos , stos se presentan en pantalla
mediante dos formas
Leyendo cada registro del repositorio de datos y mostrndolo en controles
Enlazando datos del repositorio de datos a los controles
El repositorio de datos puede ser un DataReader en un esquema conectado o una tabla
o vista en un esquema desconectado.
En la primera tcnica en cada momento hay que estar leyendo del repositorio de datos y
mostrando sobre controles simples como etiquetas o cuadros de texto o sobre controles
complejos como las listas o el DataGrid
TBD2015B \ 7
En la segunda tcnica slo una vez se realiza el enlace de datos y se muestra sobre
controles simples o complejos
Creando enlace simple
Se llama enlace simple porque se enlaza un campo de un repositorio de datos, que puede
ser una tabla o vista del Dataset a un control individual , que puede ser cualquiera de los
siguientes controles
Para crear un enlace simple sobre un control se usa el metodo Add de la coleccin
DataBidings que es una propiedad de cada control simple, pasando tres parmetros.
Nombre de la propiedad del control donde se mostrar el valor del campo, por
ejemplo , si es un control textbox debe ser la porpiedad Text si un control
CheckBox debe ser la propiedad Checked
Repositorio de datos donde se encuentra el campo, ste puede ser un DataSet , un
DataTable o un DataView.
Nombre del campo de repositorio de datos que se va a enlazar sobre el control
simple.
En resumen la sintaxis de un enlace simple queda como sigue:
ControlSimple.DatBinding.Add(Propiedad,repositorio,Campo)
Por ejemplo para enlazar el campo ProductName de una vista de productos dvw a un
cuadro de texto llamado txtNombre se tiene:
TxNombre.DataBinding.Add(text,dvw,ProductName)
EJERCICIO CREANDO ENLACE SIMPLE
Private Sub EnlazarDatos()
TextBox1.DataBindings.Add("Text", dvw, "Nombre")
End Sub
Creando enlace Complejo
Se llama enlace complejo porque se enlaza todos los campos de un repositorio de datos ,
que puede ser una tabla o vista del DataSet a un control que puede ser cualquiera de los
siguientes controles
TBD2015B \ 7
Una rejilla de datos (DataGrid) el cual si mostrar todos los campos e inclusive
puede ocultar algunos como veremos mas adelante.
Para crear un enlace complejo sobre un control se puede hacer de dos formas
Configurar sus propiedades DataSource
especificando el DataSet
DataMember el nombre de la tabla , tal como se muestra debajo;
Controlcomplejo.Datasource= dst
Controlcomplejo:DataMember= tabla
ControlComplejo.DataSource=dst.Tables(N)
y en
Imports System.Data.SqlClient
Public Class Form3
Inherits System.Windows.Forms.Form
Private Sub EnlazarAlumnoPago(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS2.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("", con)
Dim dst As New DataSet()
dap.SelectCommand.CommandText = "Select CodAlumno,NombreAlumno,FechaNac
From Alumnos"
dap.Fill(dst, "Alumnos")
TBD2015B \ 7
dap.SelectCommand.CommandText = "Select
Nro,Codalumno,Fechapago,Monto,CodCurso From pagos"
dap.Fill(dst, "Pagos")
DataGrid1.DataSource = dst.Tables(0)
DataGrid2.DataSource = dst.Tables(1)
Dim drn As New DataRelation("Relacion", dst.Tables(0).Columns(0),
dst.Tables(1).Columns(1))
dst.Relations.Add(drn)
DataGrid1.SetDataBinding(dst, "Alumnos")
DataGrid2.SetDataBinding(dst, "Alumnos.Relacion")
End Sub
End Class
Ejecutar con datagridview
4.2 DESPLAZAMIENTO EN CONTROLES ENLAZADOS A DATOS
4.2.1 Usando desplazamiento manual
En realidad para usar el dezplazamiento manual no es necesario que los controles se
enlacen a una tabla o vista de datos, sino que la tcnica consiste en leer cada registro e
ir mostrndolo cada vez que se realiza el desplazamiento.
Para usar el desplazamiento manual por uan vista realice los siguientes pasos:
1. Definir un objeto de tipo DataView para la vista de datos
Dim dvw As DataView
2. Definir una variable de tipo entero que guarde la posicin del registros actual o
registro que se desea moastrar
Dim pos as integer
3. Crear un procedimiento general que permita mostrar los datos del registro actual en
controles simples
Private Sub MostrarDatos()
Control1.text = dvw(pos)(0)
Control2.text= dvw(pos)(1)
Control2.text= dvw(pos)(2)
ControlPosicion.Text = (pos + 1).ToString & " de " & dvw.Count
End Sub
Nota: En el cdigo anterior tambin mostramos la posicin la cual empieza en 0, pero
para el usuario empieza en 1, es por eso la suma de 1
4 En el evento Load del formulario llenar los datos de la vista y llamar al procedimiento
que muestra los datos del registro actual
Escribir antes del codigo para conectarse y llenar datos en una tabla
Dwn= dst.Tables(0).DefaultView
MostrarDaos()
Nota: Al llamar por primera vez al procedimiento el valor de la variable pos es por
defecto cero, lo que permitir mostrar los datos del primer registro de la vista.
5. Para mostrar el primer registro de la vista configurar el valor de la variable pos en 0 y
llamar al procedimiento que presenta los datos.
TBD2015B \ 7
Pos =0
Mostrardatos()
6. Para mostrar el registro anterior al actual, primero verficar que no estamos sobre el
primer registro, si se cumple esta condicin disminuir en 1 el valor de la variable pos y
llamar al procedimiento que presenta los datos
If pos A 0 then
Pos = pos-1
MostrarDatos()
End if
Nota:- Si no incorporamos la condicin y retrocedieramos se genera una Excepcin al
tratar de leer una posicin negativa en la vista y mostrarla sobre el control en el
procedimietno MostrarDatos
7. Para mostrar el siguiente registro al actual , primero verificar que no estemos
sobre el ltimo regisro, si se cumple rsta condicin aumentar en 1 el valor de la
variable pos y llamar al procedimeitno que presenta los datos
If pos < dwn.Count-1 then
Pos =pos +1
MostrarDatos
End if
Nota:- Si no incorporamos la condicin y avanzariamos se genera una Excepcin al tratar
de leer una posicin inexistente en la vista y mostrarla sobre el control en el
procedimietno MostrarDatos
8. Para mostrar el ltimo registro de la vista configurar el valor de la variable pos en el
indice del ltimo regitro y llamar al procedimeitno que presenta los datos
Pos =dvw.count-1
MostrarDatos()
DEMO 52 presentar datos desde una vista en forma manual, es decir leyendo cada
registro de la vista y mostrndolo sobre controles simples ( no enlazados)
Ejercicio 1 modificar el demo 52 para el caso de los alumnos
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Private dvw As DataView
Private WithEvents cmr As CurrencyManager
Private Sub EnlazarDatos()
TextBox1.DataBindings.Add("Text", dvw, "CodAlumno")
TextBox2.DataBindings.Add("Text", dvw, "NombreAlumno")
TextBox3.DataBindings.Add("Text", dvw, "FechaNac")
cmr = Me.BindingContext(dvw)
End Sub
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("", con)
Dim dst As New DataSet()
dap.SelectCommand.CommandText = "Select codAlumno,NombreAlumno,fechaNac
From alumnos"
dap.Fill(dst, "Alumnos")
dvw = dst.Tables(0).DefaultView
DataGridView1.DataSource = dst.Tables(0)
EnlazarDatos()
lblCont.Text = cmr.Position + 1 & " de " & cmr.Count
End Sub
Private Sub MoverRegistro(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnPrimero.Click, BtnAnterior.Click, BtnSiguiente.Click,
BtnUltimo.Click
TBD2015B \ 7
TBD2015B \ 7
dap.Fill(dst, "Alumnos")
dvw = dst.Tables(0).DefaultView
DataGridView1.DataSource = dst.Tables(0)
End Sub
Private Sub EnlazarDatos()
DataGridView1.DataSource = dvw
cmr = Me.BindingContext(dvw)
End Sub
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
LlenarDatos()
EnlazarDatos()
End Sub
Private Sub BuscarPorNombre_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnBuscarPorNombre.Click
dvw.Sort = "NombreAlumno"
Dim pos As Integer
DataGridView1.CurrentRow.Selected = True
Dim drw() As DataRow = dvw.Table.Select("NombreAlumno Like '" & TextBox1.Text &
"%'")
If drw.Length > 0 Then
pos = dvw.Find(drw(0)(1))
If pos > -1 Then
cmr.Position = pos
'DataGridView1.Select(pos)
npos = pos
End If
End If
End Sub
End Class
Nota. Se pinta el registro seleccionado
1.3 FORMATEANDO CONTROLES ENLAZADOS A DATOS
1.3.1 Formatenado Controles simples
Cuando enlazamo datos a controles , muchas veces queremos que los datos se
presentan con un cierto formato, por ejemplo nmeros con decimales o smboles de
moneda
Para formatear un campo de control enlazado a datos realice los siguiente:
1 Definir el Nameespace para trabajar con la enumeracin NumberStyles
Imports Systems.Globalization
2. Crear un procedimiento que convierta el numero decimal a cadena
Private Sub FormtearDecimalAstring(ByVal sender As Object ,
convertEventArg)
C.value=Format(c.value,#,00)
End sub
ByVal
TBD2015B \ 7
ByVal
c As
4 crear un objeto de la clase Binding que representa un enlace simple entre el valor de
la propiedad de un objeto (un campo de la vista) y el valor de la propiedad de un
control(Texto)
Dim ObjEnlace as New Binding(text,dvw,campo)
5 Crear dos manejadores de eventos en tiempo de ejecucin , uno para el evento Format
y otro para el evento Parse del objeto de enlace (Binding):
AddHandler.ObjEnlace.Format.AddressOf FormatearDecimalAString
AddHandler.ObjEnlace.Parse .AddressOf ParsearStringADecimal
Observaciones:
El evento Format del Objeto Binding se produce cuando la propiedad de un control
est enlazado a un valor de datos.
El Evento Parse del objeto Bindig se produce cuando cambia el valor de un control
enlazado a datos
6 Aadir al objeto de enlace sencillo creado a la coleccin de enlaces del control donde
se desea dar formato
Control.DataBinding .Add(ObjEnlace)
7 Finalmente crear el objeto CurrencyManager que apunte a todos los controles del
formulario enlazado a la vista
cmr= Me.BindngContext(dvw)
DEMO 55 formatear controles con enlace simple especificamente aprenderemos a dar
formato decimal a un nmero de un campo enlazado a un control simple
Ejercicio 1. Modificar el demo 55 para el caso de los alumnos
TBD2015B \ 7
Imports System.Data.SqlClient
Imports System.Globalization
Public Class Form1
Inherits System.Windows.Forms.Form
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Private dvw As DataView
Private WithEvents cmr As CurrencyManager
Private Sub FormatearDecimalAString(ByVal sender As Object, ByVal c As
ConvertEventArgs)
c.Value = Format(c.Value, "#.00")
End Sub
Private Sub ParsearStringADecimal(ByVal sender As Object, ByVal c As
ConvertEventArgs)
c.Value = Decimal.Parse(c.Value, NumberStyles.Currency)
End Sub
Private Sub FormatearFechaaCadena(ByVal sender As Object, ByVal c As
ConvertEventArgs)
c.Value = Format(c.Value, DateAndTime.DateString)
End Sub
Private Sub EnlazarDatos()
TextBox1.DataBindings.Add("Text", dvw, "Nro")
TextBox2.DataBindings.Add("Text", dvw, "CodAlumno")
TextBox3.DataBindings.Add("text", dvw, "FechaPago")
TextBox4.DataBindings.Add("text", dvw, "Monto")
Dim pre As New Binding("Text", dvw, "Monto")
AddHandler pre.Format, AddressOf FormatearDecimalAString
AddHandler pre.Parse, AddressOf ParsearStringADecimal
TextBox4.DataBindings.Add(pre)
cmr = Me.BindingContext(dvw)
End Sub
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("", con)
Dim dst As New DataSet()
dap.SelectCommand.CommandText = "Select Nro , FechaPago, Codalumno,
Monto,Codcurso FechaNac From Pagos"
dap.Fill(dst, "Pagos")
dvw = dst.Tables(0).DefaultView
DataGrid1.DataSource = dst.Tables(0)
EnlazarDatos()
Label4.Text = cmr.Position + 1 & " de " & cmr.Count
End Sub
Private Sub MoverRegistro(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnPrimero.Click, BtnAnterior.Click, BtnSiguiente.Click,
BtnUltimo.Click
Select Case sender.Tag
TBD2015B \ 7
Case "1" :
cmr.Position = 0
Case "2":
If cmr.Position > 0 Then cmr.Position = cmr.Position - 1
Case "3":
If cmr.Position < cmr.Count - 1 Then cmr.Position = cmr.Position + 1
Case "4":
cmr.Position = cmr.Count - 1
End Select
DataGrid1.CurrentRowIndex = cmr.Position
End Sub
Private Sub MostrarPosicion(ByVal sender As Object, ByVal e As System.EventArgs)
Handles cmr.PositionChanged
Label4.Text = cmr.Position + 1 & " de " & cmr.Count
End Sub
End Class
Como formatear campo fecha
4.3.2 FORMATEANDO EL DATAGRID
El Control Datagrid quiz see el control ms usado en las plicaciones Windows para
presentar datos en un tabla , vista o estructura matricial, pero por defecto ya viene con un
formato o estiilo predefinido
Hay tres aspectos del formato del Control DataGrid que son:
Definir propiedades para establecer un estilo predeteminado con el que mostrar los
datos
Personalizar el modo en que se muestran determinadas tablas en tiempo de ejecucin
Modificar las columnas que se muestran en el DataGrid asi como los colores y otros
aspecto del formato mostrado
El Primer tipo de formato , se logra configurando propiedades en tiempo de diseo y los
otros dos se logran en tiempo de ejecucin mediante cdigo.
Clase DataGrid
Para ambos caso necesitamos conocer los miembros de la clase Datagrid que
describiremos a continuacin
Ejercicio 1. Modificacin del demo 56 formateara al DataGrid para el caso de los alumnos
Imports System.Data.SqlClient
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Dim cadenaconexion = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS1.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim Conexion As New SqlConnection(cadenaconexion)
Dim DAlumnos As New SqlDataAdapter("SELECT * FROM Alumnos", Conexion)
Dim DataSet As New DataSet()
Private Sub frmNormal_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load
DAlumnos.Fill(DataSet, "consulta")
DataGridView1.DataSource = DataSet.Tables(0)
End Sub
Private Sub Btnformatear_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Btnformatear.Click
'DataGridView1.Columns(1).DefaultCellStyle.Font
Dim cellStyle As New DataGridViewCellStyle
Dim fila As Integer
cellStyle.Font = New Font("ARIAL", 11, FontStyle.Bold)
Me.DataGridView1.ColumnHeadersDefaultCellStyle = cellStyle
DataGridView1.DefaultCellStyle.Font = New Font("ARIAL", 10)
DataGridView1.Columns(1).DefaultCellStyle.Font = New Font("ARIAL Black", 10)
For fila = 0 To DataSet.Tables(0).Rows.Count - 1
DataGridView1.Rows(fila).Cells(0).Style.BackColor = Color.FromArgb(0, 255, 0)
DataGridView1.Rows(fila).Cells(1).Style.BackColor = Color.FromArgb(255, 255, 0)
DataGridView1.Rows(fila).Cells(2).Style.BackColor = Color.FromArgb(0, 255, 255)
DataGridView1.Rows(fila).Cells(0).Style.ForeColor = Color.FromArgb(255, 0, 0)
Next
End Sub
End Class
EJERCICIO CON BINDING NAVIGATOR
TBD2015B \ 7
Objeto
BindingNavigato
r
DataGridView
propiedad
DataSource
Valor
TbAlumnosBindingSource
DataSource
TbAlumnosBindingSource
TBD2015B \ 7
Imports System.Data.SqlClient
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim connstring As String = "Data Source=.\sqlexpress;Integrated
Security=True;database=alumnos"
TBD2015B \ 7
TBD2015B \ 7
Imports System.Data.SqlClient
Public Class Form1
Private Sub btnEsquema_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnEsquema.Click
Dim Conexion As New SqlConnection()
Conexion.ConnectionString = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\DATOS\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim DataSet As New DataSet()
' crear adaptadores de datos para las tablas
' y aadir cada tabla al dataset con el adaptador
Dim DataAdapter As SqlDataAdapter
DataAdapter = New SqlDataAdapter("SELECT * FROM ALUMNOS", Conexion)
DataAdapter.Fill(DataSet, "alumnos")
DataAdapter = Nothing
DataAdapter = New SqlDataAdapter("SELECT * FROM CURSOS", Conexion)
DataAdapter.Fill(DataSet, "CURSOS")
DataAdapter = Nothing
DataAdapter = New SqlDataAdapter("SELECT * FROM PAGOS", Conexion)
DataAdapter.Fill(DataSet, "PAGOS")
DataAdapter = Nothing
' crear un objeto tabla y columna para mostrar
' la informacin del esquema que el dataset contiene
Dim DataTable As DataTable
Dim DataColumn As DataColumn
Me.ListBox1.Items.Add("Estructura del DataSet")
' recorrer la coleccin de tablas del DataSet
For Each DataTable In DataSet.Tables
Me.ListBox1.Items.Add("Tabla: " & DataTable.TableName)
' recorrer la coleccin de columnas de la tabla
For Each DataColumn In DataTable.Columns
Me.ListBox1.Items.Add("Campo: " & _
DataColumn.ColumnName & " --- " & _
"Tipo: " & DataColumn.DataType.Name)
Next
Next
End Sub
End Class
Configurar un control combobox
TBD2015B \ 7
TBD2015B \ 7
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\datos\ALUMNOS.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Private Sub BtnmostrarSQL_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnmostrarSQL.Click
Dim dst As New DataSet
Dim cadena As String
cadena = TextBox2.Text
Dim CADENASQL As String
CADENASQL = " SELECT * FROM PAGOS WHERE CODALUMNO='" &
TextBox2.Text & "'"
TextBox1.Text = CADENASQL
Dim dap As New SqlDataAdapter(cadenasql, con)
dap.Fill(dst, "PAGOS")
DataGridView1.DataSource = dst.Tables(0)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim dst As New DataSet
Dim NREG As Integer
Dim dap As New SqlDataAdapter("SELECT * FROM ALUMNOS ", con)
dap.Fill(dst, "ALUMNOS")
DataGridView1.DataSource = dst.Tables(0)
NREG = dst.Tables(0).Rows.Count
For I = 0 To NREG - 1
ComboBox1.Items.Add(dst.Tables(0).Rows(I).Item(0))
Next
End Sub
TBD2015B \ 7
TBD2015B \ 7
TBD2015B \ 7
Categories
CustomerCustomerDemo
EmploerDemographics
Custumers
Employees
Products
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\SI2013B\CDSI2013B\DATOS\northwnd.m
df;Integrated Security=True;Connect Timeout=30;User Instance=True"
Dim dst As DataSet
TBD2015B \ 7
TBD2015B \ 7
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
' variables a nivel de clase para la manipulacin de datos
Private DataAdapter As SqlDataAdapter
Private DataSet As DataSet
Private Sub frmNormal_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' crear conexin
Dim Conexion As New SqlConnection()
Conexion.ConnectionString = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\SI2013B\CDSI2013B\DATOS\northwnd.m
df;Integrated Security=True;Connect Timeout=30;User Instance=True"
' crear adaptadores
Dim DCATEGORIES As New SqlDataAdapter("SELECT * FROM CATEGORIES",
Conexion)
Dim DORDER As New SqlDataAdapter("SELECT * FROM ORDERS", Conexion)
Dim DPRODUCTS As New SqlDataAdapter("SELECT * FROM PRODUCTS",
Conexion)
Dim DSUPPLIERS As New SqlDataAdapter("SELECT * FROM SUPPLIERS",
Conexion)
' crear dataset
Dim DataSet As New DataSet()
DCATEGORIES.Fill(DataSet, "CATEGORIAS")
TBD2015B \ 7
DORDER.Fill(DataSet, "ORDENES")
DPRODUCTS.Fill(DataSet, "PRODUCTOS")
DSUPPLIERS.Fill(DataSet, "PROVEEDORES")
' asignar dataset a datagrid
Me.DataGrid1.DataSource = DataSet
End Sub
End Class
TAREA PARA LOS ALUMNOS DE SISTEMAS DE INFORMACION 2015A
Cada grupo debe armar su sistema de base de datos en el software que prefiera por
ejemplo en Excel, Access, Visual Basic 2010,2012 , SQL server Etc
Bajar su sistema y un Pc y demostrar
Jugar con la base de datos , como realizar consultas, de seleccin , actualizacin de datos
etc.
EJEMPLO SIMPLE DE BASE DE DATOS
Se tiene el sistema Segunda especialidad
Compuesto por las siguientes tablas
TABLA ALUMNOS
CODALUMN
O
A1
A2
A3
A4
A5
A6
FECHANA
NOMBRE C
JUAN
01/01/1970
KAREN
01/01/1977
CARLOS
01/01/1980
JORGE
01/01/1990
MARIA
01/01/1993
JORGE
30/04/1980
SEXO
H
M
H
H
M
H
PROFESION
INGENIERO GEOLOGO
INGENIERO INDUSTRIAL
INGENIERO CIVIL
ARQUETECTO
ENFERMERA
PROFESOR
TABLA CURSOS
CODCURSO
AD
M1
C1
C2
C3
C4
NOMBRECURSO
Admision
Matrcula 1
Ergonomia
Gestin de Recursos Humanos
Condiciones de Seguridad
Salud Ocupacional
TABLA PAGOS
NR
CODALUMN
FECHAPAG
TIPO
NRODO
RUNS
MONT
CODCURS
OB
TBD2015B \ 7
O
1 A1
2
3
4
5
01/04/2007 RECIBO
A2
A1
A3
A2
01/12/2007
01/02/2008
01/03/2008
01/02/2009
FACTURA
VOUCHER
RECIBO
RECIBO
TRANSFERENCI
02/04/2009 A
6 A1
7 A4
8 A4
03/05/2009 FACTURA
04/08/2009 VOUCHER
O
100
O
100 AD
F1
V1
2
3
100
200
300
400
100
200
100
200
T1
500
200 C2
F2
V2
500
600
AD
C1
AD
C2
200 AD
200 C1
TABLA NOTAS
I
D
1
2
3
4
5
6
7
8
CODALUMN
O
A1
A1
A1
A2
A2
A2
A3
A4
TABLA PROFESORES
CODPROFE NOMBREPROFE
SOR
SOR
PROFESION
INGENIERO
P1
GOMEZ
CIVIL
INGENIERO DE
P2
RIOS
SEGURIDAD
P3
PEREZ
MEDICO
P4
LOPEZ
MINAS
INGENIERO
P5
TORRES
INDUSTRIAL
TABLA EGRESOS
ID
FECHA
1 01/01/2006
2 02/02/2007
3 02/03/2008
4 02/04/2009
MOTIVO
Pago profesores
pago proveedores
pago Profesores
Gastos varios
PROCEDEN
CIA
AREQUIPA
LIMA
AREQUIPA
TACNA
PUNO
MONTO
100
150
500
300
COD CURSO
C1
C1
C2
C4
CE
VE
SH
R
TBD2015B \ 7
TBD2015B \ 7
TABLA PROFESORES
Elaborar un listado de profesores procedentes de LIMA
Elaborar un listado de Profesores cuyo nombre contenga contiene la palabra TORRES
TABLA EGRESOS
Listado de tabla egresos
Listado de tabla de egreso por fecha
SUBTOTALES
TABLA NOMBRES
Cantidad de registros de la tabla nombres
Cantidad de mujeres
Cantidad de varones mayores de 25 aos
Cantidad de Ingenieros
Subtotales por profesin
Cantidad de alumnos por ao
TABLA CURSOS
Cantidad de registros de la tabla cursos
TABLA PAGOS
Cantidad de registros de la tabla pagos
Subtotales por tipo de pago
Subtotales por alumno
Subtotales por curso
Subtotales por ao
Cantidad de pagos por ao
Promedio de pagos por curso
Promedio de pagos por alumnos
TABLA NOTAS
Subtotales de cantidad de aprobados y desaprobados y porcentaje
Promedio de notas por curso
Mostrar el cdigo del alumno que tiene la mas alta nota
Mostrar el cdigo del curso donde esta la minima nota
Mostra el nombre del alumno que tiene la mas alta nota
TABLA PROFESORES
Cantidad de profesores
Subtotales de profesores por profesin
Subtotales de profesores por procedencia
Cuantos profesores son de LIMA
FILTROS EN VARIAS TABLAS
Dado el nombre de un alumno que muestre sus notas
Dado el nombre del alumno que muestre sus pagos
TBD2015B \ 7
Dado el nombre del curso que liste la cantidad de alumnos que llevaron el curso y cuanto
pagaron
Elaborar un listado donde figure el cdigo del alumno, el nombre del alumno , y total de
sus pagos
Dado el nombre del profesor que liste en que cursos ha enseado
CUADRICULAS
Cuadricula de notas de alumnos cursos
Cuadricula de pagos aos meses
Cuadriculas de pagos alumnos meses
Dado el nombre del alumno elaborar una cuadricula que muestre sus pagos ao mes
Cuadricula alumno y tipo de pago
Cuadricula de ao tipo de pago
Cantidad y total de pagos por aos
Cantidad y total de pagos por alumno
Subtotal alumnos pagos
Elabore unin de tablas
OTROS
Encontrar la edad de los alumnos en la tabla Nombres
SELECT CODALUMNO,NOMBRE ,FECHANAC, (NOW-FECHANAC)/365.24219879 AS
EDAD FROM [ALUMNOS$]
Listado de alumnos que no pagaron
Dado el cdigo del alumno , elaborar un listado de sus notas y sus pagos
Listado de alumnos que no tienen notas
Listar alumnos que cuya ultima fecha de pago es mas de dos aos
Elaborar balance por aos
Balance por curso
Saldos de alumnos
Permanencia de alumno en la especialidad
ultima fecha que aparece el nombre del alumno
Listar los alumnos por aos ( en la tabla pagos)
CONSULTAS DE ACTUALIZACION
Adicionar un nuevo registros a la tabla alumnos
Adicionar un nuevo registros a la Cursos
Actualizar los pagos
Eliminar un registro de la tabla notas
Eliminar todos los registros de la tabla notas de alumnos que no pagaron
Aumentar el pago de profesores en un 10 %
TBD2015B \ 7