Download as pdf or txt
Download as pdf or txt
You are on page 1of 52

PARTE I

SEPARATA DE APLICACIONES PARA


WINDOWS
EN
VISUAL BASIC .NET 2005
CURSO LENGUAJE DE PROGRAMACIÓN II

ELABORADO POR
Prof. Rolando Chávez Fiestas

Prof..: Rolando Fiestas Chávez. Pág. 1


APLICACIÓN 01:

FrmAlumno
Public Class FrmAlumno
Inherits System.Windows.Forms.Form
Private Sub BtnNuevo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnNuevo.Click
Txtcodigo.Clear()
Txtnom.Clear()
Txtn1.Clear()
Txtn2.Clear()
Txtn3.Clear()
LblPro.Text = ""
Lblmsg.Text = ""
Txtcodigo.Focus()
End Sub

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


System.EventArgs) Handles BtnCalcular.Click
cod = Txtcodigo.Text
nom = Txtnom.Text
par = Convert.ToSingle(Txtn1.Text)
fin = Convert.ToSingle(Txtn2.Text)
pra = Convert.ToSingle(Txtn3.Text)
prom = (par + fin + pra) / 3
LblPro.Text = prom.ToString("##.0")
If prom > 10 Then
'Para pintar un color se utiliza la clase color
Lblmsg.ForeColor = Color.Blue
'Lblmsg.Font.Bold()
Lblmsg.Text = "Aprobado"
Else
Lblmsg.ForeColor = Color.Red
'Lblmsg.Font.Bold = False
Lblmsg.Text = "Desaprobado"
Prof..: Rolando Fiestas Chávez. Pág. 2
End If
End Sub

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


System.EventArgs) Handles BtnBoleta.Click
'Debemos de crear un objeto para abrir un formulario, estanciar a un objeto
de tipo formulario
Dim F As New FrmBoleta
F.ShowDialog() 'Abre una ventana de tipo Modal
End Sub

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


System.EventArgs) Handles BtnCerrar.Click
Application.Exit()
End Sub

End Class

FrmBoleta
Public Class FrmBoleta
Inherits System.Windows.Forms.Form
Private Sub FrmBoleta_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
lblcodi.Text = cod
lblnom.Text = nom
lblparcial.Text = par.ToString("##.0")
lblfinal.Text = fin.ToString("##.0")
lblpracticas.Text = pra.ToString("##.0")
lblpromedio.Text = prom.ToString("##.0")
End Sub

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


System.EventArgs) Handles BtnCerrar.Click
Close()
End Sub
End Class

MODULO
Module Modvariables
Public cod, nom As String
Public par, fin, pra, prom As Single
End Module

Prof..: Rolando Fiestas Chávez. Pág. 3


APLICACIÓN 02:

Public Class Form1


Private Sub MostrarTotales()
lblTotal1.Text = LstMañana.Items.Count
lblTotal2.Text = LstNoche.Items.Count
End Sub
Private Sub txtNombre_TextChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles txtNombre.TextChanged
btnAgregar.Enabled = txtNombre.Text <> ""

End Sub

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


System.EventArgs) Handles MyBase.Load
cboturno.SelectedIndex = 0
End Sub

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


System.EventArgs) Handles btnAgregar.Click
If cboturno.SelectedIndex = 0 Then
LstMañana.Items.Add(txtNombre.Text)
Else
LstNoche.Items.Add(txtNombre.Text)
End If
MostrarTotales()
txtNombre.Clear()
cboturno.SelectedIndex = 0
txtNombre.Focus()

End Sub

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


System.EventArgs) Handles btn1.Click
If LstMañana.Items.Count = 0 Then Exit Sub
LstNoche.Items.AddRange(LstMañana.Items)
LstMañana.Items.Clear()
MostrarTotales()
End Sub

Prof..: Rolando Fiestas Chávez. Pág. 4


Private Sub btn2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btn2.Click
If LstMañana.SelectedIndex > -1 Then
LstNoche.Items.Add(LstMañana.Text)
' Tambien se puede: LstMañana.Items.Remove(LstMañana.Text)
LstMañana.Items.RemoveAt(LstMañana.SelectedIndex)
MostrarTotales()
Else
MsgBox("Debe selecionar un elemento..", MsgBoxStyle.Information,
"Aviso")

End If
End Sub

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


System.EventArgs) Handles btn3.Click
If LstNoche.SelectedIndex > -1 Then
LstMañana.Items.Add(LstNoche.Text)
'Tambien se podría utilizar LstMañana.Items.Remove(LstMañana.Text)
LstNoche.Items.RemoveAt(LstNoche.SelectedIndex)
MostrarTotales()
Else
MsgBox("Debe selecionar un elemento..", MsgBoxStyle.Information,
"Aviso")

End If
End Sub

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


