You are on page 1of 65

Carrera Profesional de Computacin e Informtica

Unidad Didctica
Taller de Programacin Distribuida
Mdulo II
IV CICLO

SEPARATA DE APLICACIONES PARA


WINDOWS
EN
VISUAL BASIC .NET 2010
ELABORADO POR
Prof. Rolando Chvez Fiestas

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 1

Carrera Profesional de Computacin e Informtica

APLICACIN 1: Manejo del Control ListView

Public Class Form1


Private tota As Double
Private Sub RbtTurnos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles RbtM.CheckedChanged, RbtT.CheckedChanged,
RbtN.CheckedChanged
Select Case True
Case RbtM.Checked
Select Case NumCiclo.Value
Case 1 : TxtPago.Text = "210.00"
Case 2, 3 : TxtPago.Text = "195.00"
Case 4, 5 : TxtPago.Text = "170.00"
Case 6 : TxtPago.Text = "180.00"
End Select
Case RbtT.Checked
Select Case NumCiclo.Value
Case 1 : TxtPago.Text = "190.00"
Case 2, 3 : TxtPago.Text = "175.00"
Case 4, 5 : TxtPago.Text = "160.00"
Case 6 : TxtPago.Text = "170.00"
End Select
Case RbtN.Checked
Select Case NumCiclo.Value
Case 1 : TxtPago.Text = "220.00"
Case 2, 3 : TxtPago.Text = "200.00"
Case 4, 5 : TxtPago.Text = "185.00"
Case 6 : TxtPago.Text = "190.00"
End Select
End Select
End Sub
Private Sub NumCiclo_ValueChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles NumCiclo.ValueChanged
RbtTurnos(sender, e)
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 2

Carrera Profesional de Computacin e Informtica

End Sub

