Manual Taller Programacion Distribuida

Carrera Profesional de Computación e Informática Unidad Didáctica Taller de Programación Distribuida Módulo II IV CICLO

Views 96 Downloads 11 File size 3MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Carrera Profesional de Computación e Informática

Unidad Didáctica Taller de Programación Distribuida Módulo II IV CICLO

SEPARATA DE APLICACIONES PARA WINDOWS EN VISUAL BASIC .NET 2010 ELABORADO POR Prof. Rolando Chávez Fiestas

Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 1

Carrera Profesional de Computación e Informática

APLICACIÓN 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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 2

Carrera Profesional de Computación e Informática

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

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 Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 3

Carrera Profesional de Computación e Informática

APLICACIÓN 2: Uso de Múltiples 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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 4

Carrera Profesional de Computación e Informática

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 5

Carrera Profesional de Computación e Informática

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 6

Carrera Profesional de Computación e Informática

APLICACIÓN 3:Diseño 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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 7

Carrera Profesional de Computación e Informática

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 8

Carrera Profesional de Computación e Informática

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

Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 9

Carrera Profesional de Computación e Informática

Public Class FrmDatos '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 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 Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 10

Carrera Profesional de Computación e Informática

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 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 Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 11

Carrera Profesional de Computación e Informática

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 ' 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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 12

Carrera Profesional de Computación e Informática

End Class

Modulo: Module ModEmpleados 'Estructura definido por el usuario Structure Empleado Dim IdEmpleado As Integer 'usando atributos para dimensionar una cadena Dim ApeEmpleado As String 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. [email protected] www.rolochafi.wordpress.com

Pág. 13

Carrera Profesional de Computación e Informática

APLICACIÓN 4: Creación De Interface del Sistema Creación 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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 14

Carrera Profesional de Computación e Informática

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

Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 15

Carrera Profesional de Computación e Informática

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 16

Carrera Profesional de Computación e Informática

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 17

Carrera Profesional de Computación e Informática

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. [email protected] www.rolochafi.wordpress.com

Pág. 18

Carrera Profesional de Computación e Informática

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 19

Carrera Profesional de Computación e Informática

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

CONEXIÓN A BASE DE DATOS Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 20

Carrera Profesional de Computación e Informática

ADO.NET CONSULTAS SQL PROCEDIMIENTOS ALMACENADOS

INSTRUCCIONES SQL 1. Introducción Visual Basic .Net 2010, 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 el anterior Visual Basic 6, 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 2010 implemente en el lenguaje T-SQL, uno de los más potentes y sencillos lenguajes de bases de datos. Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 21

Carrera Profesional de Computación e Informática

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

Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 22

Carrera Profesional de Computación e Informática

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 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'. Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 23

Carrera Profesional de Computación e Informática

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 edad2

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

Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 28

Carrera Profesional de Computación e Informática

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

Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 31

Carrera Profesional de Computación e Informática

DEMO1: Uso Dataset

de

los

Imports System.Data.SqlClient Public Class Form1 Private CN As New catalog=EmpresaEBP")

Objetos

Connection,

SqlConnection("server=.;integrated

DataAdapter

y

security=true;initial

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

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 32

Carrera Profesional de Computación e Informática

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 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. [email protected] www.rolochafi.wordpress.com

e

Pág. 33

As

Carrera Profesional de Computación e Informática

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 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, System.EventArgs) Handles cboCate.SelectedIndexChanged Try DST.Tables("tpro").DefaultView.RowFilter = "idCategoría=" & cboCate.SelectedValue txtCant.Text = dgvPro.RowCount - 1

ByVal

e

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 34

Carrera Profesional de Computación e Informática

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

Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 35

Carrera Profesional de Computación e Informática

DEMO 5: Consultas Estadísticas 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

e

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 36

Carrera Profesional de Computación e Informática

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 37

Carrera Profesional de Computación e Informática

DEMO 6 – Data Relations. Consultas Jerárquicas

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 38

Carrera Profesional de Computación e Informática

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

Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 39

Carrera Profesional de Computación e Informática

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, 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.EventArgs) Handles btnSiguiente.Click Dim Uf As Integer = dDt.Rows.Count - 1 nFila = nFila + 1 If nFila > Uf Then nFila = Uf Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

System.Object,

ByVal

e

Pág. 40

As

Carrera Profesional de Computación e Informática

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 Sincrónico 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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 41

Carrera Profesional de Computación e Informática

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

e

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 42

Carrera Profesional de Computación e Informática

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

e