System.EventArgs) Handles btn4.Click
If LstNoche.Items.Count = 0 Then Exit Sub
LstMañana.Items.AddRange(LstNoche.Items)
LstNoche.Items.Clear()
MostrarTotales()
End Sub
End Class

APLICACIÓN 03:

Prof..: Rolando Fiestas Chávez. Pág. 5


Public Class FrmCurso

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


Handles Rbnvbnet.CheckedChanged, Rbnsql.CheckedChanged, RbnJava.CheckedChanged,
RbnJava.CheckedChanged, RbnCplus.CheckedChanged
' no interesa el nombre lo que importa es el disparador handles, de esta
forma se optimiza la programación
' simulando aun arreglo de controles, el orden no interesa, se realiza un
solo proc. de evento para cada RadioButtom
' Mostrar el Precio que esta en la propiedad Tag
' Utiliza sender ya que es el objeto, se asigna al control seleccionado
txtph.Text = sender.tag
txtnh.Focus()
End Sub

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


System.EventArgs) Handles Chkppts.CheckedChanged

If Chkppts.Checked Then
Txtccp.Text = "5.00"
Else
Txtccp.Text = "0.00"
End If
'Observación: También se podria hacer como el procedimiento de los Radio
Buttom
End Sub

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


System.EventArgs) Handles ChkManual.CheckedChanged
If ChkManual.Checked Then
txtcm.Text = "15.00"
Else
txtcm.Text = "0.00"
End If
End Sub

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


System.EventArgs) Handles ChkDemos.CheckedChanged
If ChkDemos.Checked Then
TxtCcd.Text = "10.00"
Else
TxtCcd.Text = "0.00"
End If
End Sub

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


System.EventArgs) Handles txtnh.TextChanged
If txtnh.Text <> "" Then
'CALCULAR EL PRECIO POR COSTO, cuando se produce el evento TextChanged,
aparece automaticamente el Precio por Curso.
txtpc.Text = (Convert.ToSingle(txtph.Text) *
Convert.ToInt16(txtnh.Text)).ToString
'EL RESULTADO COMO ES UN NUMERO SE CONVIERTE A CADENA PARA ASIGNARLO AL
TEXT DEL CONTROL
End If
End Sub

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


System.EventArgs) Handles BtnCerrar.Click
Application.Exit()
End Sub

Prof..: Rolando Fiestas Chávez. Pág. 6


Private Sub BtnNuevo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnNuevo.Click
Txtnombre.Clear()
Rbnvbnet.Checked = False
Rbnsql.Checked = False
RbnJava.Checked = False
RbnCplus.Checked = False
Chkppts.Checked = False
ChkManual.Checked = False
ChkDemos.Checked = False
txtph.Clear()
txtnh.Clear()
txtpc.Clear()
txtccp.Clear()
txtcm.Clear()
txtCcd.Clear()
txtTotal.Clear()
GrbCurso.Focus()
End Sub

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


System.EventArgs) Handles BtnCalcular.Click
Dim PCURSO As Single = Convert.ToSingle(txtpc.Text)
Dim CCP As Single = Convert.ToSingle(Txtccp.Text)
Dim CXM As Single = Convert.ToSingle(txtcm.Text)
Dim CCD As Single = Convert.ToSingle(TxtCcd.Text)
txtTotal.Text = (PCURSO + CCP + CXM + CCD).ToString
End Sub

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


System.Windows.Forms.KeyPressEventArgs) Handles txtnh.KeyPress
'e Es un objeto que reemplaza al Keyascii, ojo pero es un objeto
If Not e.KeyChar.IsDigit(e.KeyChar) Then 'Si el caractere que se ha ingresa
si no es digito el caracter presionado
'Se anula el evento producido de esta forma
e.Handled = True ' NO acepta en el control el dato presionado, pero ahora
es una clase del control.
End If
End Sub

End Class

Arreglos Dinámicos / ListView

APLICACIÓN 4

Prof..: Rolando Fiestas Chávez. Pág. 7


Public Class Form1
Inherits System.Windows.Forms.Form
Private Nom() As String
Private edad() As Byte
Private n As Short = 0

Private Sub ordenarListas()


'Ordenar un arreglo de structura mediante le método de la burbuja.
Dim aux1 As Byte, aux2 As String
For i As Short = 1 To n - 1
For j As Short = i + 1 To n
If edad(j) < edad(i) Then
aux1 = edad(i)
aux2 = Nom(i)
edad(i) = edad(j)
Nom(i) = Nom(j)
edad(j) = aux1
Nom(j) = aux2
End If
Next
Next
End Sub

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