Private Sub TxtPago_TextChanged(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles TxtPago.TextChanged
If Len(TxtPago.Text) > 1 Then BtnAceptar.Enabled = True Else
BtnAceptar.Enabled = False
End Sub
Private Sub BtnAceptar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnAceptar.Click
Dim DES As Single = IIf(ChkContado.Checked,
Convert.ToSingle(TxtPago.Text) * 0.1, 0)
Dim importe As Single = Convert.ToSingle(TxtPago.Text) - DES
tota += importe
With LsvReg.Items.Add(LsvReg.Items.Count + 1)
.SubItems.Add(DtpF.Value.ToString)
.SubItems.Add(CboCar.Text)
.SubItems.Add(NumCiclo.Text)
.SubItems.Add(IIf(RbtN.Checked, "Maana", IIf(RbtT.Checked, "Tarde",
"Noche")))
.SubItems.Add(TxtPago.Text)
.SubItems.Add(DES.ToString("#,##0.00"))
.SubItems.Add(importe.ToString("#,##0.00"))
End With
Txttotal.Text = tota.ToString("#,##0.00")
BorrarDatos()
End Sub
Private Sub Borrardatos()
CboCar.Text = ""
NumCiclo.Value = 1
RbtM.Checked = False
RbtT.Checked = False
RbtN.Checked = False
ChkContado.Checked = False
TxtPago.Clear()
End Sub

Private Sub BtnBt_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles BtnBt.Click
LsvReg.Items.Clear()
tota = 0
Txttotal.Text = "0.00"
End Sub
Private Sub Form1_Activated(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Activated
CboCar.SelectedIndex = -1
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim Carreras() As String = {"Computacin", "Contabilidad",
"Administracin", "Secretariado", "Electrnica"}
CboCar.DataSource = Carreras
End Sub
End Class
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 3

Carrera Profesional de Computacin e Informtica

APLICACIN 2: Uso de Mltiples Formularios y


Cuadros de Dialogos.
DIALOG BOX

Public Class frmEditor


Private N As Byte
Private Sub mnuArchivo_Nuevo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuArchivo_Nuevo.Click
Dim F As New frmDocumento()
F.MdiParent = Me
N += 1
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 4

Carrera Profesional de Computacin e Informtica

F.Text = "Documento " & N.ToString


F.Show()
End Sub
Private Sub mnuVentana_Cascada_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles mnuVentana_Cascada.Click
LayoutMdi(MdiLayout.Cascade)
End Sub
Private Sub mnuVentana_MH_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuVentana_MH.Click
LayoutMdi(MdiLayout.TileHorizontal)
End Sub
Private Sub mnuVentana_MV_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuVentana_MV.Click
LayoutMdi(MdiLayout.TileVertical)
End Sub
Private Sub mnuVentana_OI_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuVentana_OI.Click
LayoutMdi(MdiLayout.ArrangeIcons)
End Sub
Private Sub mnuArchivo_Abrir_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuArchivo_Abrir.Click
Try
With ofdEditor
.Title = "Abrir archivo de Texto"
.Filter = "Archivo de Texto (*.txt)|*.txt"
If .ShowDialog() = DialogResult.OK And .FileName <> "" Then
Dim X As New RichTextBox
X = ActiveMdiChild.Controls(0)
X.LoadFile(.FileName, RichTextBoxStreamType.PlainText)
End If
End With
Catch ex As Exception
MsgBox(ex.Message())
End Try
End Sub
Private Sub mnuArchivo_Guardar_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles mnuArchivo_Guardar.Click
With sfdEditor
.Title = "Guardar archivo de Texto"
.Filter = "Archivo de Texto (*.txt)|*.txt"
If .ShowDialog() = DialogResult.OK And .FileName <> "" Then
Dim X As RichTextBox = ActiveMdiChild.Controls(0)
X.SaveFile(.FileName, RichTextBoxStreamType.PlainText)
End If
End With
End Sub
Private Sub mnuArchivo_Salir_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuArchivo_Salir.Click
End
End Sub
Private Sub mnuFormato_Fuente_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles mnuFormato_Fuente.Click
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 5

Carrera Profesional de Computacin e Informtica

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

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 6

Carrera Profesional de Computacin e Informtica

APLICACIN 3:Diseo de Menus y Arreglo de


Estucturas
MDI CONTAINER

Public Class MDIPrincipal


Private Sub MnuNuevo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuNuevo.Click
Dim f As New FrmDatos
f.ShowDialog()
End Sub
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 7

Carrera Profesional de Computacin e Informtica

Private Sub MnuListar_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MnuListar.Click
Dim f As New FrmListar
f.ShowDialog()
End Sub
Private Sub MnuSalir_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuSalir.Click
Application.Exit()
End Sub
Private Sub MnuEditar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuEditar.Click
Dim f As New FrmEditar
f.ShowDialog()
End Sub

FrmEditar:

Public Class FrmEditar


Private n As Integer ' Variable declarada fuera del Load , siempre con Private
Private Sub Llenarcombo()
Cbocodigo.Items.Clear() 'Limpiar el combo primero
With Cbocodigo.Items
Dim i As Integer
For i = 1 To Nreg
.Add(REGEmp(i).IdEmpleado.ToString)
Next
End With
End Sub
Private Sub FrmEditar_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Llenarcombo()
Cbocodigo.SelectedIndex = -1
End Sub
Private Sub BtnCerrar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnCerrar.Click
Close()
End Sub
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 8

Carrera Profesional de Computacin e Informtica

Private Sub Cbocodigo_SelectedIndexChanged(ByVal sender As System.Object, ByVal


e
As
System.EventArgs) Handles Cbocodigo.SelectedIndexChanged
n = Cbocodigo.SelectedIndex + 1
With REGEmp(n)
Txtape.Text = .ApeEmpleado
Txtnom.Text = .NomEmpleado
TxtFeing.Text = .FecIngEmpleado.ToString
Txtsueldo.Text = .SBEmpleado.ToString
End With
End Sub
Private Sub BtnGrabar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnGrabar.Click
With REGEmp(n)
.ApeEmpleado = Txtape.Text
.NomEmpleado = Txtnom.Text
.FecIngEmpleado = Convert.ToDateTime(TxtFeing.Text)
.SBEmpleado = Convert.ToSingle(Txtsueldo.Text)
End With
'El MessageBox es una Clase en cambio el MSGBOX es un mtodo
MessageBox.Show("Datos Actualizados Correctamente")
ActivarControles(False)
End Sub
Private Sub BtnEliminar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnEliminar.Click
Dim i As Integer
For i = n To Nreg - 1
REGEmp(i) = REGEmp(i + 1)
Next
Nreg -= 1
MsgBox("Registro Eliminado", MsgBoxStyle.Information)
Llenarcombo()
End Sub
Private Sub BtnEditar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnEditar.Click
ActivarControles(True)
End Sub
Private Sub ActivarControles(ByVal sw As Boolean)
Dim x As Object
For Each x In Controls
If TypeOf x Is TextBox Then
x.enabled = sw
End If
Next
End Sub
End Class

Frmdatos

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 9

Carrera Profesional de Computacin e Informtica

Public Class FrmDatos


'Declaracin Pblica para el formulario antual
antes del Load
Private Sub LimpiarCajas()
Dim obj As Control
For Each obj In Controls ' tambien se
puede usar In Objects
If TypeOf obj Is TextBox Then
obj.Text = ""
Next
End Sub
Private Sub BtnNuevo_Click(ByVal sender As
System.Object, ByVal e As
System.EventArgs) Handles BtnNuevo.Click
LimpiarCajas()
txtcodi.Focus()
End Sub
Private Sub BtnCerrar_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Handles BtnCerrar.Click
Close()
End Sub
Private Sub BtnRegistar_Click(ByVal sender As Object, ByVal e As
System.EventArgs)
Handles BtnRegistar.Click
If Nreg = 0 Then
Nreg = 1
Else
Nreg += 1
End If
Try
'El cdigo del empleado es generado
txtcodi.Text = Nreg.ToString
'Luego Redimensionar el arreglo de Registro
ReDim Preserve REGEmp(Nreg)
With REGEmp(Nreg.ToString)
.IdEmpleado = Convert.ToInt16(txtcodi.Text)
.ApeEmpleado = Txtape.Text
.NomEmpleado = Txtnom.Text
.FecIngEmpleado = Convert.ToDateTime(TxtFeing.Text)
.SBEmpleado = Convert.ToSingle(Txtsueldo.Text)
End With
'El MessageBox es una Clase en cambio el MSGBOX es un Procedimiento
MessageBox.Show("Empleado Registrado Correctamente")
' Tiene mtodos sobrecargados=varios procedimentos con el mismo
nombre,
dependindo de los argumentos y tipo de datos que se le llama..
LimpiarCajas()
Txtape.Focus()
Catch ex As Exception
MsgBox(ex.Message())
End Try
End Sub
Private Sub Txtape_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles Txtape.KeyPress
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 10

Carrera Profesional de Computacin e Informtica

End Sub

Select Case Asc(e.KeyChar)


Case 65 To 90, 97 To 122, 32, 8
Case 13
Txtnom.Focus()
Case Else
e.Handled = True
End Select

Private Sub Txtsueldo_KeyPress(ByVal sender As Object, ByVal e As


System.Windows.Forms.KeyPressEventArgs) Handles Txtsueldo.KeyPress
Select Case Asc(e.KeyChar)
Case 48 To 57, 46, 8
Case 13
BtnRegistar.Focus()
Case Else
e.Handled = True
End Select
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
Handles Button1.Click
Dim N As Integer
N = InputBox("X=", "INGRESAR")
End Sub
End Class

FrmListar: Uso del


DataGrid
'Antes de enlazar el registro al
datagrid
'1.-Crear la Tabla: es un objeto
en memoria llamado DataTable
'2.-Crear columnas para el objeto
tabla utilizando la coleccin
Columns( Colocar Nombres)
'3.-Crear objetos Filas DataRow
'4.-Asignar valores/datos a cada
columna del objeto fila
'5.-Agregar la fila a la
coleccin de Rows del objeto
DataTable, se entiende que es a la
tabla en memoria.
'6.-Recien enlazar al DataGrid
con el objeto tabla
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 11

Carrera Profesional de Computacin e Informtica

Public Class FrmListar


Private TblEmpleado As New DataTable
Private sub ConfigurarTabla()
with TblEmpleado
.Columns.Add(New DataColumn("Cdigo"))
.Columns.Add(New DataColumn("Apellido"))
.Columns.Add(new DataColumn("Nombre"))
.Columns.Add(new DataColumn("Fecha_Ing"))
.Columns.Add(new DataColumn("Sueldo"))
End With
End Sub
Private Sub ordenarlista()
Dim aux As Empleado
Dim i, j As Integer
For i = 1 To Nreg - 1
For j = i + 1 To Nreg
If REGEmp(j).ApeEmpleado < REGEmp(i).ApeEmpleado Then
aux = REGEmp(i)
REGEmp(i) = REGEmp(j)
REGEmp(j) = aux
End If
Next
Next
End Sub
Private Sub LlenarTabla()
Dim I As Integer
'Agregar el registro a la Tabla
For I = 1 To Nreg
Dim Fila As DataRow
Fila = TblEmpleado.NewRow
' se crea el objeto fila en base a una fila del datatble.
With REGEmp(I) ' Para el Arreglo REgEmp, segn el valor de I
Fila("Cdigo") = .IdEmpleado
Fila("Apellido") = .ApeEmpleado
Fila("Nombre") = .NomEmpleado
Fila("Fecha_Ing") = .FecIngEmpleado
Fila("Sueldo") = .SBEmpleado
End With
'Agregar la Fila a la coleccin Rows del datatable TBLempleado
TblEmpleado.Rows.Add(Fila)
Next
' Ahora Enlazamos al dataGrid
DgdEmpleado.DataSource = TblEmpleado
End Sub
Private Sub FrmListar_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
ordenarlista()
ConfigurarTabla()
LlenarTabla()
End Sub
Private Sub BtnCerrar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnCerrar.Click
Close()
End Sub
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 12

Carrera Profesional de Computacin e Informtica

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

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 13

Carrera Profesional de Computacin e Informtica

APLICACIN 4: Creacin De Interface del


Sistema
Creacin de Barras de herramientas

Public Class MdiFrame


Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuArchivos.Click
'Aqui Abrir el formulario para el proceso de archivos del men
End Sub
Private Sub MnuProcesos_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuProcesos.Click
'Aqui Abrir el formulario para el proceso de Procesos del men
End Sub

Private Sub MnuSalir_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MnuSalir.Click
Application.Exit()
End Sub
Private Sub MnuListbox_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuListbox.Click
Dim f As New FrmLista
f.MdiParent = Me
f.Show()
End Sub
Private Sub MnuComboBox_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuComboBox.Click
Dim f As New FrmCombo
f.MdiParent = Me
f.Show()
End Sub
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 14

Carrera Profesional de Computacin e Informtica

Private Sub TbrPrimcipal_ButtonClick(ByVal sender As System.Object, ByVal e As


System.Windows.Forms.ToolBarButtonClickEventArgs) Handles
TbrPrimcipal.ButtonClick
Select Case e.Button.ImageIndex
Case 0
MnuListbox.PerformClick()
Case 1
MnuComboBox.PerformClick()
Case 2
MnuSalir.PerformClick()
Case 3
MsgBox("Venta en Contruccin", MsgBoxStyle.Information,
"Informacin")
End Select
End Sub
Private Sub MnuCliente_Popup(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuCliente.Popup
'Aqui se habre el formulario para el men Cliente
End Sub
Private Sub MnuClienteGrabar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuClienteGrabar.Click
MsgBox("Cliente Registrado Correctamente", MsgBoxStyle.Information,
"Informacin")
End Sub
Private Sub MdiFrame_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs)
Handles MyBase.Load
StbP01.Text = "Rolando Chvez Fiestas"
StbP02.Text = Now.ToLongTimeString
StbP03.Text = Now.ToLongDateString
End Sub
Private Sub TmrHora_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs)
Handles TmrHora.Tick
StbP02.Text = Now.ToLongTimeString
End Sub
Private Sub MnuVenta_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuVenta.Click
Dim f As New FrmFactura
f.MdiParent = Me
f.Show()
End Sub
End Class

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 15

Carrera Profesional de Computacin e Informtica

frmCombo: Manejo De Tabs

Public Class FrmCombo


Inherits System.Windows.Forms.Form
Private Sub TxtProPracticas_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TxtProPracticas.KeyPress
Dim var_ep As Double
Dim var_ef As Double
Dim var_pp As Double
If Asc(e.KeyChar) = 13 Then
var_ep = Convert.ToDouble( TxtExParcial.Text)
var_ef = Convert.ToDouble( TxtExFinal.Text)
var_pp = Convert.ToDouble( TxtProPracticas.Text)
TxtPromedio.Text = (var_ep + var_ef + var_pp) / 3
End If
TxtBoleta.Text = "Nombre
:" & TxtNombre.Text & Chr(13) & Chr(10) &
_
"Parcial
:" & TxtPromedio.Text
End Sub

FrmFactura:

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 16

Carrera Profesional de Computacin e Informtica

Public Class FrmFactura


Inherits System.Windows.Forms.Form
Public igv As Double
Public tot As Double
Public monto As Double
Private Sub Limpiar()
TxtCliente.Clear()
TxtMonto.Clear()
TxtTotal.Clear()
TxtIgv.Clear()
TxtRuc.Clear()
TxtNro.Clear()
TxtPrecio.Clear()
TxtSubTotal.Clear()
LstCant.Items.Clear()
LstPre.Items.Clear()
LstProducto.Items.Clear()
LstSubT.Items.Clear()
NumCantidad.Value = 1
DtpFecha.Value = Now.ToShortDateString
End Sub
Private Sub calcularFact()
Dim II As Integer
monto = 0
For II = 0 To LstSubT.Items.Count - 1
monto += Single.Parse( LstSubT.Items(II))
Next
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 CmbNombre_SelectedIndexChanged(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles CmbNombre.SelectedIndexChanged
Select Case CmbNombre.SelectedIndex
Case 0
TxtPrecio.Text = "10.00"
NumCantidad.Focus()
Case 1
TxtPrecio.Text = "2.00"
NumCantidad.Focus()
Case 2
TxtPrecio.Text = "125.00"
NumCantidad.Focus()
Case 3
TxtPrecio.Text = "0.50"
NumCantidad.Focus()
Case 4
TxtPrecio.Text = "15.50"
NumCantidad.Focus()
End Select
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 17

Carrera Profesional de Computacin e Informtica

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

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 18

Carrera Profesional de Computacin e Informtica

frmLista

Public Class FrmLista


Inherits
System.Windows.Forms.Form
Private Sub TotalElementos()
TxtTotal.Text = ""
TxtTotal.Text =
LstNombre.Items.Count.ToString
End Sub

Private Sub BtmCerrar_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles BtmCerrar.Click
Close()
End Sub
Private Sub FrmLista_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
LstNombre.Items.Add("COLOMBIA")
LstNombre.Items.Add("ECUADOR")
LstNombre.Items.Add("PERU")
LstNombre.Items.Add("BOLIVIA")
LstNombre.Items.Add("CHILE")
LstNombre.Items.Add("ARGENTINA")
LstNombre.Items.Add("BRASIL")
LstNombre.Items.Add("PARAGUAY")
BtmAdicionar.Enabled = False
TotalElementos()
End Sub
Private Sub BtmAdicionar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtmAdicionar.Click
If Len(Trim( TxtNombre.Text)) > 0 Then
LstNombre.Items.Add( TxtNombre.Text)
TxtNombre.Text = ""
TotalElementos()
End If
End Sub
Private Sub TxtNombre_TextChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles TxtNombre.TextChanged
If Len(Trim( TxtNombre.Text)) > 0 Then
BtmAdicionar.Enabled = True
Else
BtmAdicionar.Enabled = False
End If
End Sub
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 19

Carrera Profesional de Computacin e Informtica

Private Sub BtmEliminarUno_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles BtmEliminarUno.Click
If LstNombre.SelectedIndex > -1 Then
LstNombre.Items.RemoveAt( LstNombre.SelectedIndex)
TotalElementos()
End If
End Sub
Private Sub BtmModificar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtmModificar.Click
If Len(Trim(TxtNombre.Text)) > 0 And LstNombre.SelectedIndex > -1 Then
Dim I As Integer = LstNombre.SelectedIndex
LstNombre.Items(I) = TxtNombre.Text
End If
End Sub
Private Sub BtmEliminarTodo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtmEliminarTodo.Click
If LstNombre.Items.Count > 0 Then
LstNombre.Items.Clear()
TotalElementos()
End If
End Sub
Private Sub LstNombre_SelectedIndexChanged(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles LstNombre.SelectedIndexChanged
TxtNombre.Text = LstNombre.Text
TxtNombre.SelectAll()
TxtNombre.Focus()
End Sub
End Class

CONEXIN A BASE DE DATOS


Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 20

Carrera Profesional de Computacin e Informtica

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

Carrera Profesional de Computacin e Informtica

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.

Un mandato en SQL se expresa en una cadena de caracteres o String.

2.

Dicho mandato se puede escribir en la propiedad DataSource de un control DataGrid o


DataGridview.

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.

Para especificar un determinado campo de una determinada tabla, se ha de escribir primero el


nombre
de
la
tabla,
un
punto
y,
a
continuacin,
el
nombre
del
campo:
nombre_tabla.nombre_campo. (Es opcional cuando se trata de una sola tabla).

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.

3. Mandato Sql Estndar: Select


El lenguaje SQL est compuesto por una serie de sentencias y de clusulas muy reducidas en
nmero, pero muy potentes en efectividad. De entre todas las palabras, existen cuatro que son
las ms utilizadas, estando compuestas por una sentencia y por tres clusulas:

SELECT lista_campos FROM lista_tablas [WHERE criterios [ORDER BY lista_campos]]


La sentencia SELECT "selecciona" los campos que conformarn la consulta, es decir, que establece los
campos que se visualizarn o compondrn la consulta. El parmetro 'lista_campo' est compuesto por uno
o ms nombres de campos, separados por comas, pudindose especificar tambin el nombre de la tabla a
la cual pertenecen, seguidos de un punto y del nombre del campo correspondiente. Si el nombre del
campo o de la tabla est compuesto de ms de una palabra, este nombre ha de escribirse entre corchetes
([nombre]). Si se desea seleccionar todos los campos de una tabla, se puede utilizar el asterisco (*) para
indicarlo.

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 22

Carrera Profesional de Computacin e Informtica

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).

SELECT pedidos.* FROM pedidos;


Selecciona todos los campos de la tabla 'pedidos'.
SELECT * FROM pedidos;
Selecciona todos los campos de la tabla 'pedidos'.
SELECT nombre, apellidos, telefono FROM clientes;
Selecciona los campos 'nombre', 'apellidos' y 'telefono' de la tabla 'clientes'. De esta manera obtenemos
una agenda telefnica de nuestros clientes.
SELECT [codigo postal] FROM [tabla morosos];
Selecciona el campo 'codigo postal' de la tabla 'tabla morosos'.
Clasula Where
La clasula WHERE es opcional, y permite seleccionar qu registros aparecern en la consulta (si no se
especifica aparecern todos los registros). Para indicar este conjunto de registros se hace uso de criterios
o condiciones, que no es ms que una comparacin del contenido de un campo con un determinado valor
(este valor puede ser constante (valor predeterminado), el contenido de un campo, una variable, un
control, etc.).
He aqu algunos ejemplos que ilustran el uso de esta clusula:
SELECT * FROM clientes WHERE nombre='ALFREDO';
Selecciona todos los campos de la tabla 'clientes', pero los registros de todos aquellos clientes que se
llamen 'ALFREDO'.
SELECT
*
FROM
abonados
WHERE
provincia='MADRID'
OR
provincia='VALENCIA
OR
provincia='BARCELONA';
Selecciona todos los campos de la tabla 'abonados', pero los registros de todos los abonados de las
provincias de 'MADRID', 'VALENCIA' o 'BARCELONA'.
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 23

Carrera Profesional de Computacin e Informtica

SELECT nombre, apellidos FROM abonados WHERE edad>=18;


Selecciona los campos 'nombre' y 'apellidos' de la tabla abonados, escogiendo a aquellos abonados que
sean mayor de edad (a partir de 18 aos).
SELECT * FROM abonados WHERE edad>=18 AND edad<=45;
Selecciona todos los abonados con edades comprendidas entre los 18 y los 45 aos.
SELECT * FROM abonados WHERE edad BETWEEN 18 AND 45;
Selecciona todos los abonados con edades comprendidas entre los 18 y los 45 aos.
SELECT * FROM diario WHERE fecha=#7/1/97#;
SELECT * FROM diario WHERE fecha=7/1/97
Selecciona los apuntes de 'diario' realizados el 1 de Julio de 1.997 (la fecha ha de indicarse en ingls
(mes/da/ao)).
SELECT * FROM diario WHERE fecha<=12/31/2004;

Selecciona los apuntes de 'diario' realizados antes del 1 de Enero de 2005.


SELECT * FROM diario WHERE fecha BETWEEN 7/1/2005 AND 7/31/2005
Selecciona los apuntes de 'diario' realizados en Julio de 2005.

SELECT * FROM clientes WHERE nombre LIKE 'AL%'


Selecciona los clientes cuyo nombre comience con los caracteres 'AL'.

SELECT * FROM clientes WHERE apellidos LIKE '%EZ'


Selecciona los clientes cuyos apellidos terminen con los caracteres 'EZ'.
SELECT * FROM clientes WHERE apellidos LIKE '%ZAMO%'
Selecciona los clientes cuyos apellidos contengan, en cualquier posicin, los caracteres 'ZAMO'.
SELECT * FROM clientes WHERE provincia IN ('LIMA', 'QUITO','SANTIAGO','BOGOTA', ' BUENOS AIRES')
Selecciona
todos
los
BOGOTA o BUESOS AIRES.

clientes

de

las

provincias

de

LIMA,

QUITO,

SANTIAGO,

Uso de la Clusula Order By


La clusula ORDER BY suele escribirse al final de un mandato en SQL. Dicha clusula establece un criterio
de ordenacin de los datos de la consulta, por los campos que se especifican en dicha clusula. La
potencia de ordenacin de dicha clusula radica en la especificacin de los campos por los que se ordena,
ya que el programador puede indicar cul ser el primer criterio de ordenacin, el segundo, etc., as como
el tipo de ordenacin por ese criterio: ascendiente o descendiente.
(...) ORDER BY campo1 [ASC/DESC][,campo2 [ASC/DESC]...]
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 24

Carrera Profesional de Computacin e Informtica

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

Carrera Profesional de Computacin e Informtica

Veamos algunos ejemplos:


SELECT SUM(unidades) FROM pedidos
Retorna el total de unidades pedidas (la suma de todos los valores almacenados en el campo 'unidades'
de la tabla 'pedidos'). Este resultado se toma como un nuevo campo en el objeto datatable.
SELECT SUM(ingresos-gastos) AS saldo FROM diario
Retorna el saldo final de una tabla llamada 'diario'. Este resultado se toma como un nuevo campo en el
Datatable y se le llama 'saldo'.
SELECT SUM(unidades) AS total FROM pedidos WHERE fecha=Now()

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:

SELECT MIN(unidades) AS minimo FROM pedidos

Retorna el pedido ms pequeo y lo refleja en el campo 'minimo'.


Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 26

Carrera Profesional de Computacin e Informtica

SELECT MAX(unidades) AS maximo FROM pedidos WHERE fecha=Now()


Retorna el pedido ms grande de hoy y lo refleja en el campo 'maximo'.
SELECT MAX(gastos) AS maximo FROM diario
Retorna el gasto ms costoso reflejado en el diario contable, y lo representa en el campo 'maximo'.
Contar Registros
Otra operacin muy comn es realizar un recuento de registros. Aunque a primera vista pueda parecer
poco prctico, la realidad es bien distinta. Q quin no le gustara conocer cuntos pedidos se han
realizado hoy?. O comprobar cuntos pagos se han realizado por una determinada cantidad?. O saber
cuntos clientes cumplen hoy aos, se jubilan, son menores o mayores de edad, tienen alguna deuda,
viven en esta ciudad o en tal otra, tienen telfono mvil, estn casados o solteros, etc.?. Para conocer
cuntos registros hay utilizaremos la funcin COUNT, cuya sintaxis es la siguiente:
COUNT(expresin)

La funcin COUNT retorna el nmero de registros indicados en la expresin.


He aqu algunos ejemplos:
SELECT COUNT(*) AS num_pedidos FROM pedidos WHERE fecha=Now()
Retorna el nmero de pedidos realizados hoy. Este resultado se toma como un nuevo campo en el
RecordSet y se le llama 'num_pedidos'.
SELECT COUNT(*) AS casados FROM clientes WHERE casado=True
Tambin : SELECT COUNT(*) AS casados FROM clientes WHERE casado
Retorna el nmero de clientes casados. Este resultado se toma como un nuevo campo y se le llama
'casados'.
SELECT COUNT(*) AS num_pagos FROM diario WHERE gastos=25594
Retorna el nmero de pagos por un importe equivalente a 25594. Este resultado se toma como un nuevo
campo en el RecordSet, y se le llama 'num_pagos'.
SELECT SUM(unidades) AS total, AVG(unidades) AS media, COUNT(*) AS registros, MAX(unidades) AS
maximo, MIN(unidades) AS minimo FROM pedidos WHERE fecha BETWEEN 01/1/2005 AND 06/30/2005

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 ...

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 27

Carrera Profesional de Computacin e Informtica

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

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 28

Carrera Profesional de Computacin e Informtica

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:

SELECT fecha, count(fecha) AS num_pedidos FROM pedidos GROUP BY fecha

Para conocer cuntas unidades se pidieron cada da, tipearamos esta sentencia:

SELECT fecha, SUM(unidades) AS cantidad FROM pedidos GROUP BY fecha

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:

SELECT fecha, codigo_cliente, COUNT(codigo_cliente) AS num_pedidos, SUM(unidades) AS cantidad FROM


pedidos GROUP BY
fecha, codigo_cliente HAVING fecha<01/6/2005;

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

Carrera Profesional de Computacin e Informtica

Para conocer una estadstica de pedidos diaria, utilizaremos la siguiente sentencia:

SELECT fecha, COUNT(fecha) AS pedidos, SUM(unidades) AS subtotal, MIN(unidades) AS minimo,


MAX(unidades) AS maximo, AVG(unidades) AS promedio FROM pedidos GROUP BY fecha

Un resultado de ejemplo sera el siguiente:

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

CONSULTAS SQL-SERVER 2008


CONSULTA UNION DE DOS TABLAS
select P.idproducto, P.Nombreproducto, C.NombreCategora, P.PrecioUnidad, E.Compaa
from Productos as P
Inner Join Categoras as C
On P.Idcategora=c.IdCategora
order by C.NombreCategora
CONSULTA UNION DE TRES TABLAS
select
P.idproducto,
P.Nombreproducto,
E.NombreCompaa
from Productos as P
Inner Join Categoras as C
On P.Idcategora=c.IdCategora
inner join Proveedores as E
on p.idProveedor = E.IdProveedor
order by C.NombreCategora

C.NombreCategora,

P.PrecioUnidad,

CONSULTA UNION DE TRES TABLAS A MAS


Select P.IdPedido, P.FechaPedido, P.Cargo, C.NombreCompaa, E.Nombre+' '+E.Apellidos as
empleado
from Pedidos P Inner Join Clientes C
on P.Idcliente=C.IdCliente
inner join Empleados E on P.IdEmpleado=E.IdEmpleado
order by p.fechapedido desc
UTILIZAR [] CUANDO LA TABLA TIENE UN
select * from [Detalles de pedidos]
order by Idpedido

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

Carrera Profesional de Computacin e Informtica

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

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 31

Carrera Profesional de Computacin e Informtica

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

Private DAP As New SqlDataAdapter("select idproducto, NombreProducto, idCategora,


PrecioUnidad, Idproveedor, UnidadesenExistencia from Productos", CN)
Public 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, "prod")
dgdprod.DataSource = DST.Tables(0).DefaultView
txttotal.Text = DST.Tables(0).Rows.Count.ToString
Catch ex As Exception
MsgBox(ex.Message())
End Try
End Sub
End Class

DEMO2: Uso de Multiples DataTables

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

Carrera Profesional de Computacin e Informtica

Private DAP As New SqlDataAdapter("Select idCAtegora, Nombrecategora from Categoras",


CN)
Private DSET As New DataSet
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Text = "Categoras"
Try
DAP.Fill(DSET, "cat")
DAP.SelectCommand.CommandText = "select * from Productos"
DAP.Fill(DSET, "Prod")
llenarcombo()
dgvProd.DataSource = DSET.Tables("Prod").DefaultView
txtTotal.Text = DSET.Tables("prod").Rows.Count.ToString
Catch ex As Exception
MessageBox.Show(ex.Message(), "Aviso", MessageBoxButtons.OK,
MessageBoxIcon.Error)
End Try
End Sub
Private Sub llenarcombo()
cboCat.Items.Add("(Todas las categoras)")
For I As Integer = 0 To DSET.Tables("cat").Rows.Count - 1
cboCat.Items.Add(DSET.Tables("cat").Rows(I).Item(1))
Next
cboCat.SelectedIndex = 0
End Sub
Private Sub cboCat_SelectedIndexChanged(ByVal sender As System.Object, ByVal
System.EventArgs) Handles cboCat.SelectedIndexChanged
Dim filtrar As String
If cboCat.SelectedIndex > 0 Then
Dim Xcodigo As Integer = cboCat.SelectedIndex
filtrar = "select * from Productos where Idcategora=" & Xcodigo
DAP.SelectCommand.CommandText = filtrar
If DSET.Tables.Count > 2 Then DSET.Tables("filtrar").Clear()
DAP.Fill(DSET, "Filtrar")
dgvProd.DataSource = DSET.Tables("filtrar").defaulView
txtTotal.Text = DSET.Tables("Filtrar").Rows.Count.ToString
ElseIf cboCat.SelectedIndex = 0 Then
dgvProd.DataSource = DSET.Tables("Prod").DefaultView
txtTotal.Text = DSET.Tables("prod").Rows.Count.ToString
End If
End Sub
End Class

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 33

As

Carrera Profesional de Computacin e Informtica

DEMO 3 Uso de la Propiedad RowFilter del Datagrid

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

Carrera Profesional de Computacin e Informtica

DEMO 4: Modelo Conectado, Objeto DataReader


USO DEL DATAREADER El modelo de Acceso a Datos Conectado.

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

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 35

Carrera Profesional de Computacin e Informtica

DEMO 5: Consultas Estadsticas


USO DEL DATAREADER El modelo de Acceso a Datos Conectado.

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

Carrera Profesional de Computacin e Informtica

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

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 37

Carrera Profesional de Computacin e Informtica

DEMO 6 Data Relations. Consultas Jerrquicas

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

Carrera Profesional de Computacin e Informtica

MsgBox(ex.Message)
End Try
End Sub
End Class

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 39

Carrera Profesional de Computacin e Informtica

DEMO 7: Modelo Desconectado de Ado.Net

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

Carrera Profesional de Computacin e Informtica

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

DEMO 8: Filtros Sincrnico entre dos tablas

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

Carrera Profesional de Computacin e Informtica

Private Sub dgdpedidos_CurrentCellChanged(ByVal sender As Object, ByVal


System.EventArgs) Handles dgdpedidos.CurrentCellChanged
Dim fila As Integer = dgdpedidos.CurrentCell.RowNumber
Dim nped As String = dgdpedidos.Item(fila, 0).ToString
Dst.Tables("detalles").DefaultView.RowFilter = "idpedido=" & nped
End Sub
Private
Sub
dgdpedidos_Navigate(ByVal
sender
As
System.Object,
ByVal
System.Windows.Forms.NavigateEventArgs) Handles dgdpedidos.Navigate

As

ne

As

End Sub
End Class

DEMO 9: Enlazar controles a un DataTable

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

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 42

Carrera Profesional de Computacin e Informtica

DEMO 10: Consultas con Proc.almacenados sql server

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

Carrera Profesional de Computacin e Informtica

End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Close()
End Sub
End Class

DEMO 11: USO DE PROC.ALMACENADOS SQL SERVER

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

Carrera Profesional de Computacin e Informtica

Catch ex As Exception
MsgBox(ex.Message())
End Try
End Sub
End Class

DEMO 12: USO DEL OBJETO DATAREADER PARA CONSULTAS

Imports System.Data.SqlClient Espacio de nombres o namespaces


Public Class Form1
Private Cn As New SqlConnection("integrated security=sspi; database=EmpresaEBP; Server=.")
Private drd As SqlDataReader
Private cmd As New SqlCommand("Usp_productosxnombre", Cn)
Private par As New SqlParameter
Private

Sub Form1_Load(ByVal sender As System.Object, ByVal e As


MyBase.Load
Try
Cn.Open()
cmd.CommandType = CommandType.StoredProcedure
par = cmd.Parameters.Add("@xnombre", SqlDbType.VarChar, 40)
par.Direction = ParameterDirection.Input
Listaproductos()
Catch ex As Exception
MsgBox("Error...:" & ex.Message())
End Try

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

Carrera Profesional de Computacin e Informtica

Private

Sub txtNombre_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles txtNombre.TextChanged
Listaproductos()
End Sub
End Class

Procedimiento Almacenado utilizado en este


ejemplo:
CREATE PROCEDURE Usp_productosxnombre
@xnombre varchar(40)
as
select NombreProducto from Productos
where Nombreproducto like @xnombre + '%'
order by 1
GO

DEMO 13

- MODULOS.

CREATE PROCEDURE usp_pedidos_fechas


@f1 smalldatetime, @f2 smalldatetime
AS
select P.Idpedido, P.Fechapedido, C.NombreCompaa, E.nombre +' '+ E.Apellidos, P.PasDestinatario
from Pedidos P Join Clientes C on P.IdCliente=C.IdCliente
join Empleados E on P.IdEmpleado=E.IdEmpleado
Where P.FechaPedido between @f1 and @F2
order by P.FechaPedido desc
RETURN

Para este Demo crearemos los siguientes procedimeitos Almacenados


en SQL SERVER.
--------------------------------------------------------------------------------------------------------CREATE PROCEDURE usp_pedidos_Clientes
@idCli Varchar(5)
AS
select P.Idpedido, P.Fechapedido, C.NombreCompaa, E.nombre +' '+ E.Apellidos, P.PasDestinatario
from Pedidos P Join Clientes C on P.IdCliente=C.IdCliente
join Empleados E on P.IdEmpleado=E.IdEmpleado
Where P.IdCliente =@idCli
order by P.FechaPedido desc
RETURN
--------------------------------------------------------------------------------------------------------CREATE PROCEDURE usp_pedidos_Empleados
@idEmp int
AS
select P.Idpedido, P.Fechapedido, C.NombreCompaa, E.nombre +' '+ E.Apellidos, P.PasDestinatario
from Pedidos P Join Clientes C on P.IdCliente=C.IdCliente
join Empleados E on P.IdEmpleado=E.IdEmpleado
Where P.IdEmpleado =@idEmp
order by P.FechaPedido desc
RETURN
--------------------------------------------------------------------------------------------------------CREATE PROCEDURE usp_pedidos_pais
@pais Varchar(15)
AS
select P.Idpedido, P.Fechapedido, C.NombreCompaa, E.nombre +' '+ E.Apellidos, P.PasDestinatario
from Pedidos P Join Clientes C on P.IdCliente=C.IdCliente
join Empleados E on P.IdEmpleado=E.IdEmpleado
Where P.PasDEstinatario =@Pais
order by P.FechaPedido desc
RETURN
Prof..:
Rolando Fiestas Chvez.
Pg. 46
--------------------------------------------------------------------------------------------------------rolochafi@gmail.com
www.rolochafi.wordpress.com
CREATE PROCEDURE usp_pedidos_Listar
AS
select P.Idpedido, P.Fechapedido, C.NombreCompaa, E.nombre +' '+ E.Apellidos, P.PasDestinatario
from Pedidos P Join Clientes C on P.IdCliente=C.IdCliente
join Empleados E on P.IdEmpleado=E.IdEmpleado
order by P.FechaPedido desc

Carrera Profesional de Computacin e Informtica

Crearemos un modulo que lo llamaremos ModProcesos.


-------------------------------------------------Imports System.Data.SqlClient
Module modprocesos
Public xcon As String = "server=(Local);integrated Security=true;
catalog=EmpresaEBP"
Public Function PedidosListarTodo() As DataTable
Try
Dim con As New SqlConnection(xcon)
Dim adap As New SqlDataAdapter("usp_pedidos_listar", con)
Dim dset As New DataSet
adap.Fill(dset, "Tpedidostodos")
Return dset.Tables("TpedidosTodos")
Catch ex As Exception
Throw ex
End Try
End Function

initial

Public Function pedidoslistar_fechas(ByVal vF1 As String, ByVal vF2 As String) As


DataTable
Try
Dim con As New SqlConnection(xcon)
Dim adap As New SqlDataAdapter("usp_pedidos_fechas", con)
Dim daset As New DataSet
With adap.SelectCommand
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@fecha1", SqlDbType.SmallDateTime,
8)).Value = vF1
.Parameters.Add(New SqlParameter("@fecha2", SqlDbType.SmallDateTime,
8)).Value = vF2
End With
adap.Fill(daset, "tPedidosFechas")
Return daset.Tables("tpedidosFechas")
Catch ex As Exception
Throw ex
End Try
End Function
Public Function Pedidos_clientes(ByVal vCliente As String) As DataTable
Try
Dim con As New SqlConnection(xcon)
Dim adap As New SqlDataAdapter("usp_pedidos_clientes", con)
Dim daset As New DataSet
adap.SelectCommand.CommandType = CommandType.StoredProcedure
adap.SelectCommand.Parameters.Add(New SqlParameter("@idClie",
SqlDbType.VarChar, 5)).Value = vCliente
adap.Fill(daset, ("pClientes"))
Return daset.Tables("pClientes")
Catch ex As Exception
Throw ex
End Try
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 47

Carrera Profesional de Computacin e Informtica

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

Public Function pedidos_x_paises(ByVal vpais As String) As DataTable

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

Cdigo del Formulario


FrmConsultas.
Dentro del boton (btnConsultar_Click)
-------------------------------------------------Public Class frmConsultas
Private Sub btnConsultar_Click(ByVal sender As System.Object, ByVal
System.EventArgs) Handles btnConsultar.Click
With dgvPedidos
If rbtnTodos.Checked Then
Dim m As String = rbtnTodos.Text & " " & "Los" & " " & "Pedidos"
.CaptionText = m.ToUpper
.DataSource = PedidosListarTodo().DefaultView
ElseIf rbtnEF.Checked Then
If txtdato1.Text = "" And txtDato2.Text = "" Then
MessageBox.Show("Digitar fechas", "Error de consulta",
MessageBoxButtons.OK, MessageBoxIcon.Information)
txtdato1.Focus()
Exit Sub
End If
Dim m As String = "pedidos por" & " " & rbtnEF.Text
.CaptionText = m.ToUpper
.DataSource = pedidoslistar_fechas( txtdato1.Text,
txtDato2.Text).DefaultView
ElseIf rbtnClientes.Checked Then
If txtdato1.Text = "" Then
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 48

As

Carrera Profesional de Computacin e Informtica

MessageBox.Show("Digitar codigo de cliente", "Error de consulta",


MessageBoxButtons.OK, MessageBoxIcon.Information)
txtdato1.Focus()
Exit Sub
End If
Dim M As String = "Pedidos por" & " " & rbtnClientes.Text
.CaptionText = M.ToUpper
.DataSource = Pedidos_clientes( txtdato1.Text).DefaultView
ElseIf rbtnempleados.Checked Then
If txtdato1.Text = "" Then
MessageBox.Show("Digitar codigo de Empleado", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Information)
txtdato1.Focus()
Exit Sub
Else
End If
Dim M As String = "Pedidos por" & " " & rbtnClientes.Text
.CaptionText = M.ToUpper
.DataSource = pedidos_Empleados(Short.Parse(
txtdato1.Text)).DefaultView
ElseIf rbtnPD.Checked Then
If txtdato1.Text = "" Then
MessageBox.Show("Digitar pas de destino", "Error de consulta",
MessageBoxButtons.OK, MessageBoxIcon.Information)
txtdato1.Focus()
Exit Sub
End If
Dim J As String = "Pedidos por" & " " & rbtnPD.Text
.CaptionText = J.ToUpper
.DataSource = pedidos_x_paises( txtdato1.Text).DefaultView
End If
End With
End Sub
Private Sub accesos()
If rbtnEF.Checked Then
GroupBox2.Text = "Digitar fechas"
txtdato1.Clear()
txtDato2.Clear()
txtdato1.Visible = True
GroupBox2.Visible = True
txtDato2.Visible = True
ElseIf rbtnClientes.Checked Then
GroupBox2.Visible = True
GroupBox2.Text = "Digitar Id. Cliente"
txtdato1.Clear()
txtDato2.Clear()
txtdato1.Visible = True
txtDato2.Visible = False
ElseIf rbtnempleados.Checked Then
GroupBox2.Visible = True
GroupBox2.Text = "Digitar Id. Empleado"
txtdato1.Clear()
txtDato2.Clear()
txtdato1.Visible = True
txtDato2.Visible = False
ElseIf rbtnPD.Checked Then
GroupBox2.Visible = True
GroupBox2.Text = "Digitar Pas"
txtdato1.Clear()
txtDato2.Clear()
txtdato1.Visible = True
txtDato2.Visible = False
ElseIf rbtnTodos.Checked Then
txtdato1.Clear()
txtDato2.Clear()
txtdato1.Visible = False
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 49

Carrera Profesional de Computacin e Informtica

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-

Para este ejercicio trabajaremos con 2 formularios.


Y con los siguientes Procedimientos almacenados.
CREATE procedure usp_Empleadoslistar
as
select idEmpleado,Apellidos, Nombre, CArgo from Empleados order by 1
--------------------------------CREATE PROCEDURE Usp_EmpleadoActualizar
@IdEmpleado Int,
@Apellidos Varchar(20),
@Nombre Varchar(10),
@Cargo Varchar(30)
AS
Update Empleados
set Apellidos=@Apellidos,
Nombre=@Nombre,
Cargo=@Cargo
where idempleado=@idEmpleado
----------------------------------CREATE PROCEDURE usp_EmpleadoAdicionar
@idEmpleado int output,
@Apellidos Varchar (20),
@Nombre Varchar(10),
@Cargo Varchar(30)
AS
insert into Empleados(Apellidos, Nombre, Cargo)
values(@Apellidos, @Nombre, @Cargo)
setRolando
@idEmpleado=@@Identity
Prof..:
Fiestas Chvez.
------------------------------------rolochafi@gmail.com
www.rolochafi.wordpress.com
CREATE PROCEDURE usp_EmpleadoEliminar
@idEmpleado int
AS
delete Empleados
where IdEmpleado=@IdEmpleado
------------------------------------

Pg. 50

Carrera Profesional de Computacin e Informtica

El primer formulario:

El Segundo formulario:

Agregaremos una Clase al Proyecto, con el


ClsPlanilla Con el siguiente script.
-----------------------------------------------Imports System.Data.SqlClient
Public Class clsPlanilla
Public
Const
K
Security=true;Database=EmpresaEBP;Server=(LOCAL)"

As

String

nombre

"Integrated

Public Sub SetEmpleadoAdicionar(ByRef vCodigo As Integer, ByVal vApellidos As String,


ByVal vNombre As String, ByVal vCargo As String)
Try
Dim cn As New SqlConnection(K)
Dim cmd As New SqlCommand("usp_EmpleadoAdicionar", cn)
With cmd
.CommandType = CommandType.StoredProcedure
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 51

Carrera Profesional de Computacin e Informtica

.Parameters.Add(New SqlParameter("@IdEmpleado", SqlDbType.Int,


ParameterDirection.Output)).Value = vCodigo
.Parameters.Add(New SqlParameter("@Apellidos", SqlDbType.VarChar, 20,
ParameterDirection.Input)).Value = vApellidos
.Parameters.Add(New SqlParameter("@Nombre", SqlDbType.VarChar, 10,
ParameterDirection.Input)).Value = vNombre
.Parameters.Add(New SqlParameter("@Cargo", SqlDbType.VarChar, 30,
ParameterDirection.Input)).Value = vCargo
End With
cn.Open()
cmd.ExecuteNonQuery()
vCodigo = cmd.Parameters("@IdEmpleado").Value
cmd = Nothing
cn.Close()
Catch ex As Exception
Throw ex
End Try
End Sub
Public Sub SetEmpleadoActualizar(ByVal vCodigo As Integer, ByVal vApellidos As
String, ByVal vNombre As String, ByVal vCargo As String)
Try
Dim cn As New SqlConnection(K)
Dim cmd As New SqlCommand("usp_EmpleadoActualizar", cn)
With cmd
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@IdEmpleado", SqlDbType.Int)).Value =
vCodigo
.Parameters.Add(New SqlParameter("@Apellidos", SqlDbType.VarChar,
20)).Value = vApellidos
.Parameters.Add(New SqlParameter("@Nombres", SqlDbType.VarChar,
10)).Value = vNombre
.Parameters.Add(New SqlParameter("@Cargo", SqlDbType.VarChar, 30)).Value
= vCargo
End With
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
Catch ex As Exception
Throw ex
End Try
End Sub
Public Sub SetEmpleadoEliminar(ByVal vCodigo As Integer)
Try
Dim cn As New SqlConnection(K)
Dim cmd As New SqlCommand("usp_EmpleadoEliminar", cn)
With cmd
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@IdEmpleado", SqlDbType.Int)).Value =
vCodigo
End With
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
Catch ex As Exception
Throw ex
End Try
End Sub
Public Function getEmpleados() As DataTable
Try
Dim cn As New SqlConnection(K)
Dim dap As New SqlDataAdapter("usp_Empleadoslistar", cn)
Dim dst As New DataSet
dap.Fill(dst, "Empleados")
Return dst.Tables("Empleados")
Catch ex As Exception
Throw ex
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 52

Carrera Profesional de Computacin e Informtica

End Try
End Function
End Class

Agregaremos dos Modulo al Proyecto


El Primero con el nombre ModVariables con el siguiente
Script
Enumerados.
Module mod_variables
Public xcodigo, xApellido, xNombre, xCargo As String
Public Enum Transacciones
Adicionar = 0
Actualizar = 1
Eliminar = 2
End Enum
Public Operacion As Transacciones
End Module

El Segundo con
siguiente Script

el

nombre

ModDeclaraciones

con

Module ModDeclaraciones
Public nr As Integer
End Module

Codigo del Primer Formulario.


Imports Mantenimientos.clsPlanilla
Public Class frmEmpleados
#Region "Procedimientos y Variables"
Private xobj As New clsPlanilla
Private Sub Leerdatos(ByVal tipo As Integer)
Operacion = tipo
Dim fila As Integer = dgdEmpleados.CurrentCell.RowNumber
xcodigo = dgdEmpleados.Item(fila, 0).ToString
xApellido = dgdEmpleados.Item(fila, 1).ToString
xNombre = dgdEmpleados.Item(fila, 2).ToString
xCargo = dgdEmpleados.Item(fila, 3).ToString
My.Forms.frmDatos.ShowDialog()
End Sub
#End Region
Public obj As New clsPlanilla
Creacin del Objeto de la clase planilla
Private Sub btnAdicionar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnAdicionar.Click
Leerdatos(0)
End Sub
Private Sub btnActualizar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnActualizar.Click
Leerdatos(1)
End Sub
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 53

el

Carrera Profesional de Computacin e Informtica

Private Sub btnEliminar_Click(ByVal sender


System.EventArgs) Handles btnEliminar.Click
Leerdatos(2)
End Sub

As

System.Object,

Private Sub frmEmpleados_Activated(ByVal sender As


System.EventArgs) Handles Activated
dgdEmpleados.DataSource = obj.getEmpleados().DefaultView
End Sub

Object,

ByVal

As

ByVal

As

Codigo del Segundo Formulario.


Imports Mantenimientos.clsPlanilla
Public Class frmDatos
#Region "Procedimientos"
Private objx As New clsPlanilla
Private Sub MostrarDatos()
txtCodigo.Text = xcodigo
txtApellidos.Text = xApellido
txtNombre.Text = xNombre
txtCargo.Text = xCargo
End Sub
Private Sub limpiarControles()
Dim obj As New Control
For Each obj In Controls
If TypeOf obj Is TextBox Then obj.Text = ""
Next
End Sub
#End Region
Private Sub frmDatos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
If Operacion = Transacciones.Adicionar Then
Text = "Adicionar Nuevo Empleado"
btnGrabar.Text = "Grabar"
GroupBox1.Enabled = True
limpiarControles()
ElseIf Operacion = Transacciones.Actualizar Then
Text = "Actualizar datos de Empledos"
btnGrabar.Text = "Actualizar"
GroupBox1.Enabled = True
MostrarDatos()
ElseIf Operacion = Transacciones.Eliminar Then
Text = "Eliminar Empleados"
btnGrabar.Text = "Elimianar"
GroupBox1.Enabled = False
MostrarDatos()
End If
End Sub

Private Sub btnGrabar_Click(ByVal sender


System.EventArgs) Handles btnGrabar.Click
Try

As

System.Object,

ByVal

As

If Operacion = Transacciones.Adicionar Then


objx.SetEmpleadoAdicionar(nr, txtApellidos.Text, txtNombre.Text,
txtCargo.Text)
txtCodigo.Text = nr
MsgBox("proceso realizado con exito...", MsgBoxStyle.Information, "Adicionar
Empleado")
ElseIf Operacion = Transacciones.Actualizar Then
objx.SetEmpleadoActualizar(txtCodigo.Text, txtApellidos.Text, txtNombre.Text,
txtCargo.Text)
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 54

Carrera Profesional de Computacin e Informtica

MsgBox("proceso realizado con exito...", MsgBoxStyle.Information, "Actualizar


Datos")
ElseIf Operacion = Transacciones.Eliminar Then
objx.SetEmpleadoEliminar(txtCodigo.Text)
MsgBox("proceso realizado con exito...", MsgBoxStyle.Information, "Eliminar
Empleado")
End If
Catch ex As Exception
MsgBox("Error:" & ex.Message(), MsgBoxStyle.Critical, "aviso")
End Try
End Sub
End Class

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 55

Carrera Profesional de Computacin e Informtica

DEMO 15 Aplicacin Cliente Servidor Tres Capas.


Mltiples consultas
Diseo de la Capa de Interface
Crear la Capa de Datos:
Abrir el Sql server y proceda a crear los siguientes procedimientos almacenados:
--------------Definicin de la Capa de DATOS Demo06---------Listar Todos los Pedidos-CREATE PROCEDURE uspPedidosListar
As
Select * From Pedidos
Order By FechaPedido Desc
Go
---Prueba--Exec uspPedidosListar
---Listar Pedidos por Cliente-----Uso de parametros de entrada--CREATE PROCEDURE uspPedidosxCliente
@IdCli VarChar(5)
As
SELECT * FROM Pedidos
Where IdCliente=@IdCli
Order By FechaPedido Desc
Go
---Prueba--Exec uspPedidosxCliente 'Bergs'
---Listar Pedidos po Pas--CREATE PROCEDURE uspPedidosxPais
@Pais VarChar(15)
As
SELECT * FROM Pedidos
Where PasDestinatario=@Pais
Order By FechaPedido Desc
Go
---Prueba--exec uspPedidosxPais 'Brasil'
---Listar Pedidos por Empleado-Create PROCEDURE uspPedidosxEmpleado
@IdEmple SmallInt
As
SELECT * FROM Pedidos
Where IdEmpleado=@IdEmple
Order By FechaPedido Desc
Go
---Prueba--exec uspPedidosxEmpleado 5
---Listar Pedidos por Fechas--CREATE PROCEDURE uspPedidosxFechas
@F1 AS SmallDatetime,
@F2 AS SmallDatetime
As
SELECT * FROM Pedidos
Where FechaPedido between @F1 And @F2
Order By FechaPedido Desc
Go
---Prueba--exec uspPedidosxFechas '01/01/1996','31/5/1996'
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 56

Carrera Profesional de Computacin e Informtica

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.

Abrir el men Proyecto y seleccionar: Agregar Clase.

Digite el nombre de la clase: clsConsultaPedidos

Digite el siguiente cdigo:


Imports System.Data.SqlClient
Public Class clsConsultaPedidos
'Definir Mtodos para la clase (puede se Function o Sub)
'Especificar el comportamiento del objeto
'Aqui se define la lgina de negocios
'Creamos la cadena de conexin en una constante cadena
Private Const Conex As String = "Server=ROLOCHAFI-PC;DataBase=Empresa4M;Integrated
Security=True"
Public Function getPedidosTodos() As DataTable
'Mtodo para mostrar todos los pedidos
'Control de excepciones
Try
'Instanciar objetos
Dim cn As New SqlConnection(Conex)
Dim Dap As New SqlDataAdapter("uspPedidosListar", cn)
Dim Dst As New DataSet
Dap.Fill(Dst, "TpedidosTodos")
Return Dst.Tables("TpedidosTodos")
Catch ex As Exception
MsgBox("Error: " & ex.Message, MsgBoxStyle.Critical, "Aviso")
End Try
End Function
Public Function getPedidosCliente(ByVal vCliente As String) As DataTable
Try
'Instanciar objetos
Dim cn As New SqlConnection(Conex)
Dim Dap As New SqlDataAdapter("uspPedidosxCliente", cn)
Dim Dst As New DataSet
With Dap.SelectCommand
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@Idcli", SqlDbType.VarChar, 5,
ParameterDirection.Input)).Value = vCliente
End With
Dap.Fill(Dst, "TpedidosCliente")
Return Dst.Tables("TpedidosCliente")
Catch ex As Exception
MsgBox("Error: " & ex.Message, MsgBoxStyle.Critical, "Aviso")
End Try
End Function
Public Function getPedidosPais(ByVal vPais As String) As DataTable
Try
'Instanciar objetos
Dim cn As New SqlConnection(Conex)
Dim Dap As New SqlDataAdapter("uspPedidosxPais", cn)
Dim Dst As New DataSet
With Dap.SelectCommand
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@Pais", SqlDbType.VarChar,
15)).Value = vPais
End With
Dap.Fill(Dst, "TpedidosPais")
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 57

