Professional Documents
Culture Documents
Unidad Didctica
Taller de Programacin Distribuida
Mdulo II
IV CICLO
Pg. 1
Pg. 2
End Sub
Pg. 3
Pg. 4
Pg. 5
With fdgEditor
If .ShowDialog() = DialogResult.OK Then
MsgBox("Cambiando Fuentes")
End If
End With
End Sub
Private Sub mnuFormato_Fondo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuFormato_Fondo.Click
With cdgEditor
If .ShowDialog() = DialogResult.OK Then
MsgBox("Cambiando Color de Fondo")
End If
End With
End Sub
Private Sub tbrEditor_ButtonClick(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.ToolBarButtonClickEventArgs) Handles tbrEditor.ButtonClick
Select Case e.Button.ImageIndex
Case 0 'Nuevo
mnuArchivo_Nuevo.PerformClick()
Case 1 'Abrir
mnuArchivo_Abrir.PerformClick()
Case 2 'Guardar
mnuArchivo_Guardar.PerformClick()
Case 6 'Salir
End
End Select
End Sub
Private Sub frmEditor_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
With sbrEditor
.Panels(3).Text = DateTi Now.ToShortTimeString
.Panels(3).ToolTipText = DateTi Now.ToLongDateString
End With
End Sub
Private Sub mnuEdicion_Copiar_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles mnuEdicion_Copiar.Click
Dim X As RichTextBox = ActiveMdiChild.Controls(0)
Clipboard.SetDataObject(X.SelectedText())
End Sub
Private Sub mnuEdicion_Cortar_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles mnuEdicion_Cortar.Click
Dim X As RichTextBox = ActiveMdiChild.Controls(0)
Clipboard.SetDataObject(X.SelectedText())
X.SelectedText = ""
End Sub
Private Sub mnuEdicion_Pegar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuEdicion_Pegar.Click
Dim X As RichTextBox = ActiveMdiChild.Controls(0)
X.SelectedText = Clipboard.GetDataObject.GetData("Text")
End Sub
End Class
Pg. 6
Pg. 7
FrmEditar:
Pg. 8
Frmdatos
Pg. 9
Pg. 10
End Sub
Pg. 11
Pg. 12
End Class
Modulo:
Module ModEmpleados
'Estructura definido por el usuario
Structure Empleado
Dim IdEmpleado As Integer
'usando atributos <> para dimensionar una cadena
<VBFixedString(25)> Dim ApeEmpleado As String
<VBFixedString(25)> Dim NomEmpleado As String
Dim FecIngEmpleado As Date
Dim SBEmpleado As Single
End Structure
'Declarar variable de tipo estructura
Public REGEmp() As Empleado
Public Nreg As Integer
'Creacin de unprocedimiento sub main
Public Sub Main()
Dim Fmenu As New MDIPrincipal
Fmenu.ShowDialog()
End Sub
End Module
Pg. 13
Pg. 14
Pg. 15
FrmFactura:
Pg. 16
Pg. 17
End Sub
Private Sub NumCantidad_Click(ByVal sender As Object, ByVal e As
System.EventArgs)
Handles NumCantidad.Click
TxtSubTotal.Text = (Single.Parse( TxtPrecio.Text) * Single.Parse(
NumCantidad.Text)).ToString
End Sub
Private Sub ButAgregarDetalle_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ButAgregarDetalle.Click
LstProducto.Items.Add( CmbNombre.Text)
LstPre.Items.Add( TxtPrecio.Text)
LstCant.Items.Add( NumCantidad.Text)
LstSubT.Items.Add( TxtSubTotal.Text)
monto += Single.Parse( TxtSubTotal.Text)
igv = monto * 0.19
tot = monto + igv
TxtMonto.Text = monto.ToString("#,##0.00")
TxtIgv.Text = igv.ToString("#,##0.00")
TxtTotal.Text = tot.ToString("#,##0.00")
End Sub
Private Sub LstProducto_DoubleClick(ByVal sender As Object, ByVal e As
System.EventArgs) Handles LstProducto.DoubleClick
Dim I As Integer = LstProducto.SelectedIndex
LstProducto.Items.RemoveAt(I)
LstSubT.Items.RemoveAt(I)
LstCant.Items.RemoveAt(I)
LstPre.Items.RemoveAt(I)
calcularFact()
End Sub
Private Sub ButRegistrar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ButRegistrar.Click
MsgBox("Se Registro Correctamente", MsgBoxStyle.Information,
"Informacin")
End Sub
Private Sub ButNuevo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ButNuevo.Click
Limpiar()
End Sub
End Class
Pg. 18
frmLista
Pg. 19
Pg. 20
ADO.NET
CONSULTAS SQL
PROCEDIMIENTOS ALMACENADOS
INSTRUCCIONES SQL
1. Introduccin
Visual Basic .Net 2010, es un lenguaje de programacin de propsito general, con una gran potencia en
toda su estructura. Su implementacin en el sistema operativo Windows y sus herramientas visuales, han
hecho de este lenguaje un lder indiscutible en lo que a desarrollo de aplicaciones se refiere. Con el
anterior Visual Basic 6, se implement la gestin de bases de datos a muy alto nivel, pudiendo gestionar
bases de datos de tipo Access, Paradox, dBASE, FoxPro, SQL Server, etc.
Este paso de gigante ha hecho de Visual Basic uno de los lenguajes favoritos por los desarrolladores de
aplicaciones de bases de datos, en especial el hecho de que Visual Basic .Net 2010 implemente en el
lenguaje T-SQL, uno de los ms potentes y sencillos lenguajes de bases de datos.
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
Pg. 21
2. Qu es sql?
SQL (Structured Query Language Lenguaje Estructurado de Consulta), es un lenguaje bastante sencillo,
principalmente orientado a bases de datos y, sobre todo, al manejo de consultas. Visual Basic incorpora
esta extensin junto a nuestras bases de datos, obteniendo potentes resultados. De hecho, las consultas
que se realizan en Sql Server, estn desarrolladas o basadas en este lenguaje, por lo que su
implementacin en Visual Basic .Net 2010 no es complicada.
El objetivo principal de T-SQL (Transaction sql), es la realizacin de consultas y clculos con los datos de
una o varias tablas.
Consejos Para Escribir Mandatos En SQL
He aqu una serie de consejos (a veces normas), que hay que tener en cuenta a la hora de escribir
mandatos SQL en nuestras aplicaciones en Visual Basic .Net 2010:
1.
2.
3.
Los nombres de los campos especificados (y de las tablas), que contengan ms de una palabra,
han de encerrarse entre corchetes ([nombre]). Como norma general, se suelen escribir siempre
entre corchetes.
4.
5.
Al especificar una expresin de bsqueda, si sta se refiere a una expresin de caracteres, stos
han de encerrarse entre comillas simples ('expresin_a_buscar').
6.
Para especificar una fecha en una bsqueda, sta debe encerrarse entre signos de apostrofes
cuando se maneja Sql-Server 2008 y entre signos numeral cuando se conecta a Ms Acccess:
(#fecha#) en Access, Dbase X, etc., y entre comillas simples ('fecha') para bases Sql Server,
Informix, Oracle, MySql,etc.
7.
Si se utiliza la propiedad Datasource del control DataGrid, para crear nuestras consultas en SQL,
tras introducir el mandato SQL (siempre como una expresin de cadena) es necesario refrescar el
control.
Pg. 22
Una sentencia SELECT no puede escribirse sin la clusula FROM. Una clusula es una extensin de un
mandato que complementa a una sentencia o instruccin, pudiendo complementar tambin a otras
sentencias. Es, por decirlo as, un accesorio imprescindible en una determinada mquina, que puede
tambin acoplarse a otras mquinas. En este caso, la clusula FROM permite indicar en qu tablas o en
qu consultas (queries) se encuentran los campos especificados en la sentencias SELECT. Estas tablas o
consultas se separan por medio de comas (,), y, si sus nombres estn compuestos por ms de una
palabra, stos se escriben entre corchetes ([nombre]).
He aqu algunos ejemplos de mandatos SQL en la estructura SELECT...FROM...:
SELECT nombre,apellidos FROM clientes;
Selecciona los campos 'nombre' y 'apellidos' de la tabla 'clientes'.
SELECT clientes.nombre, producto FROM clientes, productos;
Selecciona el campo 'nombre' de la tabla 'clientes', y el campo 'producto' de la tabla productos.
Hay que tener en cuenta que si dos tablas poseen el mismo nombre de campo (un 'nombre' de cliente y
un 'nombre' de producto, hay que especificar tambin la tabla a la cual pertenece dicho campo, ya, que
de
lo
contrario,
seleccionara
ambos
nombres).
Pg. 23
clientes
de
las
provincias
de
LIMA,
QUITO,
SANTIAGO,
Pg. 24
La palabra reservada ASC es opcional e indica que el orden del campo ser de tipo ascendiente (0-9 A-Z),
mientras que, si se especifica la palabra reservada DESC, se indica que el orden del campo es
descendiente (9-0 Z-A). Si no se especifica ninguna de estas palabras reservadas, la clusula ORDER BY
toma, por defecto, el tipo ascendiente [ASC].
He aqu algunos ejemplos:
SELECT nombre, apellidos, telefono FROM clientes ORDER BY apellidos, nombre
Crea una agenda telefnica de 'clientes' ordenada por 'apellidos' y 'nombre'.
SELECT * FROM pedidos ORDER BY fecha DESC
Relacin de 'pedidos' ordenados desde el ms antiguo hasta el ms moderno.
SELECT * FROM abonados ORDER BY apellidos, nombre, fecha_nacimiento DESC
Relacin de 'abonados' por 'apellidos' y 'nombre' ascendiente, y por 'fecha_nacimiento' en orden
descendiente (del ms viejo al ms joven).
Observacin: El resultado de una consulta es un objeto Datatable en la progracin Visual studio .Net
2005
4. Eliminacin Dinmica De Registros
Quin no ha sentido la necesidad de eliminar de un golpe un grupo de registros en comn, en lugar de
hacerlo uno por uno?. Esta operacin puede ser mucho ms habitual de lo que parece en un principio y,
por ello, el lenguaje SQL nos permitir eliminar registros que cumplan las condiciones o criterios que
nosotros le indiquemos a travs de la sentencia DELETE, cuya sintaxis es la siguiente:
DELETE FROM tablas WHERE criterios
Donde el parmetro 'tablas' indica el nombre de las tablas de las cuales se desea eliminar los registros, y,
el parmetro 'criterios', representa las comparaciones o criterios que deben cumplir los registros a
eliminar, respetando a aquellos registros que no los cumplan.
Si - por ejemplo - quisiramos eliminar todos los pedidos realizados por el cliente cuyo cdigo sea 4 en el
da de hoy, utilizaramos la siguiente sentencia:
DELETE FROM pedidos WHERE [codigo cliente]=4 AND fecha=Now();
5. Aritmtica Con Sql
Quin no ha echado en falta el saber el total de ingresos o de gastos de esta fecha a esta otra?.
Quin no ha deseado saber la media de ventas de los comerciales en este mes?. Tranquilos!: el lenguaje
SQL nos permitir resolver estas y otras cuestiones de forma muy sencilla, ya que posee una serie de
funciones de carcter aritmtico:
Sumas o Totales
Para sumar las cantidades numricas contenidas en un determinado campo, hemos de utilizar la funcin
SUM, cuya sintaxis es la siguiente:
SUM(expresin)
Donde 'expresin' puede representar un campo o una operacin con algn campo.
La funcin SUM retorna el resultado de la suma de la expresin indicada en todos los registros que son
afectados por la consulta.
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
Pg. 25
Retorna el total de unidades pedidas hoy. Este resultado se toma como un nuevo campo en el DataTable y
se le llama 'total'.
Promedios O Medias Aritmticas
Para averiguar el promedio de unas cantidades utilizaremos la funcin AVG, cuya sintaxis es la siguiente:
AVG(expresin)
La funcin AVG retorna el promedio o media aritmtica de la expresin especificada, en todos los registros
afectados por la consulta. Esto es lo mismo que realizar una suma (SUM) y, despus, dividir el resultado
entre el nmero de registros implicados.
He aqu algunos ejemplos:
SELECT AVG(unidades) FROM PEDIDOS
Retorna el promedio de unidades pedidas (la media de todos los valores almacenados en el campo
'unidades' de la tabla 'pedidos'). Este resultado se toma como un nuevo campo en el DataTable.
SELECT AVG(ingresos-gastos) AS saldo_medio FROM diario
Retorna el saldo medio de una tabla llamada 'diario'. Este resultado se toma como un nuevo campo en el
DataTable y se le llama 'saldo_medio'.
SELECT AVG(unidades) AS media FROM pedidos WHERE fecha=Now()
Retorna el promedio de unidades pedidas hoy. Este resultado se toma como un nuevo campo en el
DataTable y se le llama 'media'.
Valores Mnimos Y Mximos
Tambin es posible conocer el valor mnimo o mximo de un campo, mediante las funciones MIN y MAX,
cuyas sintaxis son las siguientes:
MIN(expresin)
MAX(expresin)
He aqu algunos ejemplos:
Pg. 26
Retorna el total, la media, el mximo y el mnimo de unidades pedidas, y el nmero de pedidos realizados,
durante el primer semestre de 2005.
Omisin De Registros Duplicados
En una consulta podra ser til omitir registros que estn duplicados. Por ejemplo, en nuestros pedidos
hay duplicacin, puesto que un cliente realiza varios pedidos en el mismo da. Quiz necesitemos una
historia para conocer los das y los clientes que realizaron algn pedido, pero no necesitaremos toda la
lista, si no que nos diga, nicamente, mediante una lnea, qu cliente realiz algn pedido y en qu da.
Para ello, utilizaremos el predicado DISTINCT, cuya sintaxis es la siguiente:
SELECT DISTINCT lista_campos ...
Pg. 27
El predicado DISTINCT omite aquellos registros duplicados en los campos especificados. En el problema
expuesto, utilizaremos la siguiente sentencia:
SELECT DISTINCT [codigo cliente],fecha FROM pedidos
Si deseamos que la consulta sea ms completa y nos visualice tambin el nombre y los apellidos
correspondientes del cliente en cuestin (estos datos estn en la tabla 'clientes' y no en 'pedidos'),
escribiramos este mandato:
SELECT DISTINCT pedidos.fecha, pedidos.[codigo cliente], clientes.nombre, clientes.apellidos FROM
pedidos, clientes WHERE clientes.[codigo cliente] = pedidos.[codigo cliente];
Reemplazar Datos
Imaginemos por un momento que el precio de los productos ha subido un 10%, y que tenemos que
actualizar nuestra tabla de productos con el nuevo importe. La solucin ms primitiva sera acceder a la
tabla y, el precio de cada producto multiplicarlo por 1.1 y reemplazarlo a mano. Con diez productos, la
inversin de tiempo podra llegar al cuarto de hora, y no estaremos exentos de fallos al tipear el importe o
al realizar el clculo en la calculadora. Si la tabla de productos superase la cantidad de 100 productos
(algo muy probable y fcil de cumplir), la cosa ya no es una pequea molestia y un poco de tiempo
perdido.
El lenguaje SQL nos permite solucionar este problema en cuestin de pocos segundos, ya que posee una
sentencia llamada Update, que se ocupa de los clculos y reemplazos. Su sintaxis es la siguiente:
UPDATE lista_tablas SET campo=nuevo_valor [,campo=nuevo_valor] [WHERE...]
Donde lista_tablas representa el nombre de las tablas donde se realizarn las sustituciones o reemplazos.
El parmetro campo indica el campo que se va a modificar, y el parmetro nuevo_valor representa una
expresin (constante, valor directo, un clculo, etc.) cuyo resultado o valor ser el nuevo valor del campo.
En el problema expuesto anteriormente escribiramos la siguiente sentencia:
UPDATE productos SET pvc=pvc*1.1
Si este incremento de precio de costo debe afectar al precio de venta al pblico un 30% de beneficio,
podramos escribir la siguiente lnea para ahorrar trabajo y tiempo:
UPDATE productos SET pvc=pvc*1.1, pvp=pvp*1.3
La sentencia UPDATE es muy verstil y potente, por lo que podemos realizar reemplazos condicionantes,
ya que permite la clusula WHERE. De ello se deduce que - por ejemplo -, si se desea bajar un 10% el
importe del seguro a aquellos asegurados que cumplan ms de dos aos de carnet de conducir, y que
tengan ms de 22 aos de edad, tendramos que escribir la siguiente sentencia:
UPDATE asegurados SET importe=importe/1.1 WHERE edad>22 AND YEAR(Now)-YEAR(expedicion)>2
Pero ah no queda la cosa, porque es posible utilizar varias tablas y sustituir el valor de un campo de una
de las tablas con el valor del campo de otra tabla, o bien reemplazar el valor de unos campos de alguna
tabla si el valor de los campos de otras tablas cumple una serie de requisitos. Estos casos no son tan
frecuentes, pero en el caso de haberlos se agradecer un buen planteamiento en el diseo inicial de la
base de datos.
7. Grupos De Registros
Pg. 28
A veces, puede ser necesario mostrar un resumen de los datos que tenemos, especificando el total - por
ejemplo -, de los ingresos y de los gastos de cada da, en lugar de visualizar todos los ingresos y gastos
realizados al detalle. Para llevar a cabo esta tarea hemos de tener en cuenta, en primer lugar, bajo qu
campo se van a agrupar los datos (en lo expuesto, sera el campo fecha), y, a continuacin, realizar la
consulta mediante la clusula GROUP BY, cuya sintaxis es la siguiente:
SELECT ... FROM ... [WHERE ...] GROUP BY lista_campos
Bsicamente, la clusula GROUP BY agrupa o combina registros con idntico valor en los campos
especificados, en un nico registro. Esto significa que en un slo registro se mostrar la informacin
comn a muchos registros, como si dijsemos, al terminar las cuentas: "hoy se ha ingresado tanto y se ha
gastado tanto, con lo que hay un beneficio de tanto", sin necesidad de especificar cada movimiento (cada
ingreso, cada cobro, cada pago, cada factura, cada transferencia bancaria, etc.).
Imaginemos que queremos hacer un resumen de nuestros pedidos, y queremos saber cuntos pedidos y
unidades han realizado cada uno de nuestros clientes. Para ello, se escribira una sentencia como sta:
SELECT codigo_cliente, count(codigo_cliente) AS num_pedidos, SUM(unidades) AS cantidad FROM pedidos
GROUP BY
codigo_cliente
Para saber cuntos pedidos se realizaron cada da, escribiramos esta lnea:
Para conocer cuntas unidades se pidieron cada da, tipearamos esta sentencia:
En la siguiente sentencia se muestra para cada cliente aquellos das en que se realiz un pedido,
resumindose el nmero de pedidos realizados as como el total de unidades pedidas:
Como se puede apreciar, se ha especificado una condicin a travs de la clusula HAVING, que indica los
criterios o condiciones a cumplir por los registros a visualizar en un agrupamiento. En esta ocasin, la
condicin era de aquellos pedidos realizados antes del seis de Enero de 2005.
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
Pg. 29
FECHA
----2/01/2005
3/01/2005
4/01/2005
6/01/2005
PEDIDOS
------9
5
3
6
UNIDADES
-------1599
113
33
90
MINIMO
-----2
1
3
5
MAXIMO
-----1500
100
25
50
PROMEDIO
-------177,6
22,6
11,0
15,0
C.NombreCategora,
P.PrecioUnidad,
ESPACIO EN BLANCO
select
D.idpedido,
P.idproducto,
P.NombreProducto,
d.cantidad,
d.precioUnidad,
D.descuento, (D.cantidad * D.preciounidad) * (1 - D.descuento) as Importe
from [Detalles de Pedidos] D inner Join Productos P
on D.idproducto=P.Idproducto
order by D.Idpedido
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
Pg. 30
select
D.idpedido,
P.idproducto,
P.NombreProducto,
d.cantidad,
d.precioUnidad,
D.descuento,
(D.cantidad
*
D.preciounidad)
*
(1
D.descuento)
as
Importe,
year(K.FechaPedido) as ao
from [Detalles de Pedidos] D inner Join Productos P
on D.idproducto=P.Idproducto
inner join Pedidos K
on D.idPedido = K.idpedido
where year(k.fechapedido)=1998
order by 1
select count(*) from pedidos
where year(fechaPedido)=1997
select sum(UnidadesenExistencia) as stock
from productos
where idCAtegora=1+
select max(PrecioUnidad)as Mayor_Precio, Min(PrecioUnidad) as Menor_Precio from productos
Select AVG(p.precioUnidad) as Precio_Promedio
from Productos P Inner Join Categoras C
on P.IdCAtegora=C.IdCategora
where C.NombreCategora ='Condimentos'
Select NombreProducto, PrecioUnidad, IdCategora
From Productos
where PrecioUnidad>(Select AVG(PrecioUnidad) from Productos)
Select top 10 NombreProducto, PrecioUnidad
from Productos
Order By PrecioUnidad Desc
Select IdProducto, NombreProducto, (Select SUM(PrecioUnidad*Cantidad)
From [Detalles de Pedidos]
Where [Detalles de pedidos].idProducto=Productos.IdProducto)
from productos
Where IdCAtegora=1
Pg. 31
DEMO1: Uso
Dataset
de
los
Imports System.Data.SqlClient
Public Class Form1
Private CN As New
catalog=EmpresaEBP")
Objetos
Connection,
SqlConnection("server=.;integrated
DataAdapter
security=true;initial
Imports System.Data.SqlClient
Public Class Form1
Private CN As New SqlConnection("Server=.;integrated security=true; initial
catalog=EmpresaEBP")
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
Pg. 32
Pg. 33
As
Imports System.Data.SqlClient
Public Class Form1
Private CN As New SqlConnection("server=.;integrated security=true;initial
catalog=EmpresaEBP")
Private DAP As New SqlDataAdapter("select idCategora, NombreCategora from Categoras",
CN)
Private DST As New DataSet
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Text = "DEMO05 - USO DE ROW FILTER (FILTRAR FILAS)"
Try
DAP.Fill(DST, "Tcate")
DAP.SelectCommand.CommandText = "Select * from Productos"
DAP.Fill(DST, "Tpro")
With cboCate
.DataSource = DST.Tables("Tcate")
.DisplayMember = "NOmbreCategora"
.ValueMember = "Idcategora"
End With
dgvPro.DataSource = DST.Tables("Tpro").DefaultView
txtCant.Text = dgvPro.RowCount - 1
Catch ex As Exception
MsgBox(ex.Message(), MsgBoxStyle.Critical, "Aviso")
End Try
End Sub
Private Sub cboCate_SelectedIndexChanged(ByVal sender As System.Object,
System.EventArgs) Handles cboCate.SelectedIndexChanged
Try
DST.Tables("tpro").DefaultView.RowFilter = "idCategora=" &
cboCate.SelectedValue
txtCant.Text = dgvPro.RowCount - 1
ByVal
As
Catch ex As Exception
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
End Sub
End Class
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
Pg. 34
Imports System.Data.SqlClient
Public Class Form1
Private cn As New SqlConnection("server=.;integrated security=sspi;database=EmpresaEBP")
Private cmd As New SqlCommand("Select nombrecompaa from proveedores order by 1", cn)
Private drd As SqlDataReader
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Try
cn.Open() 'abrir la conexion
drd = cmd.ExecuteReader 'ejecutar la consulta por el objeto comando y el
resultado es el objeto dataAdapter
'llenar el listado
Do While drd.Read
lstProvee.Items.Add(drd(0).ToString) '0 es el nmero de la columna del
drd
Loop
drd.Close() 'Cerrar el objeto datareader
cmd.CommandText = "Select count(*)from proveedores"
LblTotal.Text = (cmd.ExecuteScalar).ToString
Catch ex As Exception
MsgBox("Error:" & ex.Message)
End Try
End Sub
End Class
Pg. 35
Imports System.Data.SqlClient
Public Class frmdatareader
Private
CN
As
New
security=sspi;database=EmpresaEBP")
Private CMD As New SqlCommand
Private cadena As String
Private drd As SqlDataReader = Nothing
SqlConnection("server=(Local);integrated
Private
Sub
frmdatareader_Load(ByVal
sender
As
System.Object,
ByVal
System.EventArgs) Handles MyBase.Load
Try
CN.Open()
CMD.Connection = CN
CMD.CommandType = CommandType.Text
Catch ex As Exception
MsgBox("Aviso:" & ex.Message(), MsgBoxStyle.Critical, "Error")
End Try
As
End Sub
Private Sub btnMostrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnMostrar.Click
If txtf1.Text = "" Or txtf2.Text = "" Then
MsgBox("Faltan datos,Intentar de nuevo...", MsgBoxStyle.Information, "Aviso")
Exit Sub
End If
Try
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
Pg. 36
cadena = "select count(*) from pedidos where fechapedido between '" & txtf1.Text
& "' and '" & txtf2.Text & "'"
CMD.CommandText = cadena
txtr1.Text = (CMD.ExecuteScalar).ToString
cadena = "Select sum((d.cantidad * d.precioUnidad)* (1-d.descuento)) from
Pedidos P Join [Detalles de Pedidos] D on P.Idpedido=d.Idpedido
where p.FechaPedido between'" & txtf1.Text & "' and '" &
txtf2.Text & "'"
CMD.CommandText = cadena
txtr2.Text = (CMD.ExecuteScalar).ToString
cadena = "Select sum((d.cantidad * d.precioUnidad)* (d.descuento)) from
Pedidos P join [Detalles de pedidos] d on P.Idpedido =
D.idPedido where P.FechaPedido Between '" & txtf1.Text & "' and
'" & txtf2.Text & "'"
CMD.CommandText = cadena
txtr3.Text = (CMD.ExecuteScalar).ToString
cadena = "select AVG(d.cantidad) from pedidos P join [detalles de pedidos] D
on p.Idpedido=D.idpedido where p.fechaPedido Between '" &
txtf1.Text & "' and '" & txtf2.Text & "'"
CMD.CommandText = cadena
txtr4.Text = (CMD.ExecuteScalar)
Catch ex As Exception
MsgBox("Aviso:" & ex.Message(), MsgBoxStyle.Critical, "Error")
End Try
Configurartabla()
End Sub
Private Sub Configurartabla()
cadena = "select P.Idpedido, P.IdCliente, P.FechapEdido, D.IdProducto,
D.Cantidad, D.PrecioUnidad, D.Descuento from pedidos P Join [Detalles
de Pedidos] D on P.Idpedido=d.Idpedido where P.fechaPEdido between '"
& txtf1.Text & "'and '" & txtf2.Text & "'"
CMD.CommandText = cadena
drd = CMD.ExecuteReader
Dim dt As New DataTable
'configurando campos para el datatable
With dt.Columns
.Add(New DataColumn("idPedido"))
.Add(New DataColumn("idCliente"))
.Add(New DataColumn("FechaPedido"))
.Add(New DataColumn("IdProducto"))
.Add(New DataColumn("Cantidad"))
.Add(New DataColumn("Precio"))
.Add(New DataColumn("Descuento"))
End With
'llenar Datatable
Do While drd.Read()
Dim drw As DataRow = dt.NewRow
drw("idPedido") = drd(0)
drw("idCliente") = drd(1)
drw("FechaPEdido") = drd(2)
drw("IdPRoducto") = drd(3)
drw("Cantidad") = drd(4)
drw("Precio") = drd(5)
drw("Descuento") = drd(6)
'Agregamos la fila datarow al datatable
dt.Rows.Add(drw)
Loop
dgvPedidos.DataSource = dt
drd.Close()
End Sub
End Class
Pg. 37
Imports System.Data.SqlClient
Public Class Form1
Private
CN
As
New
SqlConnection("server=server03-02;integrated
security=sspi;database=EmpresaEBP")
Private DAP As New SqlDataAdapter("Select * from Clientes", CN)
Private dst As New DataSet
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Try
DAP.Fill(dst, "tclientes")
DAP.SelectCommand.CommandText = "select * from pedidos"
DAP.Fill(dst, "Tpedidos")
DAP.SelectCommand.CommandText = "select * from [Detalles de pedidos]"
DAP.Fill(dst, "Tdetalles")
'relacionar tablas en el dataser
'crear objeto data relation
Dim R1 As New DataRelation("Ver pedidos",
dst.Tables("tclientes").Columns("idCliente"),
dst.Tables("tpedidos").Columns("idCliente"))
'Agregar el objeto datarelation al dataset
dst.Relations.Add(R1)
Dim R2 As New DataRelation("ver datalles",
dst.Tables("Tpedidos").Columns("idpedido"),
dst.Tables("Tdetalles").Columns("idPedido"))
dst.Relations.Add(R2)
dgdConsultas.DataSource = dst.Tables("Tclientes")
Catch ex As Exception
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
Pg. 38
MsgBox(ex.Message)
End Try
End Sub
End Class
Pg. 39
Imports System.Data.SqlClient
Public Class Form1
Private cConect As New SqlConnection("server=(Local);integrated security=sspi;initial
catalog=EmpresaEBP")
Private aAdap As New SqlDataAdapter("select IdCliente, NombreCompaa, NombreContacto,
Direccin, Ciudad, Pas from clientes", cConect)
Private dDst As New DataSet
Private dDt As New DataTable
Private nFila As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
aAdap.Fill(dDst, "Clientes")
'aAdap.Fill(dDt)
dDt = dDst.Tables("Clientes")
MostrarDatos(0)
End Sub
Private Sub MostrarDatos(ByVal F As Integer)
Dim UF As Integer = dDt.Rows.Count - 1
If F < 0 OrElse UF < 0 Then Exit Sub
Dim dr As DataRow = dDt.Rows(F)
txtIdCliente.Text = dr("idCliente").ToString
txtCliente.Text = dr("NombreCompaa").ToString
txtContacto.Text = dr("NombreContacto").ToString
txtDireccion.Text = dr("Direccin").ToString
txtPais.Text = dr("Direccin").toString
txtCiudad.Text = dr("Ciudad").toString
End Sub
Private Sub btnInicio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnInicio.Click
'posicionar en la primera fila
nFila = 0
MostrarDatos(nFila)
End Sub
Private Sub btnAnterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnAnterior.Click
'posicionarse en la fila anterior
nFila = nFila - 1
If nFila < 0 Then nFila = 0
MostrarDatos(nFila)
End Sub
Private
Sub
btnSiguiente_Click(ByVal
sender
As
System.EventArgs) Handles btnSiguiente.Click
Dim Uf As Integer = dDt.Rows.Count - 1
nFila = nFila + 1
If nFila > Uf Then nFila = Uf
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
System.Object,
ByVal
Pg. 40
As
MostrarDatos(nFila)
End Sub
Private Sub btnUltimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnUltimo.Click
Dim uf As Integer = dDt.Rows.Count - 1
nFila = uf
MostrarDatos(nFila)
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button5.Click
cConect.Close()
cConect.Dispose()
Application.Exit()
End Sub
End Class
Imports System.Data.SqlClient
Public Class Form1
'filtros con 2 datagrid
Private
Cn
As
New
SqlConnection("Server=(Local);
integrated
Security=true;
Database=EmpresaEBP")
Private Dap As New SqlDataAdapter("Select * from pedidos", Cn)
Private Dst As New DataSet
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Try
Dap.Fill(Dst, "Pedidos")
dgdpedidos.DataSource = Dst.Tables("Pedidos").DefaultView
Dap.SelectCommand.CommandText = "Select * From [Detalles de Pedidos]"
Dap.Fill(Dst, "DEtalles")
dgdeta.DataSource = Dst.Tables("detalles").DefaultView
Catch ex As Exception
MsgBox("Error:" & ex.Message(), MsgBoxStyle.Critical, "Aviso")
End Try
End Sub
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
Pg. 41
As
ne
As
End Sub
End Class
Imports System
Imports System.Data.SqlClient
Public Class Form1
Private cn As New SqlConnection("server=.; integrated security=true;database=EmpresaEBP")
Private dap As New SqlDataAdapter("select idEmpleado, Nombre, Apellidos, cargo from
Empleados", cn)
Private dst As New DataSet
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Try
dap.Fill(dst, "emp")
txtid.DataBindings.Add("text", dst.Tables("emp"), "IdEmpleado")
txtNombres.DataBindings.Add("text", dst.Tables("emp"), "Nombre")
txtApellidos.DataBindings.Add("text", dst.Tables("emp"), "Apellidos")
txtCargo.DataBindings.Add("text", dst.Tables("emp"), "CArgo")
Catch ex As Exception
MsgBox("Error:" & ex.Message())
End Try
End Sub
End Class
Pg. 42
Imports System.Data.SqlClient
Public Class Form1
Private CN As New SqlConnection("Server=.; integrated Security=sspi; Initial
catalog=EmpresaEBP")
Private DAP As New SqlDataAdapter("usp_listarproductos", CN)
Private DST As New DataSet
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Timer1.Tick
lblreloj.Text = Now.ToLongTimeString
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Try
DAP.Fill(DST, "Productos")
DAP.SelectCommand.CommandType = CommandType.StoredProcedure
DAP.SelectCommand.CommandText = "usp_listarcategorias"
DAP.Fill(DST, "Cat")
dgvprod.DataSource = DST.Tables("productos").DefaultView
With cbocat
.DataSource = DST.Tables("Cat")
.DisplayMember = "NombreCategora"
.ValueMember = "IdCategora"
End With
cbocat_SelectedIndexChanged(sender, e)
Catch ex As Exception
MsgBox("Error..." & ex.Message())
End Try
End Sub
Private Sub cbocat_SelectedIndexChanged(ByVal sender As System.Object, ByVal
System.EventArgs) Handles cbocat.SelectedIndexChanged
Try
DST.Tables("Productos").DefaultView.RowFilter = "idCategora=" &
cbocat.SelectedValue
txtTotal.Text = dgvprod.RowCount.ToString
Catch ex As Exception
End Try
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
Pg. 43
As
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Close()
End Sub
End Class
Imports System.Data.SqlClient
Public Class clientesporpais
Private
CN
As
New
SqlConnection("Server=.;
integrated
Security=sspi;
Initial
catalog=EmpresaEBP")
Private DAP As New SqlDataAdapter("usp_paises", CN)
Private DST As New DataSet
Private Par As New SqlParameter
Private
Sub
clientesporpais_Load(ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs) Handles MyBase.Load
Try
DAP.Fill(DST, "Paises")
DAP.SelectCommand.CommandType = CommandType.StoredProcedure
DAP.SelectCommand.CommandText = "usp_Clienteslistar"
DAP.Fill(DST, "Clientes")
llenarcombo()
dgvCli.DataSource = DST.Tables("Clientes").DefaultView
DAP.SelectCommand.CommandText = "usp_ClientesPaises"
Par = DAP.SelectCommand.Parameters.Add("@xpais", SqlDbType.VarChar, 20)
Par.Direction = ParameterDirection.Input
Catch ex As Exception
MsgBox("Error...:" & ex.Message())
End Try
End Sub
Private Sub llenarCombo()
Dim I As Integer
For I = 0 To DST.Tables("Paises").Rows.Count - 1
Cbopais.Items.Add(DST.Tables("paises").Rows(I).Item(0))
Next I
End Sub
Private Sub Cbopais_SelectedIndexChanged(ByVal sender As System.Object,
System.EventArgs) Handles Cbopais.SelectedIndexChanged
Try
DST.Clear()
Par.Value = Cbopais.Text
DAP.Fill(DST, "Clientespais")
dgvCli.DataSource = DST.Tables("ClientesPais").DefaultView
txtTotal.Text = DST.Tables("clientespais").Rows.Count.ToString
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
ByVal
Pg. 44
As
Catch ex As Exception
MsgBox(ex.Message())
End Try
End Sub
End Class
System.EventArgs)
Handles
End Sub
Private Sub Listaproductos()
Try
par.Value = txtNombre.Text
drd = cmd.ExecuteReader
lstpro.Items.Clear()
Do While drd.Read
lstpro.Items.Add(drd(0))
Loop
drd.Close()
Catch ex As Exception
MsgBox(ex.Message())
End Try
End Sub
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
Pg. 45
Private
DEMO 13
- MODULOS.
initial
Pg. 47
End Function
Public Function pedidos_Empleados(ByVal vEmpleado As Short) As DataTable
Try
Dim con As New SqlConnection(xcon)
Dim adap As New SqlDataAdapter("usp_pedidos_Empleados", con)
Dim daset As New DataSet
adap.SelectCommand.CommandType = CommandType.StoredProcedure
adap.SelectCommand.Parameters.Add(New SqlParameter("@idEmp", SqlDbType.Int,
1)).Value = vEmpleado
adap.Fill(daset, "pEmpl")
Return daset.Tables("pEmpl")
Catch ex As Exception
Throw ex
End Try
End Function
Try
Dim con As New SqlConnection(xcon)
Dim adap As New SqlDataAdapter("usp_pedidos_pais", con)
Dim daset As New DataSet
With adap.SelectCommand
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@pais", SqlDbType.NVarChar, 15)).Value
= vpais
adap.Fill(daset, "xpais")
Return daset.Tables("xpais")
End With
Catch ex As Exception
Throw ex
End Try
End Function
End Module
Pg. 48
As
Pg. 49
txtDato2.Visible = False
GroupBox2.Visible = False
End If
End Sub
Private Sub rbtnEF_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles rbtnEF.CheckedChanged
accesos()
End Sub
Private Sub rbtnClientes_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles rbtnClientes.CheckedChanged
accesos()
End Sub
Private Sub rbtnempleados_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles rbtnempleados.CheckedChanged
accesos()
End Sub
Private Sub rbtnPD_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles rbtnPD.CheckedChanged
accesos()
End Sub
Private Sub rbtnTodos_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles rbtnTodos.CheckedChanged
accesos()
End Sub
Private Sub btnCerrar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnCerrar.Click
Close()
End Sub
End Class
DEMO 14
- USO DE
Mantemineto de tablas
CLASES
LGICA
DE
NEGOCIOS-
Pg. 50
El primer formulario:
El Segundo formulario:
As
String
nombre
"Integrated
Pg. 51
Pg. 52
End Try
End Function
End Class
El Segundo con
siguiente Script
el
nombre
ModDeclaraciones
con
Module ModDeclaraciones
Public nr As Integer
End Module
Pg. 53
el
As
System.Object,
Object,
ByVal
As
ByVal
As
As
System.Object,
ByVal
As
Pg. 54
Pg. 55
Pg. 56
Crear la Capa de Lgica de Negocios.- esta compuesta por la clase de objetos que usara la
aplicacin.
Clase de Objetos: Es en donde se definen los objetos, sus caractersticas y su
comportamiento: (Propiedades y Mtodos)
Tambin se le dice que una clase es la plantilla de un objeto.
Pg. 57
Return Dst.Tables("TpedidosPais")
Catch ex As Exception
MsgBox("Error: " & ex.Message, MsgBoxStyle.Critical, "Aviso")
End Try
End Function
Pg. 58
End Class
Pg. 59
DEMO 16 Aplicacin
Librera DLL
Cliente
Servidor
Tres
Capas
con
Pg. 60
ParameterDirection.Output
.Parameters.Add(New SqlParameter("@Nombre", SqlDbType.VarChar, 40)).Value
= vNom
.Parameters.Add(New SqlParameter("@IdProvee", SqlDbType.Int)).Value =
vIdprovee
.Parameters.Add(New SqlParameter("@IdCate", SqlDbType.Int)).Value =
vIdCate
.Parameters.Add(New SqlParameter("@Precio", SqlDbType.Money)).Value =
vPrecio
.Parameters.Add(New SqlParameter("@Stock", SqlDbType.Int)).Value = vStock
End With
cn.Open()
Cmd.ExecuteScalar()
Return Cmd.Parameters("@IdPro").Value
cn.Close()
Catch ex As Exception
MsgBox("Error:" & ex.Message, MsgBoxStyle.Critical, "Alerta")
End Try
End Function
'--Mtodo para Actualizar Producto--Public Sub setProducto(ByVal vIdPro As Integer, ByVal vNom As String, ByVal vIdprovee
As Integer, ByVal vIdCate As Integer, ByVal vPrecio As Single, ByVal
vStock As Integer)
Try
Dim cn As New SqlConnection(conex)
Dim Cmd As New SqlCommand("Usp_Producto_Actualizar", cn)
With Cmd
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@IdPro", SqlDbType.Int)).Value = vIdPro
.Parameters.Add(New SqlParameter("@Nombre", SqlDbType.VarChar,40)).Value
= vNom
.Parameters.Add(New SqlParameter("@IdProvee", SqlDbType.Int)).Value =
vIdprovee
.Parameters.Add(New SqlParameter("@IdCate", SqlDbType.Int)).Value =
vIdCate
.Parameters.Add(New SqlParameter("@Precio", SqlDbType.Money)).Value =
vPrecio
.Parameters.Add(New SqlParameter("@Stock", SqlDbType.Int)).Value = vStock
End With
cn.Open()
Cmd.ExecuteNonQuery()
cn.Close()
Catch ex As Exception
MsgBox("Error:" & ex.Message, MsgBoxStyle.Critical, "Alerta")
End Try
End Sub
'--Eliminar Producto---Public Sub setProducto(ByVal vIdPro As Integer)
Try
Dim cn As New SqlConnection(conex)
Dim Cmd As New SqlCommand("Usp_Producto_Eliminar", cn)
With Cmd
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@IdPro", SqlDbType.Int)).Value = vIdPro
End With
cn.Open()
Cmd.ExecuteNonQuery()
cn.Close()
Catch ex As Exception
MsgBox("Error:" & ex.Message, MsgBoxStyle.Critical, "Alerta")
End Try
End Sub
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
Pg. 61
End Class
Capa de Presentacin:
solDemo ManteProductos
Formulario FrmMantePro
Imports BibliotecaProductos
Public Class FrmMantePro
#Region "Variables y Procedimientos"
Private objPro As New ClsProductos
Private Sub MostrarDatos(ByVal Tipo As Short)
operacion = Tipo
Dim Fila As Integer = dgwProductos.CurrentCell.RowIndex
With dgwProductos
xCodi = .Item(0, Fila).Value
xNom = .Item(1, Fila).Value
xProvee = .Item(2, Fila).Value
xCate = .Item(3, Fila).Value
xPrecio = .Item(4, Fila).Value
xStock = .Item(5, Fila).Value
My.Forms.FrmDatosProducto.ShowDialog()
End With
End Sub
#End Region
Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
Me.Close()
End Sub
Private Sub FrmMantePro_Activated(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Activated
dgwProductos.DataSource = objPro.getProductos().DefaultView
End Sub
Private Sub btnAdicionar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnAdicionar.Click
MostrarDatos(0)
End Sub
Pg. 62
ds.ReadXml("Productos.xml")
dgwProductos.DataSource = ds.Tables(0).DefaultView
Catch ex As Exception
MsgBox("Error:" & ex.Message)
End Try
End Sub
Formulario FrmDatosProducto
Imports BibliotecaProductos
Public Class FrmDatosProducto
#Region "Declaraciones"
Private xobjPro As New ClsProductos
Private Sub MostrarProducto()
txtIdPro.Text = xCodi
TxtNom.Text = xNom
cboProvee.SelectedValue = xProvee
CboCate.SelectedValue = xCate
mskPrecio.Text = xPrecio
mskStock.Text = xStock
End Sub
Private Sub LimpiarControles()
txtIdPro.Clear()
TxtNom.Clear()
cboProvee.SelectedIndex = -1
CboCate.SelectedIndex = -1
mskPrecio.Clear()
mskStock.Clear()
End Sub
Private Sub LlenarCombos()
With cboProvee
.DataSource = xobjPro.getListas().Tables("tProvee")
.DisplayMember = "NombreCompaa" '--->.SelectedItem
.ValueMember = "IdProveedor" '--->.Selectedvalue
End With
With CboCate
.DataSource = xobjPro.getListas().Tables("tCate")
.DisplayMember = "NombreCategora"
.ValueMember = "IdCategora"
End With
End Sub
#End Region
Private Sub FrmDatosProducto_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
LlenarCombos()
If operacion = Transacciones.Adicionar Then
Me.Text = "Adicionando Nuevo Producto..."
gbxProducto.Enabled = True
btnAceptar.Text = "Guardar"
LimpiarControles()
txtIdPro.Enabled = False
TxtNom.Focus()
ElseIf operacion = Transacciones.Actualizar Then
Me.Text = "Actualizar Producto..."
gbxProducto.Enabled = True
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
Pg. 63
btnAceptar.Text = "Actualizar"
MostrarProducto()
ElseIf operacion = Transacciones.Eliminar Then
Me.Text = "Eliminar Producto..."
gbxProducto.Enabled = False
btnAceptar.Text = "Eliminar"
MostrarProducto()
End If
End Sub
Mdulo ModDeclaraciones
Module ModDeclaraciones
Public xCodi, xNom, xProvee, xCate, xPrecio, xStock As String
Public Enum Transacciones 'Crear un enumerado
'ES UNA ARREGLO DE CONSTANTES
Adicionar = 0
Actualizar = 1
Eliminar = 2
End Enum
Public operacion As Transacciones
End Module
Capa de Datos:
---script Manteminiento de Productos------CAPA DE DATOS---CREATE PROCEDURE Usp_Productos_Listar
As
Select IdProducto, NombreProducto,IdProveedor,IdCategora,
PrecioUnidad,UnidadesEnExistencia
From Productos
ORDER BY 2
GO
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com
Pg. 64
Pg. 65