View
350
Download
9
Category
Preview:
Citation preview
Universidad Nacional de
Cajamarca
Facultad de Ingeniería
Escuela Académico Profesional de Ingeniería de
Sistemas
CURSO : PROGRAMACIÓN APLICADA I
TEMA : MANUAL SEGUNDA PARTE
INTEGRANTES: LEIVA IZQUIERDO, Albert
DOCENTE : Ing. CALOS APARACIO
CICLO : VI
ALUMNO: ALBERT SMITH LEIVA
2
Manejo de MENUS
TOOL STRIP BOX: Permite la creación de una barra de Menús con imágenes
LLAMADA DE UN FORMULARIO A OTRO : Form2.MdiParent = Me
Form2.Show()
Configuración de la colección de Imágenes para el Tool Strip
ALUMNO: ALBERT SMITH LEIVA
3
El tool Strip quedaría de la siguiente forma:
Para crear image list y ToolStrip Bottom:
Public Class Form1 Private Sub ToolStripButton1_Click(sender As System.Object, e As System.EventArgs) End Sub Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load ToolStrip1.ImageList = ImageList1
ToolStripButton1.ImageIndex = 0 ToolStripButton2.ImageIndex = 1
ToolStripButton3.ImageIndex = 2 ToolStripButton4.ImageIndex = 3
End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
4
Menú con Tool Strip, con iconos programados para abrir nuevos formularios:
ToolTip: Ayudas que aparecen cuando pasamos el cursor del mouse por un determinado botón.
ALUMNO: ALBERT SMITH LEIVA
5
Para alojar páginas web dentro de una aplicación, para estos e utiliza la herramienta Web Browser:
Public Class Form2 Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Try PictureBox1.Image = Image.FromFile("D:\Software\Proyecto Ejercicios con menu\Proyecto Ejercicios con menu\bin\Debug\Ccomp.bmp") Catch ex As Exception MessageBox.Show("ex.message") End Try Try PictureBox2.Image = Image.FromFile("D:\Software\Proyecto Ejercicios con menu\Proyecto Ejercicios con menu\bin\Debug\programador1.jpg") Catch ex As Exception MessageBox.Show("ex.message") End Try PictureBox2.Image = Image.FromFile("D:\Software\Proyecto Ejercicios con menu\Proyecto Ejercicios con menu\bin\Debug\programador1.jpg") RichTextBox1.LoadFile("D:\Software\Proyecto Ejercicios con menu\Proyecto Ejercicios con menu\bin\Debug\Ccomputing.rtf") End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
6
Navegamos en una página web a partir de una aplicación:
Public Class Form3 Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load WebBrowser1.Navigate("http://www.google.com.pe/") End Sub End Class
Public Class Form3 Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load WebBrowser1.Navigate("http://www.google.com.pe/") End Sub Private Sub WebBrowser1_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted End Sub ‘PARA AGREGAR UNA PAGINA MANUAL Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate(TextBox1.Text) End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
7
Ejercicio con base de datos
Código:
Imports System.Data.SqlClient Public Class Form6 Private Sub RadioButton2_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RadioButton2.CheckedChanged Dim datos As New SqlDataAdapter("compra", conex) datos.SelectCommand.CommandType = CommandType.StoredProcedure datos.SelectCommand.Parameters.Add("@com", SqlDbType.VarChar, 20).Value = 0 Dim ds As New Data.DataSet datos.Fill(ds, "Alumnoss") DataGridView1.DataSource = ds.Tables(0) End Sub Private Sub RadioButton1_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RadioButton1.CheckedChanged End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
8
CREANDO UN Modulo
Module Module1 Public conex As New System.Data.SqlClient.SqlConnection("server=.;database = semana_sistemica;trusted_connection=true") End Module
ALUMNO: ALBERT SMITH LEIVA
9
LLENAR UNA BASE DE DATOS A PARTIR DE UN EXCEL Para eso tenemos que guardar el archivo Excel como CSV (delimitado por comas)
ALUMNO: ALBERT SMITH LEIVA
10
Para poder llevar los datos del archivo .csv a Sqlserver, haremos el siguiente código:
Y para conectarlo a Visual Studio se utiliza:
Para conectarnos al formulario:
bulk
insert dbo.Estudiantesnew
from 'C:\Users\Ing. Sistemas\Desktop\alumnos.csv'
with
(
fieldterminator = ',',
rowterminator = '\n'
Imports System.Data.SqlClient
Imports System.Data.SqlClient Public Class WebForm1 Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim conex As New SqlConnection("server = localhost;database = Northwind; trusted_connection = true") 'puede ser ip, (local),nombre de BD, nombre servidor Dim datos As New SqlDataAdapter("select*from Estudiantesnew", conex) Dim ds As New Data.DataSet datos.Fill(ds, "Alumnos") GridView1.DataSource = ds.Tables("Alumnos")
ALUMNO: ALBERT SMITH LEIVA
11
Y para conectarlo a Visual Studio UNA BASE DE DATOS se utiliza:
Imports System.Data.SqlClient: Establece la librería para la conexión de Visual Studio con SqlServer, esto garantiza el manejo de datos provenientes de SQL server en Visual Studio.
server = localhost;database = Northwind; trusted_connection = true": Cadena de conexión al Servidor, este sirve para establecer la conexión con la base de datos con la que se va a trabajar.
SqlDataAdapter (clase): SqlDataAdapter, se utiliza como un puente entre DataSet y SQL Server para recuperar y guardar datos. SqlDataAdapter proporciona este puente mediante la asignación de Fill, que cambia los datos en DataSet para que coincidan con los datos del origen de datos; y Update, que cambia los datos en el origen de datos para que coincidan con los datos en DataSet utilizando las instrucciones de Transact-SQL en el origen de datos adecuado.
DataSet (clase): que es una caché de memoria interna de datos recuperados de un origen de datos, representa un componente fundamental de la arquitectura de ADO.NET. DataSet está compuesto por una colección de objetos DataTable que se pueden relacionar entre ellos mediante objetos DataRelation. También se puede imponer la integridad de los datos de DataSet mediante los objetos UniqueConstraint y ForeignKeyConstraint. Para obtener información más detallada sobre el trabajo con objetos DataSet
Fill: Rellena un objeto DataSet o un objeto DataTable. Data source = origen de datos de data set
Para poder visualizar los datos traídos por el dataset se utiliza, DataGridView:
DATAGRIDVIEW: Proporciona una tabla personalizable para mostrar datos. La clase
DataGridView permite personalizar celdas, filas, columnas y bordes Puede utilizar un
control DataGridView para mostrar datos con o sin un origen de datos subyacente. Sin
ALUMNO: ALBERT SMITH LEIVA
12
especificar un origen de datos, puede crear las columnas y filas que contendrán los
datos y agregarlas directamente a DataGridView.
Páginas Web en Visual
En una Aplicación web:
En un GridView:
Imports System.Data.SqlClient Public Class WebForm1 Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim conex As New SqlConnection("server=.;database=northwind; trusted_connection=true") 'puedes usar en server = localhost, . , o ip Dim datos As New SqlDataAdapter("select * from estudiantes", conex) Dim ds As New Data.DataSet datos.Fill(ds, "Alumnos") GridView1.DataSource = ds.Tables("Alumnos") GridView1.DataBind() End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
13
ALUMNO: ALBERT SMITH LEIVA
14
ALUMNO: ALBERT SMITH LEIVA
15
ALUMNO: ALBERT SMITH LEIVA
16
EJERCICIOS
Buscar Alumno por código
Código en visual para el buton1
Imports System.Data.SqlClient Public Class Form4 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim datos As New SqlDataAdapter("busca_alum_cod", conex) datos.SelectCommand.CommandType = CommandType.StoredProcedure datos.SelectCommand.Parameters.Add("@p", SqlDbType.VarChar, 10).Value = TextBox1.Text Dim ds As New Data.DataSet datos.Fill(ds, "por_nombre") DataGridView1.DataSource = ds.Tables("por_nombre") End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
17
Código en visual para el evento keypress para que funcione solo con
el enter:
ALUMNO: ALBERT SMITH LEIVA
18
BUSCAR ALUMNO POR SEXO
Imports System.Data.SqlClient
Imports System.Data.SqlClient Public Class Form4 Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress If e.KeyChar = Chr(13) Then Dim datos As New SqlDataAdapter("busca_alum_cod", conex) datos.SelectCommand.CommandType = CommandType.StoredProcedure datos.SelectCommand.Parameters.Add("@p", SqlDbType.VarChar, 10).Value = TextBox1.Text Dim ds As New Data.DataSet datos.Fill(ds, "por_nombre") DataGridView1.DataSource = ds.Tables("por_nombre") End If End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
19
Public Class Form3 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click If RadioButton1.Checked Then Dim datos As New SqlDataAdapter("select * from estudiantes where sexo=1", conex) Dim ds As New Data.DataSet datos.Fill(ds, "alumnos") DG.DataSource = ds.Tables(0) ElseIf RadioButton2.Checked Then Dim datos As New SqlDataAdapter("select * from estudiantes where sexo=2", conex) Dim ds As New Data.DataSet datos.Fill(ds, "alumnos") dg.DataSource = ds.Tables(0) End If End Sub End Class
CONSULTAS A BASES DE DATOS
(USANDO SQL SERVER 2008 AND VISUAL STUDIO 2010)
MdiParent: Habilita un formulario para que actué como padre de otro, esto equivale a
decir que este habilitado para poder llamarlo (abrirlo o activarlo) en el momento
conveniente. Para poder utilizar esta propiedad, el código será:
ToolStripMenú: Permite la creación de menús con imágenes y texto, para hacer más
fácil el enlace de un formulario a otro.
1) Comenzaremos creando, un Formulario, con un Menú gráfico de tal manera
que cada uno de estos nos permita el acceso a: Mantenimiento, Consultas,
Reportes
Dim FRM As New Form2 FRM.MdiParent = Me FRM.Show()
ALUMNO: ALBERT SMITH LEIVA
20
Por ejemplo para acceder a la primera consulta del menú, el código será:
2) La primera consulta será, indicar el número de Productos por Categoría:
DATA.SELECTCOMMAND.COMMANDTYPE =
COMMANDTYPE.STOREDPROCEDURE: Línea de Código utilizada para
indicar el tipo de commando Sql que se va a implementar. Sea este una
consulta, o un procedimiento almacenado.
data.SelectCommand.Parameters.Add("@aaaa", SqlDbType.Int).Value = :
Comando utilizado para agregar parámetros (si los hubiera) a una búsqueda.
DataGridView1.DataSource = ds.Tables("QUERY7"): Indica en datagriew o
vista se mostrarán los datos de la consulta SQL realizada.
Public Class Form1 Private Sub NumeroDeProductosPorCategoriaToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles NumeroDeProductosPorCategoriaToolStripMenuItem.Click Form2.MdiParent = Me Form2.Show() End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
21
El código en Visual Studio será:
Imports System.Data.SqlClient Public Class Form2 Private Sub Form2_Load(sender As Object, e As System.EventArgs) Handles Me.Load Dim data As New SqlDataAdapter("quary", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.Fill(ds, "QUERY1") DataGridView1.DataSource = ds.Tables("QUERY1") End Sub End Class
Consulta:
create proc quary
as
select c.CategoryName,SUM(p.CategoryID)as total
from Products p join Categories c on c.CategoryID=p.CategoryID
group by c.CategoryName
ALUMNO: ALBERT SMITH LEIVA
22
3) La siguiente consulta será mostrar un listín de productos por cada categoría,
indicando el nombre de esta:
Imports System.Data.SqlClient Public Class Form3 Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 'TODO: esta línea de código carga datos en la tabla 'NorthwindDataSet.Categories' Puede moverla o quitarla según sea necesario. Me.CategoriesTableAdapter.Fill(Me.NorthwindDataSet.Categories) End Sub Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged Dim data As New SqlDataAdapter("catego_id", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@c", SqlDbType.Int).Value = ComboBox1.SelectedValue data.Fill(ds, "QUERY2") DataGridView1.DataSource = ds.Tables("QUERY2") End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
23
Procedimiento:
create proc catego_id
@c int
as
select p.ProductID,p.ProductName,p.UnitPrice,s.CompanyName,c.CategoryID
from Products p join Categories c on c.CategoryID=p.CategoryID join
Suppliers s
on s.SupplierID=p.SupplierID
where c.CategoryID=@c
4) Consultar Productos dentro del rango de precio indicado en el formulario:
5) Busca productos que tengan coincidencia al empezar.
Imports System.Data.SqlClient Public Class Consulta03 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim data As New SqlDataAdapter("QUERY3", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@PMAYOR", SqlDbType.Int).Value = TextBox1.Text data.SelectCommand.Parameters.Add("@PMENOR", SqlDbType.Int).Value = TextBox2.Text data.Fill(ds, "QUERY3") DataGridView1.DataSource = ds.Tables("QUERY3") End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
24
Imports System.Data.SqlClient Public Class Consulta04 Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress Dim data As New SqlDataAdapter("QUERY4", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@T", SqlDbType.VarChar).Value = TextBox1.Text data.Fill(ds, "QUERY4") DataGridView1.DataSource = ds.Tables("QUERY4") End Sub End Class
CREATE PROC QUERY4
@T VARCHAR(4)
AS
SELECT ProductName, UnitPrice,CategoryID,SupplierID
FROM Products
WHERE ProductName LIKE @T+'%'
ALUMNO: ALBERT SMITH LEIVA
25
6) Información del producto, buscando por su pertenencia al proveedor.
CREATE PROC QUERY5
@SID AS INT
AS
SELECT ProductName,UnitPrice,UnitsInStock, S.SupplierID, S.CompanyName
FROM Products P INNER JOIN Suppliers S ON
P.SupplierID = S.SupplierID
WHERE @SID = S.SupplierID
Imports System.Data.SqlClient Public Class Consulta05 Private Sub Consulta05_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 'TODO: esta línea de código carga datos en la tabla 'NorthwindDataSet1.Suppliers' Puede moverla o quitarla según sea necesario. Me.SuppliersTableAdapter.Fill(Me.NorthwindDataSet1.Suppliers) End Sub Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged Dim data As New SqlDataAdapter("QUERY5", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@SID", SqlDbType.Int).Value = ListBox1.SelectedValue data.Fill(ds, "QUERY5") DataGridView1.DataSource = ds.Tables("QUERY5") End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
26
7) Búsqueda de clientes por el Order ID de las Órdenes de Compras en las que aparece.
CREATE PROC QUERY6
@OID AS INT
AS
SELECT O.OrderID,Products.ProductID, Products.ProductName, Products.ProductID
FROM Orders O INNER JOIN [Order Details] OD ON O.OrderID=OD.OrderID INNER JOIN
Products ON Products.ProductID = OD.ProductID
WHERE O.OrderID = @OID
ALUMNO: ALBERT SMITH LEIVA
27
8) Consulta de productos con o sin stock:
+
Imports System.Data.SqlClient Public Class Consulta07 Private Sub RadioButton1_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RadioButton1.CheckedChanged Dim data As New SqlDataAdapter("QUERY7", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.Fill(ds, "QUERY7") DataGridView1.DataSource = ds.Tables("QUERY7") End Sub
CREATE PROC QUERY8
AS
SELECT ProductID,ProductName,UnitPrice,UnitsInStock
FROM Products
WHERE UnitsInStock= 0
CREATE PROC QUERY7
AS
SELECT ProductID,ProductName,UnitPrice,UnitsInStock
FROM Products
WHERE UnitsInStock!=0
ALUMNO: ALBERT SMITH LEIVA
28
9) Consulta de Productos Descontinuados con Check Box
CREATE PROC QUERY9
@D AS BIT
AS
SELECT ProductName,UnitPrice,UnitsInStock, CategoryID, Discontinued
FROM Products
where Discontinued = @D
Imports System.Data.SqlClient Public Class Consulta08 Private Sub CheckBox1_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBox1.CheckedChanged Dim data As New SqlDataAdapter("QUERY9", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@D", SqlDbType.Bit).Value = CheckBox1.Checked data.Fill(ds, "QUERY9") DataGridView1.DataSource = ds.Tables("QUERY9") End Sub
ALUMNO: ALBERT SMITH LEIVA
29
10) Consulta de productos por nombre.
Imports System.Data.SqlClient Public Class Form1 Private Sub TextBox1_KeyPress1(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress If (e.KeyChar = ChrW(13)) Then If (ListBox1.SelectedIndex = 0) Then Dim data As New SqlDataAdapter("EJER11", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@P", SqlDbType.VarChar).Value = TextBox1.Text data.Fill(ds, "EJER11") DataGridView1.DataSource = ds.Tables("EJER11") ElseIf (ListBox1.SelectedIndex = 1) Then Dim data As New SqlDataAdapter("EJER12", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@P1", SqlDbType.VarChar).Value = TextBox1.Text data.Fill(ds, "EJER12") DataGridView1.DataSource = ds.Tables("EJER12") ElseIf (ListBox1.SelectedIndex = 2) Then Dim data As New SqlDataAdapter("EJER13", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@P2", SqlDbType.VarChar).Value = TextBox1.Text data.Fill(ds, "EJER13") DataGridView1.DataSource = ds.Tables("EJER13") ElseIf (ListBox1.SelectedIndex = 3) Then Dim data As New SqlDataAdapter("EJER14", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@P4", SqlDbType.VarChar).Value = TextBox1.Text data.Fill(ds, "EJER14") DataGridView1.DataSource = ds.Tables("EJER14")
ElseIf (ListBox1.SelectedIndex = 4) Then Dim data As New SqlDataAdapter("EJER15", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@P5", SqlDbType.VarChar).Value = TextBox1.Text data.Fill(ds, "EJER15") DataGridView1.DataSource = ds.Tables("EJER15") End If End If End Sub
ALUMNO: ALBERT SMITH LEIVA
30
ALUMNO: ALBERT SMITH LEIVA
31
ALUMNO: ALBERT SMITH LEIVA
32
11) Hacer un diseño que permita Ver productos con Stock, Vigentes, clasificados por categorías a
través de un group box, para categoría el usuario la indica y filtra los productos por esta
categoría. Además añadir un radio button que muestre todos los productos.
Imports System.Data.SqlClient Public Class Form2 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If (RadioButton1.Checked = True) Then Dim data As New SqlDataAdapter("EJER21", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.Fill(ds, "EJER21") DataGridView1.DataSource = ds.Tables("EJER21") ElseIf (RadioButton2.Checked = True) Then Dim data As New SqlDataAdapter("EJER22", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@D", SqlDbType.Bit).Value = RadioButton1.Checked data.Fill(ds, "EJER22") DataGridView1.DataSource = ds.Tables("EJER22") ElseIf (RadioButton3.Checked = True) Then Dim data As New SqlDataAdapter("EJER23", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@CID", SqlDbType.Int).Value = TextBox1.Text data.Fill(ds, "EJER23") DataGridView1.DataSource = ds.Tables("EJER23") ElseIf (RadioButton4.Checked = True) Then Dim data As New SqlDataAdapter("EJER24", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.Fill(ds, "EJER24") DataGridView1.DataSource = ds.Tables("EJER24") End If End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
33
ALUMNO: ALBERT SMITH LEIVA
34
ALUMNO: ALBERT SMITH LEIVA
35
12) Modificar el ejercicio anterior, quitando el botón y haciendo que la consulta por categorías se
realice solo con un enter.
Imports System.Data.SqlClient Public Class Form3 Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged, RadioButton2.CheckedChanged, RadioButton3.CheckedChanged, RadioButton4.CheckedChanged If (RadioButton1.Checked = True) Then Dim data As New SqlDataAdapter("EJER21", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.Fill(ds, "EJER21") DataGridView1.DataSource = ds.Tables("EJER21") ElseIf (RadioButton2.Checked = True) Then Dim data As New SqlDataAdapter("EJER22", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@D", SqlDbType.Bit).Value = RadioButton1.Checked data.Fill(ds, "EJER22") DataGridView1.DataSource = ds.Tables("EJER22") ElseIf (RadioButton4.Checked = True) Then Dim data As New SqlDataAdapter("EJER24", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.Fill(ds, "EJER24") DataGridView1.DataSource = ds.Tables("EJER24") End If End Sub Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress If (e.KeyChar = ChrW(13)) Then If (RadioButton3.Checked = True) Then Dim data As New SqlDataAdapter("EJER23", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@CID", SqlDbType.Int).Value = TextBox1.Text data.Fill(ds, "EJER23") DataGridView1.DataSource = ds.Tables("EJER23") End If End If End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
36
ALUMNO: ALBERT SMITH LEIVA
37
ALUMNO: ALBERT SMITH LEIVA
38
13) MonthCalendar: Objeto Calendario, permite obtener fechas de acuerdo a los meses y años
elegidos.
A. Mostrar las órdenes de ventas de una determinada fecha, obteniendo estas de un
MonthCalendar.
ALTER PROC [dbo].[EJER31]
@mda as datetime
AS
SELECT O.OrderID, OrderDate, ProductName, P.UnitPrice, Quantity
FROM Orders O INNER JOIN [Order Details] OD ON
O.OrderID = OD.OrderID INNER JOIN Products P ON OD.ProductID = P.ProductID
WHERE OrderDate = @mda
Imports System.Data.SqlClient Public Class Consulta12 Private Sub MonthCalendar1_DateChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateChanged Dim data As New SqlDataAdapter("EJER31", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.SelectCommand.Parameters.Add("@mda", SqlDbType.DateTime).Value = MonthCalendar1.SelectionStart data.Fill(ds, "EJER31") DataGridView1.DataSource = ds.Tables("EJER31") End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
39
INGRESANDO INFORMACIÓN DESDE VISUAL STUDIO
01. Creamos un Store Procedure en SQL, para poder ingresar registros, en este caso era a una tabla
Personas:
El código SqlTransac es:
En visual Studio creamos un formulario:
*FILL (conexión): Ejecuta la conexión entre Visual Studio y Sql Server, envía a Sql Adapter a recoger
determinada información.
CREATE PROC INSERTAR_PERSONA
@ID CHAR(8),
@N VARCHAR (30),
@APE VARCHAR (40),
@EM VARCHAR(50),
@G CHAR (1),
@EC CHAR (1),
@FN DATETIME
AS
INSERT INTO Personas
VALUES(@ID,@N, @APE,@EM, @G, @EC,@FN)
ALUMNO: ALBERT SMITH LEIVA
40
El código en Visual Studio es:
02. Ahora en la falla con el sexo:
Imports System.Data.SqlClient Public Class Form19 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim insert_per As New SqlCommand("INSERTAR_PERSONA", conex) insert_per.CommandType = CommandType.StoredProcedure insert_per.Parameters.Add("@id", SqlDbType.Char, 8).Value = TextBox1.Text insert_per.Parameters.Add("@N", SqlDbType.VarChar, 30).Value = TextBox2.Text insert_per.Parameters.Add("@APE", SqlDbType.VarChar, 40).Value = TextBox3.Text insert_per.Parameters.Add("@EM", SqlDbType.VarChar, 50).Value = TextBox4.Text insert_per.Parameters.Add("G", SqlDbType.Char, 1).Value = TextBox5.Text insert_per.Parameters.Add("@EC", SqlDbType.Char, 1).Value = TextBox6.Text insert_per.Parameters.Add("@FN", SqlDbType.DateTime).Value = TextBox7.Text
conex.Open() resp = insert_per.ExecuteNonQuery
End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
41
El código será:
03. Con fecha con MastextBox y con Estado Civil en ListBox:
Imports System.Data.SqlClient Public Class Form19 Sub limpiar_ingreso() TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox6.Text = "" TextBox7.Text = "" TextBox1.Focus() End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim resp As Integer Dim insert_per As New SqlCommand("INSERTAR_PERSONA", conex) insert_per.CommandType = CommandType.StoredProcedure insert_per.Parameters.Add("@ID", SqlDbType.Char, 8).Value = TextBox1.Text insert_per.Parameters.Add("@N", SqlDbType.VarChar, 30).Value = TextBox2.Text insert_per.Parameters.Add("@APE", SqlDbType.VarChar, 40).Value = TextBox3.Text insert_per.Parameters.Add("@EM", SqlDbType.VarChar, 50).Value = TextBox4.Text If (RadioButton1.Checked = True) Then insert_per.Parameters.Add("@G", SqlDbType.Char, 1).Value = "M" ElseIf (RadioButton2.Checked = True) Then insert_per.Parameters.Add("@G", SqlDbType.Char, 1).Value = "F" End If insert_per.Parameters.Add("@EC", SqlDbType.Char, 1).Value = TextBox6.Text insert_per.Parameters.Add("@FN", SqlDbType.DateTime).Value = TextBox7.Text If (resp = 1) Then MessageBox.Show("Se grabo el registro") limpiar_ingreso() End If conex.Open() resp = insert_per.ExecuteNonQuery End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
42
El código será:
04. Ahora con ID con identificador numérico que aumenta de uno en uno, se altera el procedure:
Imports System.Data.SqlClient Public Class Form19 Sub limpiar_ingreso() TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox1.Focus() End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim resp As Integer Dim insert_per As New SqlCommand("INSERTAR_PERSONA", conex) insert_per.CommandType = CommandType.StoredProcedure insert_per.Parameters.Add("@ID", SqlDbType.Char, 8).Value = TextBox1.Text insert_per.Parameters.Add("@N", SqlDbType.VarChar, 30).Value = TextBox2.Text insert_per.Parameters.Add("@APE", SqlDbType.VarChar, 40).Value = TextBox3.Text insert_per.Parameters.Add("@EM", SqlDbType.VarChar, 50).Value = TextBox4.Text If (RadioButton1.Checked = True) Then insert_per.Parameters.Add("@G", SqlDbType.Char, 1).Value = "M" ElseIf (RadioButton2.Checked = True) Then insert_per.Parameters.Add("@G", SqlDbType.Char, 1).Value = "F" End If insert_per.Parameters.Add("@EC", SqlDbType.Char, 1).Value = LTrim(ListBox1.SelectedItem) insert_per.Parameters.Add("@FN", SqlDbType.DateTime).Value = MaskedTextBox1.Text If (resp = 1) Then MessageBox.Show("Se grabo el registro") limpiar_ingreso() End If conex.Open() resp = insert_per.ExecuteNonQuery End Sub End Class
ALTER PROC INSERTAR_PERSONA
@N VARCHAR (30),
@APE VARCHAR (40),
@EM VARCHAR(50),
@G CHAR (1),
@EC CHAR (1),
@FN DATETIME
AS
INSERT INTO Personas
(nomperso,apeperso,email,genero,estadocivil,fechanac)
VALUES(@N, @APE,@EM, @G, @EC,@FN)
ALUMNO: ALBERT SMITH LEIVA
43
Luego Modificamos el Código y pantalla en Visual Studio:
Imports System.Data.SqlClient Public Class Form20 Sub limpiar_ingreso() TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox2.Focus() End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim resp As Integer Dim insert_per As New SqlCommand("INSERTAR_PERSONA", conex) insert_per.CommandType = CommandType.StoredProcedure insert_per.Parameters.Add("@N", SqlDbType.VarChar, 30).Value = TextBox2.Text insert_per.Parameters.Add("@APE", SqlDbType.VarChar, 40).Value = TextBox3.Text insert_per.Parameters.Add("@EM", SqlDbType.VarChar, 50).Value = TextBox4.Text If (RadioButton1.Checked = True) Then insert_per.Parameters.Add("@G", SqlDbType.Char, 1).Value = "M" ElseIf (RadioButton2.Checked = True) Then insert_per.Parameters.Add("@G", SqlDbType.Char, 1).Value = "F" End If insert_per.Parameters.Add("@EC", SqlDbType.Char, 1).Value = LTrim(ListBox1.SelectedItem) insert_per.Parameters.Add("@FN", SqlDbType.DateTime).Value = MaskedTextBox1.Text If (resp = 1) Then MessageBox.Show("Se grabo el registro") limpiar_ingreso() End If conex.Open() resp = insert_per.ExecuteNonQuery End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
44
05. Con actualizaciones constantes en un Datagriew:
EL código SQl para el Datagriew será:
create proc CONSULTAPERSONAS
AS
SELECT *
FROM Personas
Imports System.Data.SqlClient Public Class Form21 Sub limpiar_ingreso() TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox2.Focus() End Sub Sub Cargardatos() Dim data As New SqlDataAdapter("CONSULTAPERSONAS", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.Fill(ds, "CONSULTAPERSONA") DataGridView1.DataSource = ds.Tables("CONSULTAPERSONA") End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim resp As Integer Dim insert_per As New SqlCommand("INSERTAR_PERSONA", conex) insert_per.CommandType = CommandType.StoredProcedure insert_per.Parameters.Add("@N", SqlDbType.VarChar, 30).Value = TextBox2.Text insert_per.Parameters.Add("@APE", SqlDbType.VarChar, 40).Value = TextBox3.Text insert_per.Parameters.Add("@EM", SqlDbType.VarChar, 50).Value = TextBox4.Text If (RadioButton1.Checked = True) Then insert_per.Parameters.Add("@G", SqlDbType.Char, 1).Value = "M" ElseIf (RadioButton2.Checked = True) Then insert_per.Parameters.Add("@G", SqlDbType.Char, 1).Value = "F" End If insert_per.Parameters.Add("@EC", SqlDbType.Char, 1).Value = LTrim(ListBox1.SelectedItem) insert_per.Parameters.Add("@FN", SqlDbType.DateTime).Value = MaskedTextBox1.Text If (resp = 1) Then MessageBox.Show("Se grabo el registro") limpiar_ingreso() End If conex.Open() resp = insert_per.ExecuteNonQuery Cargardatos() End Sub
ALUMNO: ALBERT SMITH LEIVA
45
MaskeTextBox: Es un control TextBox mejorado que admite una sintaxis declarativa para
aceptar o rechazar los datos proporcionados por el usuario. Con la propiedad Mask puede
especificar la entrada siguiente sin escribir ninguna lógica de validación personalizada en
su aplicación
ExecuteNonQuery: Ejecuta una instrucción de Transact-SQL en la conexión y devuelve
el número de filas afectadas. Se puede utilizar ExecuteNonQuery para realizar
operaciones de catálogo (por ejemplo, consultar la estructura de una base de datos o
crear objetos de base de datos como tablas) o para cambiar los datos de una base de
datos sin utilizar DataSet ejecutando instrucciones UPDATE, INSERT o DELETE.
“.Open(): Abre la conexión (en esta caso es Conex).
A. Crear un formulario con dos DataGridView, el primero debe contener CategoryID,
CategoryName, Description , y al dar click en las celdas que contengan el CategoryID, se
active el siguiente Datagriew que contendrá ProductID,ProductName,UnitPrice,
C.CategoryID
Primero creamos las consultas SQL para cada Datagriew:
create proc categorua
as
select CategoryID,CategoryName,Description
from Categories
create proc po
@c int
as
select p.ProductID,p.ProductName,p.UnitPrice,c.CategoryID
from Products p join Categories c on c.CategoryID=p.CategoryID
where c.CategoryID=@c
ALUMNO: ALBERT SMITH LEIVA
46
Vista en visual:
La programación en visual Studio Será:
Evento DataGridView1_CellEnter: Se produce cuando la celda actual cambia en el control
DataGridView o cuando el control recibe el foco de entrada.
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim datos As New SqlDataAdapter("prod1", CONEX) Dim ds As New Data.DataSet datos.SelectCommand.CommandType = CommandType.StoredProcedure datos.Fill(ds, "prod1") DataGridView1.DataSource = ds.Tables(0) End Sub Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter Dim datos As New SqlDataAdapter("prod2", CONEX) Dim ds As New Data.DataSet datos.SelectCommand.CommandType = CommandType.StoredProcedure datos.SelectCommand.Parameters.Add("@cat", SqlDbType.Int).Value = DataGridView1.Rows(e.RowIndex).Cells(0).Value 'Indica valor de filas y columnas seleccionada en el dtgv datos.Fill(ds, "prod2") DataGridView2.DataSource = ds.Tables(0) End Sub
ALUMNO: ALBERT SMITH LEIVA
47
O puede ser asi:
La programación en visual Studio Será:
B. Teniendo en un DataGridView los siguientes campo OrderID, OrderDate, Freight mostrar en otro
DataGridView lo siguientes datos od.orderid, o.orderdate, p.productname, p.UnitPrice, quantity,
Filtrados por el OrderID, al que se le de click en el primer DataGridView
Imports System.Data.SqlClient Public Class Form1 Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load Dim data As New SqlDataAdapter("categorua", conex) Dim ds As New Data.DataSet data.SelectCommand.CommandType = CommandType.StoredProcedure data.Fill(ds, "CONSULTAPERSONA") DataGridView1.DataSource = ds.Tables("CONSULTAPERSONA") End Sub Private Sub DataGridView1_CellEnter(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter End Sub Private Sub DataGridView1_CellMouseClick(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseClick Dim insert_per As New SqlDataAdapter("po", conex) Dim ds As New Data.DataSet insert_per.SelectCommand.CommandType = CommandType.StoredProcedure insert_per.SelectCommand.Parameters.Add("@c", SqlDbType.Int).Value = DataGridView1.Rows(e.RowIndex).Cells(0).Value insert_per.Fill(ds, "CONSULTAPERSONA") DataGridView2.DataSource = ds.Tables("CONSULTAPERSONA") End Sub
create proc query15
as
select
OrderID,OrderDate,F
reight
from Orders
create proc query16
@oid int
as
select od.orderid, o.orderdate,
p.productname, p.UnitPrice, quantity
from Products p inner join [Order
Details] od on p.ProductID =od.ProductID
inner join Orders o on o.OrderID =
od.OrderID
where o.OrderID = @oid
ALUMNO: ALBERT SMITH LEIVA
48
La programación en visual Studio será:
Imports System.Data.SqlClient Public Class Form2 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim datos As New SqlDataAdapter("query15", CONEX) Dim ds As New Data.DataSet datos.SelectCommand.CommandType = CommandType.StoredProcedure datos.Fill(ds, "query") DataGridView1.DataSource = ds.Tables(0) End Sub Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter Dim datos As New SqlDataAdapter("query16", CONEX) Dim ds As New Data.DataSet datos.SelectCommand.CommandType = CommandType.StoredProcedure datos.SelectCommand.Parameters.Add("@oid", SqlDbType.Int).Value = DataGridView1.Rows(e.RowIndex).Cells(0).Value 'Indica valor de filas y columnas seleccionada en el dtgv datos.Fill(ds, "query16") DataGridView2.DataSource = ds.Tables(0) End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
49
Enlazando Datos Directamente en el DataGridView:
Clic elegir Origen de Datos, luego clic en nuevo orígen de Datos, en el origen elegir Base de Datos,
siguiente, en elegir un modelo de Base de Datos, escogemos Conjunto de Datos, siguiente
Establecemos la Conexión, clic en Siguiente y luego escogemos que obejtos de la Base de Datos
queremos extraer, pudiendo ser una tabla, una vista, un procedimiento almacenado o una función,
click en finaliza y ya tenemos la vista de obejtos que hemos seleccionado, en el DataGridView
ALUMNO: ALBERT SMITH LEIVA
50
Agregaremos a esto un PictureBox, para poder visualizar las fotos de cada uno de los empleados:
Teniendo el diseño del Datagriew, la programación en el formulario, será:
Imports System.Data.SqlClient Public Class Form3 Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'TODO: esta línea de código carga datos en la tabla 'NorthwindDataSet.QUERY17' Puede moverla o quitarla según sea necesario. Me.QUERY17TableAdapter.Fill(Me.NorthwindDataSet.QUERY17) Dim datos As New SqlDataAdapter("query17", CONEX) Dim ds As New Data.DataSet datos.SelectCommand.CommandType = CommandType.StoredProcedure datos.Fill(ds, "query17") DataGridView1.DataSource = ds.Tables(0) End Sub Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter PictureBox1.Image = Image.FromFile("C:\Users\PC\Desktop\fOTOS" + CStr(DataGridView1.Rows(e.RowIndex).Cells(0).Value) + ".jpg") End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
51
C.
create proc query18
as
select EmployeeID,FirstName,LastName
from Employees
create proc query181
@eid int
as
select OrderID,OrderDate,e.EmployeeID
from Employees e inner join Orders o on
e.EmployeeID = o.EmployeeID
where e.EmployeeID = @eid
create proc query182
@oid int
as
select o.OrderID,p.ProductID, p.ProductName, p.UnitPrice
from Products p inner join [Order Details] od on p.ProductID = od.ProductID inner join
Orders o on o.OrderID = od.OrderID
where o.OrderID = @oid
ALUMNO: ALBERT SMITH LEIVA
52
ALUMNO: ALBERT SMITH LEIVA
53
MANTENIMIENTO
CONSULTAS A TRAVÉS DE CUADRO DETALLES
ALUMNO: ALBERT SMITH LEIVA
54
ALUMNO: ALBERT SMITH LEIVA
55
Ejercicio 2)
ALUMNO: ALBERT SMITH LEIVA
56
EJERCICIO
Imports System.Data.SqlClient Public Class Form2 Private Sub CategoriesBindingNavigatorSaveItem_Click(sender As System.Object, e As System.EventArgs) Handles CategoriesBindingNavigatorSaveItem.Click Me.Validate() Me.CategoriesBindingSource.EndEdit() Me.TableAdapterManager.UpdateAll(Me.NorthwindDataSet) End Sub Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 'TODO: esta línea de código carga datos en la tabla 'NorthwindDataSet.Categories' Puede moverla o quitarla según sea necesario. Me.CategoriesTableAdapter.Fill(Me.NorthwindDataSet.Categories) End Sub Sub cargar_datos() Dim cone As New SqlConnection("server = .; database = northwind; trusted_connection = true") Dim datos As New SqlDataAdapter("select productname, unitprice, unitsinstock, categoryid from products where categoryid=@cate", cone) datos.SelectCommand.Parameters.Add("@cate", SqlDbType.Int).Value = CInt(CategoryIDTextBox.Text) Dim ds As New Data.DataSet datos.Fill(ds, "detalle") DataGridView1.DataSource = ds.Tables("detalle") End Sub Private Sub BindingNavigatorMoveNextItem_Click(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorMoveNextItem.Click cargar_datos() End Sub
Private Sub CategoryIDTextBox_TextChanged(sender As System.Object, e As System.EventArgs) Handles CategoryIDTextBox.TextChanged cargar_datos() End Sub
End Class
ALUMNO: ALBERT SMITH LEIVA
57
Imports System.Data.SqlClient Public Class Form3 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim conex As New SqlConnection("server = .; database = northwind; trusted_connection = true") Dim comando As New SqlCommand("select productname, unitprice, supplierid, unitsinstock from products where productid = @id", conex) comando.Parameters.Add("@id", SqlDbType.Int).Value = CInt(TextBox1.Text) Dim registro As SqlDataReader 'guarda un registro o varios registros conex.Open() registro = comando.ExecuteReader() 'Guarda los resutlados de la consulta SQL solo para lectura registro.Read() If registro.HasRows Then 'HasRows (evalua si existe el registro buscado) TextBox2.Text = registro.Item(0) TextBox3.Text = registro.Item(1) TextBox4.Text = registro.Item(2) TextBox5.Text = registro.Item(3) Else MessageBox.Show("No existe este producto") End If registro.Close() conex.Close() End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
58
EJERCICIO BUSAND POR CODIGO DE CATEGORIA
Imports System.Data.SqlClient Public Class Form4 Private Sub Form4_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim conex As New SqlConnection("server = .; database = northwind; trusted_connection = true") Dim comando As New SqlCommand("select productname, unitprice, supplierid, unitsinstock from products where supplierid = @id", conex) comando.Parameters.Add("@id", SqlDbType.Int).Value = CInt(TextBox1.Text) Dim registro As SqlDataReader 'guarda un registro o varios registros conex.Open() registro = comando.ExecuteReader() 'Guarda los resutlados de la consulta SQL solo para lectura Do While registro.Read() MessageBox.Show(registro.Item(0) + " - " + CStr(registro.Item(1)) + " - " + CStr(registro.Item(2)) + " - " + CStr(registro.Item(3))) Loop End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
59
Ahora con un list box
Imports System.Data.SqlClient Public Class Form4 Private Sub Form4_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim conex As New SqlConnection("server = .; database = northwind; trusted_connection = true") Dim comando As New SqlCommand("select productname, unitprice, supplierid, unitsinstock from products where supplierid = @id", conex) comando.Parameters.Add("@id", SqlDbType.Int).Value = CInt(TextBox1.Text) Dim registro As SqlDataReader 'guarda un registro o varios registros conex.Open() registro = comando.ExecuteReader() 'Guarda los resutlados de la consulta SQL solo para lectura Do While registro.Read() 'MessageBox.Show(registro.Item(0) + " - " + CStr(registro.Item(1)) + " - " + CStr(registro.Item(2)) + " - " + CStr(registro.Item(3))) ListBox1.Items.Add(registro.Item(0)) ListBox1.Items.Add(registro.Item(1)) ListBox1.Items.Add(registro.Item(3)) Loop End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
60
CREACIÓN DE UN FORMULARIO LOGIN
ALUMNO: ALBERT SMITH LEIVA
61
Debemos crear una tabla en la base de datos que se llame usuarios y crear los dos campos:
Código para el acceso:
Imports System.Data.SqlClient Public Class LoginForm1 ' TODO: inserte el código para realizar autenticación personalizada usando el nombre de usuario y la contraseña proporcionada ' (Consulte http://go.microsoft.com/fwlink/?LinkId=35339). ' El objeto principal personalizado se puede adjuntar al objeto principal del subproceso actual como se indica a continuación: ' My.User.CurrentPrincipal = CustomPrincipal ' donde CustomPrincipal es la implementación de IPrincipal utilizada para realizar la autenticación. ' Posteriormente, My.User devolverá la información de identidad encapsulada en el objeto CustomPrincipal ' como el nombre de usuario, nombre para mostrar, etc. Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click Dim valor As Integer Dim consulta As New SqlCommand("select count(*) from usuario where idusuario=@id and password=@pas", conex) consulta.Parameters.Add("@id", SqlDbType.VarChar, 20).Value = UsernameTextBox.Text consulta.Parameters.Add("@pas", SqlDbType.VarChar, 20).Value = PasswordTextBox.Text conex.Open() valor = consulta.ExecuteScalar() conex.Close() If valor = 1 Then Form6.Show() Me.Hide() Else MessageBox.Show("NO existe Usuario o Contraseña esta mal") UsernameTextBox.Text = "" PasswordTextBox.Text = "" UsernameTextBox.Focus() End If End Sub Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click Me.Close() End Sub
ALUMNO: ALBERT SMITH LEIVA
62
Luego para actualizar el login creamos un formulario adicional con un
linklabel al cual se le anexa.
ALUMNO: ALBERT SMITH LEIVA
63
Imports System.Data.SqlClient Public Class LoginForm1 ' TODO: inserte el código para realizar autenticación personalizada usando el nombre de usuario y la contraseña proporcionada ' (Consulte http://go.microsoft.com/fwlink/?LinkId=35339). ' El objeto principal personalizado se puede adjuntar al objeto principal del subproceso actual como se indica a continuación: ' Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click Dim valor As Integer Dim consulta As New SqlCommand("select count(*) from usuario where idusuario=@id and password=@pas", conex) consulta.Parameters.Add("@id", SqlDbType.VarChar, 20).Value = UsernameTextBox.Text consulta.Parameters.Add("@pas", SqlDbType.VarChar, 20).Value = PasswordTextBox.Text conex.Open() valor = consulta.ExecuteScalar() conex.Close() If valor = 1 Then Form6.Show() Me.Hide() Else MessageBox.Show("NO existe Usuario o Contraseña esta mal") UsernameTextBox.Text = "" PasswordTextBox.Text = "" UsernameTextBox.Focus() End If End Sub Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click Me.Close() End Sub Private Sub LinkLabel1_LinkClicked(sender As System.Object, e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked Form2.Show() End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
64
El código en el formulario:
Imports System.Data.SqlClient Public Class Form2 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim valor As Integer Dim consulta As New SqlCommand("select count(*) from usuario where idusuario=@id and password=@pas", conex) consulta.Parameters.Add("@id", SqlDbType.VarChar, 20).Value = TextBox1.Text consulta.Parameters.Add("@pas", SqlDbType.VarChar, 20).Value = TextBox2.Text conex.Open() valor = consulta.ExecuteScalar() conex.Close() If valor = 1 Then If TextBox3.Text = TextBox4.Text Then Dim d As Integer Dim nueva As New SqlCommand("update usuario set password=@pn where idusuario=@idn and password=@pa ", conex) nueva.Parameters.Add("@pn", SqlDbType.VarChar, 20).Value = TextBox3.Text nueva.Parameters.Add("@idn", SqlDbType.VarChar, 20).Value = TextBox1.Text nueva.Parameters.Add("@pa", SqlDbType.VarChar, 20).Value = TextBox2.Text conex.Open() d = nueva.ExecuteNonQuery() conex.Close() If d = 1 Then MsgBox("contraseña actualizada") Me.Close() Else MsgBox("no se actualizo") End If Else MsgBox("nueva contraseña incorrecta") End If Else MessageBox.Show("NO existe Usuario o Contraseña esta mal") End If End Sub Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
65
REPORTES El reporte es aquel documento que se utilizará cuando se quiera informar o dar
noticia acerca de una determinada cuestión.
Para ello se agrega un la herramienta ReportViewer1:
Se realiza de la siguiente manera:
ALUMNO: ALBERT SMITH LEIVA
66
ALUMNO: ALBERT SMITH LEIVA
67
Ejercicios Finales
1) Mostrar en un detalle el Employee ID, Last Name, y el First Name de los empleado y
anexa un Ddatagridview de tal manera que pueda visualizarle su ID, las órdenes de
compra a las que está ligado, la fecha de la orden y el código del cliente
Establecemos el diseño de la consulta que se va a realizar:
ALUMNO: ALBERT SMITH LEIVA
68
Los comandos en SQL serán:
La codificación será:
ALTER PROCEDURE ORDENXEMPLE1
@EID INT
AS
SELECT E.EmployeeID, O.OrderID,OrderDate,C.CustomerID
FROM Employees E INNER JOIN Orders O ON O.EmployeeID = E.EmployeeID
INNER JOIN Customers C ON C.CustomerID = O.CustomerID
WHERE E.EmployeeID = @EID
ORDER BY E.EmployeeID
Imports System.Data.SqlClient Public Class Form1 Private Sub EmployeesBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EmployeesBindingNavigatorSaveItem.Click Me.Validate() Me.EmployeesBindingSource.EndEdit() Me.TableAdapterManager.UpdateAll(Me.NorthwindDataSet) End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'TODO: esta línea de código carga datos en la tabla 'NorthwindDataSet.Employees' Puede moverla o quitarla según sea necesario. Me.EmployeesTableAdapter.Fill(Me.NorthwindDataSet.Employees) End Sub Sub CargarDatos() Dim conex As New SqlConnection("server = .; database = northwind; trusted_connection = true") Dim datos As New SqlDataAdapter("ORDENXEMPLE1", conex) Dim ds As New Data.DataSet datos.SelectCommand.CommandType = CommandType.StoredProcedure datos.SelectCommand.Parameters.Add("@eid", SqlDbType.Int).Value = EmployeeIDTextBox.Text datos.Fill(ds, "ORDENXEMPLE1") DataGridView1.DataSource = ds.Tables(0) End Sub Private Sub BindingNavigatorPositionItem_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles BindingNavigatorPositionItem.Enter CargarDatos() End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
69
Ejecutando programa
2) De un ListBox o ComboBox, escoger un año y en un DatagridView, mostrar los
clientes, el año y el número de productos comprados:
El código SQL será:
El diseño será:
CREATE PROC COMPRASANIO
@ANIO NVARCHAR(4)
AS
SELECT C.CompanyName, YEAR(O.OrderDate) AS AÑO,SUM(QUANTITY) AS NUMPRODCOMPRADOS
FROM Customers C INNER JOIN Orders O
ON C.CustomerID = O.CustomerID INNER JOIN [Order Details] OD
ON OD.OrderID=O.OrderID
WHERE YEAR(O.OrderDate) = @ANIO
GROUP BY YEAR (O.OrderDate), C.CompanyName,Quantity
ALUMNO: ALBERT SMITH LEIVA
70
La línea de comandos en Visual Studio es:
En funcionamiento, el programa se verá así:
3) En un combo box, se tendrá un alista de los clientes, de tal manera que al seleccionar
a uno de ellos, un DataGridView, mostrará el nombre de la Compañía, OrderID, Año de
la Orden, Nombre Producto Comprado y su cantidad
Imports System.Data.SqlClient Public Class Form2 Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged Dim conex As New SqlConnection("server = .; database = northwind; trusted_connection = true") Dim datos As New SqlDataAdapter("COMPRASANIO ", conex) Dim ds As New Data.DataSet datos.SelectCommand.CommandType = CommandType.StoredProcedure datos.SelectCommand.Parameters.Add("@ANIO", SqlDbType.Int).Value = ComboBox1.SelectedItem datos.Fill(ds, "comprasanio") DataGridView1.DataSource = ds.Tables(0) End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
71
La consulta SQL de búsqueda será:
VISTA:
Procedemos a configurar el ComboBox, mediante una conexión directa con la Base de
Datos, seleccionando como miembro de muestra los nombres de los cliente y como
miembros de valor (ó búsqueda), el ID del cliente.
Para la configuración del DataGridView:
CREATE PROC BUSCARCLIENTE
@CID CHAR(5)
AS
SELECT C.CompanyName,O.OrderID, YEAR(OrderDate), P.ProductName, Quantity
FROM Customers C INNER JOIN Orders O ON
C.CustomerID = O.CustomerID INNER JOIN
[Order Details] OD ON O.OrderID=OD.OrderID
INNER JOIN Products P ON P.ProductID=OD.ProductID
WHERE C.CustomerID = @CID
ALUMNO: ALBERT SMITH LEIVA
72
El funcionamiento del programa será:
4) Realizar un Reporte que divido en años y meses (matriz), que muestre el Monto
Ingresado por las órdenes de compra.
El Comando SQL es:
Imports System.Data.SqlClient Public Class Form3 Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged Dim conex As New SqlConnection("server = .; database = northwind; trusted_connection = true") Dim datos As New SqlDataAdapter("BUSCARCLIENTE ", conex) Dim ds As New Data.DataSet datos.SelectCommand.CommandType = CommandType.StoredProcedure datos.SelectCommand.Parameters.Add("@CID", SqlDbType.Char, 5).Value = ComboBox1.SelectedValue datos.Fill(ds, "comprasanio") DataGridView1.DataSource = ds.Tables(0) End Sub Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'TODO: esta línea de código carga datos en la tabla 'NorthwindDataSet1.Customers' Puede moverla o quitarla según sea necesario. Me.CustomersTableAdapter.Fill(Me.NorthwindDataSet1.Customers) End Sub End Class
CREATE PROC VENTASANIOMES
AS
SELECT YEAR(O.OrderDate),MONTH(O.OrderDate), SUM(UnitPrice*Quantity)
FROM Orders O INNER JOIN [Order Details] OD
ON O.OrderID=OD.OrderID
GROUP BY O.OrderDate, UnitPrice, Quantity
ALUMNO: ALBERT SMITH LEIVA
73
Public Class Form4 Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'TODO: esta línea de código carga datos en la tabla 'NorthwindDataSet2.VENTASANIOMES' Puede moverla o quitarla según sea necesario. Me.VENTASANIOMESTableAdapter.Fill(Me.NorthwindDataSet2.VENTASANIOMES) Me.ReportViewer1.RefreshReport() End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
74
En funcionamiento el programa se verá:
5) Ver el número de productos por categoría en un gráfico
La Consulta SQL será:
El diseño del Reporte será:
CREATE PROC PRODCATEGO
AS
SELECT CategoryName, COUNT(*)
FROM Categories C INNER JOIN Products P
ON P.CATEGORYID = C.CategoryID
GROUP BY C.CategoryName
ALUMNO: ALBERT SMITH LEIVA
75
El programa en funcionamiento visualizará:
6) Mediante el objeto TabControl, mostrar en un DataGridView, el ProductID y el nombre
del Producto, y cuando se haga click en un determinado ProductID, saldrá otro
DatagridView en el tab2 con un OrderId, UnitPrice la Cantidad, y el código del
Producto.
Configuramos el diseño de los DataGridView, para cadauno de las consultas pedidas:
ALUMNO: ALBERT SMITH LEIVA
76
La programación en Visual será:
Imports System.Data.SqlClient Public Class Form6 Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'TODO: esta línea de código carga datos en la tabla 'NorthwindDataSet4.Products' Puede moverla o quitarla según sea necesario. Me.ProductsTableAdapter.Fill(Me.NorthwindDataSet4.Products) End Sub Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick Dim conex As New SqlConnection("server = .; database = northwind; trusted_connection = true") Dim datos As New SqlDataAdapter("BUSCPROD", conex) Dim ds As New Data.DataSet datos.SelectCommand.CommandType = CommandType.StoredProcedure datos.SelectCommand.Parameters.Add("@PID", SqlDbType.Int).Value = DataGridView1.Rows(e.RowIndex).Cells(0).Value 'Indica valor de filas y columnas seleccionada en el dtgv datos.Fill(ds, "BUSCPROD") DataGridView2.DataSource = ds.Tables(0) End Sub End Class
ALUMNO: ALBERT SMITH LEIVA
77
Ahora, la vista del programa trabajando será:
Recommended