Carrera Profesional de Computacin e Informtica

Return Dst.Tables("TpedidosPais")
Catch ex As Exception
MsgBox("Error: " & ex.Message, MsgBoxStyle.Critical, "Aviso")
End Try
End Function

Public Function getPedidosEmpleado(ByVal vIdEmpleado As Short) As DataTable


Try
'Instanciar objetos
Dim cn As New SqlConnection(Conex)
Dim Dap As New SqlDataAdapter("uspPedidosxEmpleado", cn)
Dim Dst As New DataSet
With Dap.SelectCommand
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@IdEmple", SqlDbType.SmallInt)).Value =
vIdEmpleado
End With
Dap.Fill(Dst, "TpedidosEmple")
Return Dst.Tables("TpedidosEmple")
Catch ex As Exception
MsgBox("Error: " & ex.Message, MsgBoxStyle.Critical, "Aviso")
End Try
End Function
Public Function getPedidosFechas(ByVal vF1 As String, ByVal vF2 As String) As DataTable
Try
'Instanciar objetos
Dim cn As New SqlConnection(Conex)
Dim Dap As New SqlDataAdapter("uspPedidosxFechas", cn)
Dim Dst As New DataSet
With Dap.SelectCommand
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@F1", SqlDbType.SmallDateTime,
8)).Value = vF1
.Parameters.Add(New SqlParameter("@F2", SqlDbType.SmallDateTime,
8)).Value = vF2
End With
Dap.Fill(Dst, "TpedidosFechas")
Return Dst.Tables("TpedidosFechas")
Catch ex As Exception
MsgBox("Error: " & ex.Message, MsgBoxStyle.Critical, "Aviso")
End Try
End Function
End Class
Crear la capa de presentacin. esta formada por la interface del usuario:
Escribir el siguiente cdigo en la clase del formulario Form1:
Public Class Form1
Private objPedido As New clsConsultaPedidos
Private Sub btnConsultar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnConsultar.Click
With dgdPedidos
If rbt1.Checked Then
.CaptionText = "Lista de Pedidos " & rbt1.Text
.DataSource = objPedido.getPedidosTodos().DefaultView
ElseIf rbt2.Checked Then
.CaptionText = "Lista de Pedidos " & rbt2.Text
.DataSource = objPedido.getPedidosFechas(txtDato1.Text,
txtDato2.Text).DefaultView
ElseIf rbt3.Checked Then
.CaptionText = "Lista de Pedidos por " & rbt3.Text
.DataSource = objPedido.getPedidosCliente(txtDato1.Text).DefaultView
ElseIf rbt4.Checked Then
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 58