System.EventArgs) Handles btnAceptar.Click
If Len(txtn.Text) = 0 Or Len(txte.Text) = 0 Then Exit Sub
n += 1
ReDim Preserve Nom(n)
ReDim Preserve edad(n)
Nom(n) = txtn.Text.ToUpper
edad(n) = Integer.Parse(txte.Text)
lblN.Text = n.ToString
txtn.Clear()
txte.Clear()
txtn.Focus()
End Sub

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


System.EventArgs) Handles btnMostrar.Click
If n = 0 Then Exit Sub
ordenarListas()
btnAceptar.Enabled = False
LV.Items.Clear()
For i As Integer = 1 To n
With LV.Items.Add(i)
.SubItems.Add(Nom(i))
.SubItems.Add(edad(i))
End With
Next
End Sub

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


System.Windows.Forms.KeyPressEventArgs) Handles txtn.KeyPress
If Asc(e.KeyChar) = 13 Then txte.Focus()
End Sub

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


System.Windows.Forms.KeyPressEventArgs) Handles txte.KeyPress
If Asc(e.KeyChar) = 13 Then btnAceptar.PerformClick()
End Sub

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


Handles MyBase.Activated
txtn.Focus()
End Sub
Prof..: Rolando Fiestas Chávez. Pág. 8
Private Sub btnBorrar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnBorrar.Click
For i As Integer = 1 To n
edad(i) = 0
Nom(i) = ""
Next
n = 0
LV.Items.Clear()
lblN.Text = 0
btnAceptar.Enabled = True
txtn.Focus()
End Sub

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


System.EventArgs) Handles btnSalir.Click
Close()
End Sub

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


System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Dim r As Short = MsgBox("¿Desea Salir del Programa?", MsgBoxStyle.Question +
MsgBoxStyle.YesNo, "Terminar")
If r = MsgBoxResult.No Then
e.Cancel = True
End If
End Sub
End Class

APLICACIÓN 5

Public Class Form1


Inherits System.Windows.Forms.Form
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"

Prof..: Rolando Fiestas Chávez. Pág. 9


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)

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, "Mañana", 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

Prof..: Rolando Fiestas Chávez. Pág. 10


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 = {"Computación", "Contabilidad", "Administración",
"Secretariado", "Electrónica"}
CboCar.DataSource = Carreras
End Sub
End Class

APLICACIÓN 6

EL CONTROL TIMER.

Public Class frmDolar


Inherits System.Windows.Forms.Form

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


System.EventArgs) Handles Timer1.Tick
Static N As Byte
Opacity = (100 - N) / 100
N += 1
If N = 100 Then Close()
End Sub

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


Handles MyBase.Click
Timer1.Enabled = True
End Sub
End Class

Prof..: Rolando Fiestas Chávez. Pág. 11


APLICACIÓN 7
DIALOG BOX

Public Class frmEditor


Inherits System.Windows.Forms.Form

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

Prof..: Rolando Fiestas Chávez. Pág. 12


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
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
Prof..: Rolando Fiestas Chávez. Pág. 13
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 Chávez. Pág. 14


APLICACIÓN 9:Diseño de Menus y Arreglo de Estucturas

MDI CONTAINER

Public Class MDIPrincipal


Inherits System.Windows.Forms.Form
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

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

Prof..: Rolando Fiestas Chávez. Pág. 15


FrmEditar:

Public Class FrmEditar


Inherits System.Windows.Forms.Form
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

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

Prof..: Rolando Fiestas Chávez. Pág. 16


'El MessageBox es una Clase en cambio el MSGBOX es un método
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
Public Class FrmDatos
Inherits System.Windows.Forms.Form
'Declaración Pública 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
Prof..: Rolando Fiestas Chávez. Pág. 17
Try
'El código 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 métodos 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
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
End Sub

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

Prof..: Rolando Fiestas Chávez. Pág. 18


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 colección Columns(
Colocar Nombres)
'3.-Crear objetos Filas DataRow
'4.-Asignar valores/datos a cada
columna del objeto fila
'5.-Agregar la fila a la colección de
Rows del objeto DataTable, se entiende
que es a la tabla en memoria.
'6.-Recien enlazar al DataGrid con el
objeto tabla

Public Class FrmListar

Private TblEmpleado As New DataTable


Private sub ConfigurarTabla()
with TblEmpleado
.Columns.Add(New DataColumn("Código"))
.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, según el valor de I
Fila("Código") = .IdEmpleado
Fila("Apellido") = .ApeEmpleado
Fila("Nombre") = .NomEmpleado
Fila("Fecha_Ing") = .FecIngEmpleado
Fila("Sueldo") = .SBEmpleado
End With
'Agregar la Fila a la colección Rows del datatable TBLempleado
TblEmpleado.Rows.Add(Fila)
Next

Prof..: Rolando Fiestas Chávez. Pág. 19


' 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
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
'Creación de unprocedimiento sub main
Public Sub Main()
Dim Fmenu As New MDIPrincipal
Fmenu.ShowDialog()
End Sub
End Module

