Facultad de Ingeniera
Escuela Acadmico Profesional de Ingeniera de Sistemas
CURSO : PROGRAMACIN APLICADA I
TEMA
INTEGRANTES:
DOCENTE :
CICLO
VI
Manejo de MENUS
TOOL STRIP BOX: Permite la creacin de una barra de Mens con imgenes LLAMADA DE UN FORMULARIO A OTRO : Form2.MdiParent = Me Form2.Show()
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
Men con Tool Strip, con iconos programados para abrir nuevos formularios:
ToolTip: Ayudas que aparecen cuando pasamos el cursor del mouse por un determinado botn.
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 Para alojar pginas web dentro de una aplicacin, para estos e utiliza la herramienta Web Browser: End Class
ALUMNO: ALBERT SMITH LEIVA Navegamos en una pgina web a partir de una aplicacin:
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
Cdigo:
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
CREANDO UN Modulo
bulk insert dbo.Estudiantesnew from 'C:\Users\Ing. Sistemas\Desktop\alumnos.csv' with ( fieldterminator = ',', rowterminator = '\n'
Imports System.Data.SqlClient
10
Imports System.Data.SqlClient: Establece la librera para la conexin 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 conexin al Servidor, este sirve para establecer la conexin 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 asignacin 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 coleccin de objetos DataTable que se pueden relacionar entre ellos mediante objetos DataRelation. Tambin se puede imponer la integridad de los datos de DataSet mediante los objetos UniqueConstraint y ForeignKeyConstraint. Para obtener informacin ms 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 trados 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
11
especificar un origen de datos, puede crear las columnas y filas que contendrn los datos y agregarlas directamente a DataGridView.
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
En un GridView:
12
13
14
15
EJERCICIOS
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
16
Cdigo en visual para el evento keypress para que funcione solo con el enter:
17
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
Imports System.Data.SqlClient
18
End Class
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 cdigo ser:
ToolStripMen: Permite la creacin de mens con imgenes y texto, para hacer ms fcil el enlace de un formulario a otro.
1) Comenzaremos creando, un Formulario, con un Men grfico de tal manera que cada uno de estos nos permita el acceso a: Mantenimiento, Consultas, Reportes
19
Por ejemplo para acceder a la primera consulta del men, el cdigo ser:
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
2) La primera consulta ser, indicar el nmero de Productos por Categora: DATA.SELECTCOMMAND.COMMANDTYPE = COMMANDTYPE.STOREDPROCEDURE: Lnea de Cdigo 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 parmetros (si los hubiera) a una bsqueda. DataGridView1.DataSource = ds.Tables("QUERY7"): Indica en datagriew o vista se mostrarn los datos de la consulta SQL realizada.
20
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
21
3) La siguiente consulta ser mostrar un listn de productos por cada categora, 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 lnea de cdigo carga datos en la tabla 'NorthwindDataSet.Categories' Puede moverla o quitarla segn 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
22
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)
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
5)
23
CREATE PROC QUERY4 @T VARCHAR(4) AS SELECT ProductName, UnitPrice,CategoryID,SupplierID FROM Products WHERE ProductName LIKE @T+'%'
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
24
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 lnea de cdigo carga datos en la tabla 'NorthwindDataSet1.Suppliers' Puede moverla o quitarla segn 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
25
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
26
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
27
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
28
29
30
31
11) Hacer un diseo que permita Ver productos con Stock, Vigentes, clasificados por categoras a travs de un group box, para categora el usuario la indica y filtra los productos por esta categora. Adems aadir 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
32
33
34
12) Modificar el ejercicio anterior, quitando el botn y haciendo que la consulta por categoras 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
35
36
37
ALUMNO: ALBERT SMITH LEIVA 13) MonthCalendar: Objeto Calendario, permite obtener fechas de acuerdo a los meses y aos 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
38
*FILL (conexin): Ejecuta la conexin entre Visual Studio y Sql Server, enva a Sql Adapter a recoger determinada informacin.
39
40
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
41
04. Ahora con ID con identificador numrico que aumenta de uno en uno, se altera el procedure:
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)
42
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
43
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
44
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 lgica de validacin personalizada en su aplicacin ExecuteNonQuery: Ejecuta una instruccin de Transact-SQL en la conexin y devuelve el nmero de filas afectadas. Se puede utilizar ExecuteNonQuery para realizar operaciones de catlogo (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 conexin (en esta caso es Conex).
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
45
Vista en visual:
La programacin 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
46
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
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
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
47
48
49
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 lnea de cdigo carga datos en la tabla 'NorthwindDataSet.QUERY17' Puede moverla o quitarla segn 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
50
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
51
52
MANTENIMIENTO
CONSULTAS A TRAVS DE CUADRO DETALLES
53
54
Ejercicio 2)
55
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 lnea de cdigo carga datos en la tabla 'NorthwindDataSet.Categories' Puede moverla o quitarla segn 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
EJERCICIO
56
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
57
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
58
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
59
60
Debemos crear una tabla en la base de datos que se llame usuarios y crear los dos campos: Cdigo para el acceso:
Imports System.Data.SqlClient Public Class LoginForm1 ' TODO: inserte el cdigo para realizar autenticacin personalizada usando el nombre de usuario y la contrasea 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 continuacin: ' My.User.CurrentPrincipal = CustomPrincipal ' donde CustomPrincipal es la implementacin de IPrincipal utilizada para realizar la autenticacin. ' Posteriormente, My.User devolver la informacin 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 Contrasea 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
61
Luego para actualizar el login creamos un formulario adicional con un linklabel al cual se le anexa.
62
63
El cdigo 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("contrasea actualizada") Me.Close() Else MsgBox("no se actualizo") End If Else MsgBox("nueva contrasea incorrecta") End If Else MessageBox.Show("NO existe Usuario o Contrasea 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
64
REPORTES
El reporte es aquel documento que se utilizar cuando se quiera informar o dar noticia acerca de una determinada cuestin. Para ello se agrega un la herramienta ReportViewer1:
65
66
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 cdigo del cliente Establecemos el diseo de la consulta que se va a realizar:
67
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
La codificacin ser:
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 lnea de cdigo carga datos en la tabla 'NorthwindDataSet.Employees' Puede moverla o quitarla segn 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
68
2) De un ListBox o ComboBox, escoger un ao y en un DatagridView, mostrar los clientes, el ao y el nmero de productos comprados:
El cdigo SQL ser:
CREATE PROC COMPRASANIO @ANIO NVARCHAR(4) AS SELECT C.CompanyName, YEAR(O.OrderDate) AS AO,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
El diseo ser:
69
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
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 Compaa, OrderID, Ao de la Orden, Nombre Producto Comprado y su cantidad
70
VISTA:
Procedemos a configurar el ComboBox, mediante una conexin directa con la Base de Datos, seleccionando como miembro de muestra los nombres de los cliente y como miembros de valor ( bsqueda), el ID del cliente.
71
4) Realizar un Reporte que divido en aos y meses (matriz), que muestre el Monto Ingresado por las rdenes de compra. El Comando SQL es:
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
72
Public Class Form4 Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'TODO: esta lnea de cdigo carga datos en la tabla 'NorthwindDataSet2.VENTASANIOMES' Puede moverla o quitarla segn sea necesario. Me.VENTASANIOMESTableAdapter.Fill(Me.NorthwindDataSet2.VENTASANIOMES) Me.ReportViewer1.RefreshReport() End Sub End Class
73
74
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 cdigo del Producto. Configuramos el diseo de los DataGridView, para cadauno de las consultas pedidas:
75
76
77