Carrera Profesional de Computacin e Informtica

.CaptionText = "Lista de Pedidos por " & rbt4.Text


.DataSource=
objPedido.getPedidosEmpleado(Integer.Parse(txtDato1.Text)).DefaultView
ElseIf rbt5.Checked Then
.CaptionText = "Lista de Pedidos por " & rbt5.Text
.DataSource = objPedido.getPedidosPais(txtDato1.Text).DefaultView
End If
End With
End Sub

Private Sub rbt1_CheckedChanged(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles rbt1.CheckedChanged
txtDato1.Clear()
txtDato2.Clear()
Label1.Visible = False
txtDato1.Visible = False
txtDato2.Visible = False
End Sub
Private Sub rbt2_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles rbt2.CheckedChanged
txtDato1.Clear()
txtDato2.Clear()
Label1.Visible = True
txtDato1.Visible = True
txtDato2.Visible = True
End Sub
Private Sub rbt3_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles rbt3.CheckedChanged,
rbt4.CheckedChanged, rbt5.CheckedChanged
txtDato1.Clear()
txtDato2.Clear()
Label1.Visible = True
txtDato1.Visible = True
txtDato2.Visible = False
End Sub

End Class

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 59

Carrera Profesional de Computacin e Informtica

DEMO 16 Aplicacin
Librera DLL

Cliente

Servidor

Tres

Capas

con

Mantenimiento de la Tabla Productos


Capa de Negocios: BibliotecaProductos
Imports System.Data.SqlClient
Public Class ClsProductos
Private Const conex As String = "Data Source=Set;Initial Catalog=Empresa;Integrated
Security=True"
'Mtodo Listar todos los productos..
Public Function getProductos() As DataTable
Try
Dim cn As New SqlConnection(conex)
Dim Dap As New SqlDataAdapter("Usp_Productos_Listar", cn)
Dim Dst As New DataSet
Dap.Fill(Dst, "tPds")
Return Dst.Tables("tPds")
Catch ex As Exception
MsgBox("Error:" & ex.Message, MsgBoxStyle.Critical, "Alerta")
End Try
End Function
Public Function getProductos(ByVal vIdpro As Integer) As DataTable
Try
Dim cn As New SqlConnection(conex)
Dim Dap As New SqlDataAdapter("Usp_Producto_Mostrar", cn)
Dim Dst As New DataSet
With Dap.SelectCommand
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@IdPro", SqlDbType.Int)).Value = vIdpro
End With
Dap.Fill(Dst, "tPds")
Return Dst.Tables("tPds")
Catch ex As Exception
MsgBox("Error:" & ex.Message, MsgBoxStyle.Critical, "Alerta")
End Try
End Function
'--Mtodo para listar Categoras y Proveedores---Public Function getListas() As DataSet
Try
Dim cn As New SqlConnection(conex)
Dim Dap As New SqlDataAdapter("Usp_Categoras_Listar", cn)
Dim Dst As New DataSet
Dap.Fill(Dst, "tCate")
Dap.SelectCommand.CommandText = "Usp_Proveedores_Listar"
Dap.Fill(Dst, "tProvee")
Return Dst
Catch ex As Exception
MsgBox("Error:" & ex.Message, MsgBoxStyle.Critical, "Alerta")
End Try
End Function
'--Mtodo Adicionar Producto-Public Function setProducto(ByVal vNom As String, ByVal vIdprovee As Integer, ByVal
vIdCate As Integer, ByVal vPrecio As Single, ByVal vStock As Integer) As Integer
Try
Dim cn As New SqlConnection(conex)
Dim Cmd As New SqlCommand("Usp_Producto_Adicionar", cn)
With Cmd
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@IdPro", SqlDbType.Int)).Direction =
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 60