Prof..: Rolando Fiestas Chávez. Pág. 20


APLICACIÓN 10

Public Class MdiFrame


Inherits System.Windows.Forms.Form
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

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

Prof..: Rolando Fiestas Chávez. Pág. 21


Case 1
MnuComboBox.PerformClick()
Case 2
MnuSalir.PerformClick()
Case 3
MsgBox("Venta en Contrucción", MsgBoxStyle.Information,
"Información")
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,
"Información")
End Sub

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


System.EventArgs) Handles MyBase.Load
StbP01.Text = "Rolando Chávez 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

frmCombo:

Prof..: Rolando Fiestas Chávez. Pág. 22


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:

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"

Prof..: Rolando Fiestas Chávez. Pág. 23


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
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, "Información")
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 Chávez. Pág. 24


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

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


System.EventArgs) Handles BtmEliminarUno.Click
If LstNombre.SelectedIndex > -1 Then
Prof..: Rolando Fiestas Chávez. Pág. 25
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

Prof..: Rolando Fiestas Chávez. Pág. 26


PARTE II

CONEXIÓN A BASE DE DATOS


ADO.NET
CONSULTAS SQL
PROCEDIMIENTOS ALMACENADOS

Prof..: Rolando Fiestas Chávez. Pág. 27


INSTRUCCIONES SQL

1. Introducción

Visual Basic .Net 2005, es un lenguaje de programación de propósito general, con una gran potencia en toda su estructura. Su
implementación en el sistema operativo Windows y sus herramientas visuales, han hecho de este lenguaje un líder indiscutible en lo que a
desarrollo de aplicaciones se refiere. Con las versión 3.0 del anterior Visual Basic, se implementó la gestión 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 2005 implemente en el lenguaje T-SQL, uno de los más potentes y sencillos lenguajes de bases
de datos.

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 extensión junto a nuestras bases de datos, obteniendo potentes
resultados. De hecho, las consultas que se realizan en Sql Server, están desarrolladas o basadas en este lenguaje, por lo que su
implementación en Visual Basic .Net 2005 no es complicada.

El objetivo principal de T-SQL (Transaction sql), es la realización de consultas y cálculos 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 2005:

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 más 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
continuación, el nombre del campo: nombre_tabla.nombre_campo. (Es opcional cuando se trata de una sola tabla).
5. Al especificar una expresión de búsqueda, si ésta se refiere a una expresión de caracteres, éstos han de encerrarse entre comillas
simples ('expresión_a_buscar').
6. Para especificar una fecha en una búsqueda, ésta debe encerrarse entre signos de apostrofes cuando se maneja Sql-Server 2005 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 expresión de cadena) es necesario refrescar el control.

3. Mandato Sql Estándar: Select

El lenguaje SQL está compuesto por una serie de sentencias y de cláusulas muy reducidas en número, pero muy potentes en
efectividad. De entre todas las palabras, existen cuatro que son las más utilizadas, estando compuestas por una sentencia y por
tres cláusulas:

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

La sentencia SELECT "selecciona" los campos que conformarán la consulta, es decir, que establece los campos que se visualizarán o
compondrán la consulta. El parámetro 'lista_campo' está compuesto por uno o más nombres de campos, separados por comas, pudiéndose
especificar también 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 más 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.

Una sentencia SELECT no puede escribirse sin la cláusula FROM. Una cláusula es una extensión de un mandato que complementa a una
sentencia o instrucción, pudiendo complementar también a otras sentencias. Es, por decirlo así, un accesorio imprescindible en una
determinada máquina, que puede también acoplarse a otras máquinas. En este caso, la cláusula FROM permite indicar en qué tablas o en

Prof..: Rolando Fiestas Chávez. Pág. 28


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 están compuestos por más 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 también la tabla a la cual pertenece dicho campo, ya, que de lo contrario, seleccionaría 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 telefónica de nuestros
clientes.

SELECT [codigo postal] FROM [tabla morosos];

Selecciona el campo 'codigo postal' de la tabla 'tabla morosos'.

Claúsula Where

La claúsula WHERE es opcional, y permite seleccionar qué registros aparecerán en la consulta (si no se especifica aparecerán todos los
registros). Para indicar este conjunto de registros se hace uso de criterios o condiciones, que no es más que una comparación 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 cláusula:

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

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
años).

SELECT * FROM abonados WHERE edad>=18 AND edad<=45;

Prof..: Rolando Fiestas Chávez. Pág. 29


Selecciona todos los abonados con edades comprendidas entre los 18 y los 45 años.

SELECT * FROM abonados WHERE edad BETWEEN 18 AND 45;