End Try Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 43

As

Carrera Profesional de Computación e Informática

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 Chávez. [email protected] www.rolochafi.wordpress.com

ByVal

Pág. 44

e

As

Carrera Profesional de Computación e Informática

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 45

Carrera Profesional de Computación e Informática

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

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.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 Prof..: Rolando Fiestas Chávez. Pág. 46 --------------------------------------------------------------------------------------------------------rolochafi@gmail.com www.rolochafi.wordpress.com 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

Carrera Profesional de Computación e Informática

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 47

Carrera Profesional de Computación e Informática

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

Código 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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 48

e

As

Carrera Profesional de Computación e Informática

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() 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 Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 49

Carrera Profesional de Computación e Informática

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



LÓGICA

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 Chávez. [email protected] www.rolochafi.wordpress.com CREATE PROCEDURE usp_EmpleadoEliminar @idEmpleado int AS delete Empleados where IdEmpleado=@IdEmpleado ------------------------------------

Pág. 50

Carrera Profesional de Computación e Informática

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 51

Carrera Profesional de Computación e Informática

.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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 52

Carrera Profesional de Computación e Informática

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 ´Creación 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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 53

el

Carrera Profesional de Computación e Informática

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

e

As

ByVal

e

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

e

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 54

Carrera Profesional de Computación e Informática

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 55

Carrera Profesional de Computación e Informática

DEMO 15 – Aplicación Cliente Servidor Tres Capas. Múltiples consultas Diseño de la Capa de Interface Crear la Capa de Datos: Abrir el Sql server y proceda a crear los siguientes procedimientos almacenados: --------------Definición 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 País--CREATE PROCEDURE uspPedidosxPais @Pais VarChar(15) As SELECT * FROM Pedidos Where PaísDestinatario=@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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 56

Carrera Profesional de Computación e Informática

Crear la Capa de Lógica de Negocios.- esta compuesta por la clase de objetos que usara la aplicación. Clase de Objetos: Es en donde se definen los objetos, sus características y su comportamiento: (Propiedades y Métodos) También 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 código: Imports System.Data.SqlClient Public Class clsConsultaPedidos 'Definir Métodos para la clase (puede se Function o Sub) 'Especificar el comportamiento del objeto 'Aqui se define la lógina de negocios 'Creamos la cadena de conexión en una constante cadena Private Const Conex As String = "Server=ROLOCHAFI-PC;DataBase=Empresa4M;Integrated Security=True" Public Function getPedidosTodos() As DataTable 'Método 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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 57

Carrera Profesional de Computación e Informática

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 presentación. – esta formada por la interface del usuario: Escribir el siguiente código 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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 58

Carrera Profesional de Computación e Informática

.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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 59

Carrera Profesional de Computación e Informática

DEMO 16 – Aplicación Librería 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" 'Método 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 '--Método para listar Categorías y Proveedores---Public Function getListas() As DataSet Try Dim cn As New SqlConnection(conex) Dim Dap As New SqlDataAdapter("Usp_Categorías_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 '--Método 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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 60

Carrera Profesional de Computación e Informática

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 '--Método 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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 61

Carrera Profesional de Computación e Informática

End Class

Capa de Presentación:

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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 62

Carrera Profesional de Computación e Informática

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 = "NombreCompañía" '--->.SelectedItem .ValueMember = "IdProveedor" '--->.Selectedvalue End With With CboCate .DataSource = xobjPro.getListas().Tables("tCate") .DisplayMember = "NombreCategoría" .ValueMember = "IdCategoría" 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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 63

Carrera Profesional de Computación e Informática

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

Módulo 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,IdCategoría, PrecioUnidad,UnidadesEnExistencia From Productos ORDER BY 2 GO Prof..: Rolando Fiestas Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 64

Carrera Profesional de Computación e Informática

----MOSTRAR PRODUCTO X COCDIGO----Create Procedure Usp_Producto_Mostrar @idPro int As Select IdProducto, NombreProducto,IdProveedor,IdCategoría, PrecioUnidad,UnidadesEnExistencia From Productos where IdProducto=@idPro Go

----Listar Categorías--Create Procedure Usp_Categorías_Listar As Select IdCategoría, NombreCategoría From Categorías Order By 2 Go ---Listar Proveedores--Create Procedure Usp_Proveedores_Listar As Select IdProveedor, NombreCompañía 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, IdCategoría, 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, IdCategoría=@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 Chávez. [email protected] www.rolochafi.wordpress.com

Pág. 65