Carrera Profesional de Computacin e Informtica

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

Carrera Profesional de Computacin e Informtica

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

Private Sub btnActualizar_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles btnActualizar.Click
MostrarDatos(1)
End Sub
Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnEliminar.Click
MostrarDatos(2)
End Sub
Private Sub btnGenerarXML_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnGenerarXML.Click
dgwProductos.DataSource = Nothing
objPro.getProductos().WriteXml("Productos.xml")
MsgBox("Archvo Xml Generado con exito...", MsgBoxStyle.Information, "Aviso")
End Sub
Private Sub btnVerXml_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnVerXml.Click
Try
Dim ds As New DataSet
Prof..: Rolando Fiestas Chvez.
rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 62

Carrera Profesional de Computacin e Informtica

ds.ReadXml("Productos.xml")
dgwProductos.DataSource = ds.Tables(0).DefaultView
Catch ex As Exception
MsgBox("Error:" & ex.Message)
End Try
End Sub

Private Sub btnImprimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles btnImprimir.Click
My.Forms.FrmVistaProductos.ShowDialog()
End Sub
End Class

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

Carrera Profesional de Computacin e Informtica

btnAceptar.Text = "Actualizar"
MostrarProducto()
ElseIf operacion = Transacciones.Eliminar Then
Me.Text = "Eliminar Producto..."
gbxProducto.Enabled = False
btnAceptar.Text = "Eliminar"
MostrarProducto()
End If
End Sub

Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles btnAceptar.Click
Try
If operacion = Transacciones.Adicionar Then
txtIdPro.Text = xobjPro.setProducto(TxtNom.Text, cboProvee.SelectedValue,
CboCate.SelectedValue, Single.Parse(mskPrecio.Text),
Integer.Parse(mskStock.Text))
ElseIf operacion = Transacciones.Actualizar Then
xobjPro.setProducto(Integer.Parse(txtIdPro.Text), TxtNom.Text,
cboProvee.SelectedValue, CboCate.SelectedValue,
Single.Parse(mskPrecio.Text), Integer.Parse(mskStock.Text))
ElseIf operacion = Transacciones.Eliminar Then
xobjPro.setProducto(Integer.Parse(txtIdPro.Text))
End If
MessageBox.Show("Proceso Realizado con exito...", btnAceptar.Text & "
Producto", MessageBoxButtons.OK, MessageBoxIcon.Information,
MessageBoxDefaultButton.Button1)
Catch ex As Exception
MsgBox("Error:" & ex.Message, MsgBoxStyle.Critical, "Alerta de Error")
End Try
End Sub
Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnCancelar.Click
Me.Close()
End Sub
End Class

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