Selecciona todos los abonados con edades comprendidas entre los 18 y los 45 años.

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 inglés (mes/día/año)).

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 posición, los caracteres 'ZAMO'.
SELECT * FROM clientes WHERE provincia IN ('LIMA', 'QUITO','SANTIAGO','BOGOTA', ' BUENOS AIRES')

Selecciona todos los clientes de las provincias de LIMA, QUITO, SANTIAGO,


BOGOTA o BUESOS AIRES.

Uso de la Cláusula Order By

La cláusula ORDER BY suele escribirse al final de un mandato en SQL. Dicha cláusula establece un criterio de ordenación de los datos de la
consulta, por los campos que se especifican en dicha cláusula. La potencia de ordenación de dicha cláusula radica en la especificación de los
campos por los que se ordena, ya que el programador puede indicar cuál será el primer criterio de ordenación, el segundo, etc., así como el
tipo de ordenación por ese criterio: ascendiente o descendiente.

(...) ORDER BY campo1 [ASC/DESC][,campo2 [ASC/DESC]...]

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 cláusula 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 telefónica de 'clientes' ordenada por 'apellidos' y 'nombre'.

Prof..: Rolando Fiestas Chávez. Pág. 30


SELECT * FROM pedidos ORDER BY fecha DESC

Relación de 'pedidos' ordenados desde el más antiguo hasta el más moderno.

SELECT * FROM abonados ORDER BY apellidos, nombre, fecha_nacimiento DESC

Relación de 'abonados' por 'apellidos' y 'nombre' ascendiente, y por 'fecha_nacimiento' en orden descendiente (del más viejo al más
joven).

Observación: El resultado de una consulta es un objeto Datatable en la progración Visual studio .Net 2005

4. Eliminación Dinámica De Registros

¿Quién no ha sentido la necesidad de eliminar de un golpe un grupo de registros en común, en lugar de hacerlo uno por uno?. Esta
operación puede ser mucho más 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 través de la sentencia DELETE, cuya sintaxis es la siguiente:

DELETE FROM tablas WHERE criterios

Donde el parámetro 'tablas' indica el nombre de las tablas de las cuales se desea eliminar los registros, y, el parámetro 'criterios',
representa las comparaciones o criterios que deben cumplir los registros a eliminar, respetando a aquellos registros que no los cumplan.

Si - por ejemplo - quisiéramos eliminar todos los pedidos realizados por el cliente cuyo código sea 4 en el día de hoy, utilizaríamos la
siguiente sentencia:

DELETE FROM pedidos WHERE [codigo cliente]=4 AND fecha=Now();

5. Aritmética Con Sql

¿Quién no ha echado en falta el saber el total de ingresos o de gastos de esta fecha a esta otra?.
¿Quién 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 carácter aritmético:

Sumas o Totales

Para sumar las cantidades numéricas contenidas en un determinado campo, hemos de utilizar la función SUM, cuya sintaxis es la siguiente:

SUM(expresión)
Donde 'expresión' puede representar un campo o una operación con algún campo.
La función SUM retorna el resultado de la suma de la expresión indicada en todos los registros que son afectados por la consulta. 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 Aritméticas

Para averiguar el promedio de unas cantidades utilizaremos la función AVG, cuya sintaxis es la siguiente:
Prof..: Rolando Fiestas Chávez. Pág. 31
AVG(expresión)
La función AVG retorna el promedio o media aritmética de la expresión especificada, en todos los registros afectados por la consulta. Esto
es lo mismo que realizar una suma (SUM) y, después, dividir el resultado entre el número 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 Mínimos Y Máximos

También es posible conocer el valor mínimo o máximo de un campo, mediante las funciones MIN y MAX, cuyas sintaxis son las siguientes:

MIN(expresión)
MAX(expresión)
He aquí algunos ejemplos:

SELECT MIN(unidades) AS minimo FROM pedidos

Retorna el pedido más pequeño y lo refleja en el campo 'minimo'.

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

Retorna el pedido más grande de hoy y lo refleja en el campo 'maximo'.

SELECT MAX(gastos) AS maximo FROM diario

Retorna el gasto más costoso reflejado en el diario contable, y lo representa en el campo 'maximo'.

Contar Registros

Otra operación muy común es realizar un recuento de registros. Aunque a primera vista pueda parecer poco práctico, la realidad es bien
distinta. ¿Q quién no le gustaría conocer cuántos pedidos se han realizado hoy?. ¿O comprobar cuántos pagos se han realizado por una
determinada cantidad?. ¿O saber cuántos clientes cumplen hoy años, se jubilan, son menores o mayores de edad, tienen alguna deuda,
viven en esta ciudad o en tal otra, tienen teléfono móvil, están casados o solteros, etc.?. Para conocer cuántos registros hay utilizaremos la
función COUNT, cuya sintaxis es la siguiente:

COUNT(expresión)

La función COUNT retorna el número de registros indicados en la expresión.

He aquí algunos ejemplos:

SELECT COUNT(*) AS num_pedidos FROM pedidos WHERE fecha=Now()

Retorna el número de pedidos realizados hoy. Este resultado se toma como un nuevo campo en el RecordSet y se le llama 'num_pedidos'.

Prof..: Rolando Fiestas Chávez. Pág. 32


SELECT COUNT(*) AS casados FROM clientes WHERE casado=True

También : SELECT COUNT(*) AS casados FROM clientes WHERE casado

Retorna el número 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 número 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 máximo y el mínimo de unidades pedidas, y el número de pedidos realizados, durante el primer semestre de
2005.

Omisión De Registros Duplicados

En una consulta podría ser útil omitir registros que estén duplicados. Por ejemplo, en nuestros pedidos hay duplicación, puesto que un
cliente realiza varios pedidos en el mismo día. Quizá necesitemos una historia para conocer los días y los clientes que realizaron algún
pedido, pero no necesitaremos toda la lista, si no que nos diga, únicamente, mediante una línea, qué cliente realizó algún pedido y en qué
día. Para ello, utilizaremos el predicado DISTINCT, cuya sintaxis es la siguiente:

SELECT DISTINCT lista_campos ...

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 más completa y nos visualice también el nombre y los apellidos correspondientes del cliente en cuestión
(estos datos están en la tabla 'clientes' y no en 'pedidos'), escribiríamos 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 solución más primitiva sería acceder a la tabla y, el precio de cada producto multiplicarlo por 1.1 y reemplazarlo a
mano. Con diez productos, la inversión de tiempo podría llegar al cuarto de hora, y no estaremos exentos de fallos al tipear el importe o al
realizar el cálculo en la calculadora. Si la tabla de productos superase la cantidad de 100 productos (algo muy probable y fácil de cumplir), la
cosa ya no es una pequeña molestia y un poco de tiempo perdido.

El lenguaje SQL nos permite solucionar este problema en cuestión de pocos segundos, ya que posee una sentencia llamada Update, que se
ocupa de los cálculos 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 realizarán las sustituciones o reemplazos. El parámetro campo indica el
campo que se va a modificar, y el parámetro nuevo_valor representa una expresión (constante, valor directo, un cálculo, etc.) cuyo
resultado o valor será el nuevo valor del campo.

En el problema expuesto anteriormente escribiríamos la siguiente sentencia:

Prof..: Rolando Fiestas Chávez. Pág. 33


UPDATE productos SET pvc=pvc*1.1

Si este incremento de precio de costo debe afectar al precio de venta al público un 30% de beneficio, podríamos escribir la siguiente línea
para ahorrar trabajo y tiempo:

UPDATE productos SET pvc=pvc*1.1, pvp=pvp*1.3

La sentencia UPDATE es muy versátil y potente, por lo que podemos realizar reemplazos condicionantes, ya que permite la cláusula
WHERE. De ello se deduce que - por ejemplo -, si se desea bajar un 10% el importe del seguro a aquellos asegurados que cumplan más de
dos años de carnet de conducir, y que tengan más de 22 años de edad, tendríamos 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 diseño inicial de la
base de datos.

7. Grupos De Registros

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 día, 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, sería el campo fecha), y, a continuación, realizar la
consulta mediante la cláusula GROUP BY, cuya sintaxis es la siguiente:

SELECT ... FROM ... [WHERE ...] GROUP BY lista_campos

Básicamente, la cláusula GROUP BY agrupa o combina registros con idéntico valor en los campos especificados, en un único registro. Esto
significa que en un sólo registro se mostrará la información común a muchos registros, como si dijésemos, 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 cuántos pedidos y unidades han realizado cada uno
de nuestros clientes. Para ello, se escribiría 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 cuántos pedidos se realizaron cada día, escribiríamos esta línea:
SELECT fecha, count(fecha) AS num_pedidos FROM pedidos GROUP BY fecha

Para conocer cuántas unidades se pidieron cada día, tipearíamos esta sentencia:

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

En la siguiente sentencia se muestra para cada cliente aquellos días en que se realizó un pedido, resumiéndose el número 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 condición a través de la cláusula HAVING, que indica los criterios o condiciones a cumplir
por los registros a visualizar en un agrupamiento. En esta ocasión, la condición era de aquellos pedidos realizados antes del seis de Enero
de 2005.

Para conocer una estadítica 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 sería el siguiente:


Prof..: Rolando Fiestas Chávez. Pág. 34
FECHA PEDIDOS UNIDADES MINIMO MAXIMO PROMEDIO
----- ------- -------- ------ ------ --------
2/01/2005 9 1599 2 1500 177,6
3/01/2005 5 113 1 100 22,6
4/01/2005 3 33 3 25 11,0
6/01/2005 6 90 5 50 15,0