Carrera Profesional de Computacin e Informtica

----MOSTRAR PRODUCTO X COCDIGO----Create Procedure Usp_Producto_Mostrar


@idPro int
As
Select IdProducto, NombreProducto,IdProveedor,IdCategora,
PrecioUnidad,UnidadesEnExistencia
From Productos
where IdProducto=@idPro
Go

----Listar Categoras--Create Procedure Usp_Categoras_Listar


As
Select IdCategora, NombreCategora From Categoras
Order By 2
Go
---Listar Proveedores--Create Procedure Usp_Proveedores_Listar
As
Select IdProveedor, NombreCompaa From Proveedores
Order By 2
Go
--- Adicionar producto--------alter Procedure Usp_Producto_Adicionar
@Idpro int output,
@Nombre VarChar(40),
@IdProvee int,
@IdCate int,
@Precio money,
@stock smallint
As
Insert Into Productos(NombreProducto, IdProveedor, IdCategora,
PrecioUnidad, UnidadesEnExistencia)
VALUES(@Nombre,@IdProvee,@IdCate,@Precio,@Stock)
set @IdPro=@@Identity
Go
--- Actualizar Productos----Create Procedure Usp_Producto_Actualizar 80
@IdPro int,
@Nombre VarChar(40),
@IdProvee int,
@IdCate int,
@Precio money,
@stock smallint
As
Update Productos set
NombreProducto=@Nombre, IdProveedor=@IdProvee,
IdCategora=@IdCate,PrecioUnidad=@Precio,
UnidadesEnExistencia=@Stock
Where IdProducto=@IdPro
Go
------Eliminar Producto-Create Procedure Usp_Producto_Eliminar
@IdPro int
As
Delete From Productos Where IdProducto=@IdPro
Go

Prof..: Rolando Fiestas Chvez.


rolochafi@gmail.com
www.rolochafi.wordpress.com

Pg. 65

You might also like