CONSULTAS SQL-SERVER 2005


CONSULTA UNION DE DOS TABLAS
select P.idproducto, P.Nombreproducto, C.NombreCategoría, P.PrecioUnidad, E.Compañía
from Productos as P
Inner Join Categorías as C
On P.Idcategoría=c.IdCategoría
order by C.NombreCategoría

CONSULTA UNION DE TRES TABLAS


select P.idproducto, P.Nombreproducto, C.NombreCategoría, P.PrecioUnidad, E.NombreCompañía
from Productos as P
Inner Join Categorías as C
On P.Idcategoría=c.IdCategoría
inner join Proveedores as E
on p.idProveedor = E.IdProveedor
order by C.NombreCategoría

CONSULTA UNION DE TRES TABLAS A MAS


Select P.IdPedido, P.FechaPedido, P.Cargo, C.NombreCompañía, 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 ESPACIO EN BLANCO


select * from [Detalles de pedidos]
order by Idpedido

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

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 año
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 idCAtegoría=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 Categorías C

Prof..: Rolando Fiestas Chávez. Pág. 35


on P.IdCAtegoría=C.IdCategoría
where C.NombreCategoría ='Condimentos'

Select NombreProducto, PrecioUnidad, IdCategoría


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 IdCAtegoría=1

DEMO 1:Uso de los Objetos Connection, DataAdapter y Dataset

Imports System.Data.SqlClient
Public Class Form1
Private CN As New SqlConnection("server=.;integrated security=true;initial
catalog=empresa3N")

Private DAP As New SqlDataAdapter("select idproducto, NombreProducto, idCategoría,


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

Prof..: Rolando Fiestas Chávez. Pág. 36


DEMO2

Imports System.Data.SqlClient
Public Class Form1
Private CN As New SqlConnection("Server=.;integrated security=true; initial
catalog=empresa3n")
Private DAP As New SqlDataAdapter("Select idCAtegoría, Nombrecategoría from Categorías",
CN)
Private DSET As New DataSet
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
Text = "Categorías"
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 categorías)")
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 e As


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 Idcategoría=" & 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 Chávez. Pág. 37


DEMO 3

Imports System.Data.SqlClient
Public Class Form1
Private CN As New SqlConnection("server=.;integrated security=true;initial
catalog=empresa3N")
Private DAP As New SqlDataAdapter("select idCategoría, NombreCategoría from Categorías",
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 = "NOmbreCategoría"
.ValueMember = "Idcategoría"
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, ByVal e As


System.EventArgs) Handles cboCate.SelectedIndexChanged
Try
DST.Tables("tpro").DefaultView.RowFilter = "idCategoría=" & cboCate.SelectedValue
txtCant.Text = dgvPro.RowCount - 1

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 Chávez. Pág. 38


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=Empresa3n")
Private cmd As New SqlCommand("Select nombrecompañía 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 número 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

DEMO 5: Consultas Estadísticas


USO DEL DATAREADER – El modelo de Acceso a Datos Conectado.

Prof..: Rolando Fiestas Chávez. Pág. 39


Imports System.Data.SqlClient
Public Class frmdatareader
Private CN As New SqlConnection("server=(Local);integrated
security=sspi;database=Empresa3n")
Private CMD As New SqlCommand
Private cadena As String
Private drd As SqlDataReader = Nothing

Private Sub frmdatareader_Load(ByVal sender As System.Object, ByVal e As 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

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

Prof..: Rolando Fiestas Chávez. Pág. 40


'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

DEMO 6 – Data Relations.

Imports System.Data.SqlClient
Public Class Form1
Private CN As New SqlConnection("server=server03-02;integrated
security=sspi;database=Empresa3n")
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
MsgBox(ex.Message)
End Try
End Sub
End Class
Prof..: Rolando Fiestas Chávez. Pág. 41
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=empresa3n")
Private aAdap As New SqlDataAdapter("select IdCliente, NombreCompañía, NombreContacto,
Dirección, Ciudad, País 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("NombreCompañía").ToString
txtContacto.Text = dr("NombreContacto").ToString
txtDireccion.Text = dr("Dirección").ToString
txtPais.Text = dr("Dirección").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.Object, ByVal e As System.EventArgs)
Handles btnSiguiente.Click
Dim Uf As Integer = dDt.Rows.Count - 1
nFila = nFila + 1
If nFila > Uf Then nFila = Uf
MostrarDatos(nFila)
End Sub

Prof..: Rolando Fiestas Chávez. Pág. 42


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

Imports System.Data.SqlClient
Public Class Form1
'filtros con 2 datagrid
Private Cn As New SqlConnection("Server=(Local); integrated Security=true;
Database=Empresa3n")
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
Private Sub dgdpedidos_CurrentCellChanged(ByVal sender As Object, ByVal e As
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

Prof..: Rolando Fiestas Chávez. Pág. 43


Private Sub dgdpedidos_Navigate(ByVal sender As System.Object, ByVal ne As
System.Windows.Forms.NavigateEventArgs) Handles dgdpedidos.Navigate

End Sub
End Class

DEMO 9:

Imports System
Imports System.Data.SqlClient

Public Class Form1


Inherits System.Windows.Forms.Form

Private cn As New SqlConnection("server=.; integrated security=true;database=empresa3n")


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 Chávez. Pág. 44


DEMO 10: USO DE PROC.ALMACENADOS SQL SERVER

Imports System.Data.SqlClient
Public Class Form1
Private CN As New SqlConnection("Server=.; integrated Security=sspi; Initial
catalog=Empresa3n")
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 = "NombreCategoría"
.ValueMember = "IdCategoría"
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 e As


System.EventArgs) Handles cbocat.SelectedIndexChanged
Try
DST.Tables("Productos").DefaultView.RowFilter = "idCategoría=" &
cbocat.SelectedValue
txtTotal.Text = dgvprod.RowCount.ToString
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
Close()
End Sub
End Class

Prof..: Rolando Fiestas Chávez. Pág. 45


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=Empresa3n")
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, ByVal e As


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

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

Prof..: Rolando Fiestas Chávez. Pág. 46


DEMO 12: MODELO CONECTADO, OBETO DATAREADER

Imports System.Data.SqlClient ‘Espacio de nombres o namespaces


Public Class Form1
Private Cn As New SqlConnection("integrated security=sspi; database=Empresa3n; 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 System.EventArgs) Handles 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
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

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

Prof..: Rolando Fiestas Chávez. Pág. 47


DEMO 13 - MODULOS.

Para este Demo crearemos los siguientes procedimeitos Almacenados en


SQL – SERVER.
CREATE PROCEDURE usp_pedidos_fechas
@f1 smalldatetime, @f2 smalldatetime
AS
select P.Idpedido, P.Fechapedido, C.NombreCompañía, E.nombre +' '+ E.Apellidos, P.PaísDestinatario
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

---------------------------------------------------------------------------------------------------------

CREATE PROCEDURE usp_pedidos_Clientes


@idCli Varchar(5)
AS
select P.Idpedido, P.Fechapedido, C.NombreCompañía, E.nombre +' '+ E.Apellidos, P.PaísDestinatario
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.NombreCompañía, E.nombre +' '+ E.Apellidos, P.PaísDestinatario
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.NombreCompañía, E.nombre +' '+ E.Apellidos, P.PaísDestinatario
from Pedidos P Join Clientes C on P.IdCliente=C.IdCliente
join Empleados E on P.IdEmpleado=E.IdEmpleado
Where P.PaísDEstinatario =@Pais
order by P.FechaPedido desc
RETURN

---------------------------------------------------------------------------------------------------------

CREATE PROCEDURE usp_pedidos_Listar


AS
select P.Idpedido, P.Fechapedido, C.NombreCompañía, E.nombre +' '+ E.Apellidos, P.PaísDestinatario
from Pedidos P Join Clientes C on P.IdCliente=C.IdCliente
join Empleados E on P.IdEmpleado=E.IdEmpleado
order by P.FechaPedido desc
RETURN

Crearemos un modulo que lo llamaremos ModProcesos.


Prof..: Rolando Fiestas Chávez. Pág. 48
--------------------------------------------------
Imports System.Data.SqlClient
Module modprocesos
Public xcon As String = "server=(Local);integrated Security=true; initial
catalog=empresa3n"
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

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


Prof..: Rolando Fiestas Chávez. Pág. 49
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

Código del Formulario - FrmConsultas.


Dentro del boton (btnConsultar_Click)
--------------------------------------------------

Public Class frmConsultas

Private Sub btnConsultar_Click(ByVal sender As System.Object, ByVal e As 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
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 país de destino", "Error de consulta",
MessageBoxButtons.OK, MessageBoxIcon.Information)
txtdato1.Focus()
Prof..: Rolando Fiestas Chávez. Pág. 50
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 País"
txtdato1.Clear()
txtDato2.Clear()
txtdato1.Visible = True
txtDato2.Visible = False
ElseIf rbtnTodos.Checked Then
txtdato1.Clear()
txtDato2.Clear()
txtdato1.Visible = False
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

Prof..: Rolando Fiestas Chávez. Pág. 51


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

DEMO 14 - CLASES.

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)
set @idEmpleado=@@Identity
-------------------------------------
CREATE PROCEDURE usp_EmpleadoEliminar
@idEmpleado int
AS
delete Empleados
where IdEmpleado=@IdEmpleado
------------------------------------

El primer formulario:

El Segundo formulario:

Prof..: Rolando Fiestas Chávez. Pág. 52

You might also like