lunes, 31 de agosto de 2015

Acciones [Actualizar y Eliminar] en base de datos SQL Compact 4.0

Siguiendo con Sql Compact 4.0 en esta publicación, vamos a editar los datos  mediante el uso de un cuadro de dialogo personalizado y también vamos a eliminar datos directamente desde la grid mediante la posición del puntero en la fila respectiva.

Tomando la base de Datos "Northwind. sdf " le hecho unas pequeñas modificaciones que incluyen la eliminación de algunas tablas que estaban referenciadas para que se más practica para el presente ejemplo, en la cual se incluirá en el zip  en la parte final de este post.

Para empezar necesitamos los controles mostrados en esta captura:



Como he dicho en post anterior yo les muestro una de las muchas formas que se podrían usar las acciones sobre un BD(base de datos) en SQL. Siendo asi pense en eliminar valores directamente de la grid conectada a la BD.
 en esta captura les muestro como:


Para usar la edición use un cuadro de dialogo creado para efecto:


Como ya mostrado anteriormente le pongo la cadena de conexión para la BD la sintaxis sobre el modulo es:

Module Module1
    Public path As String = Form1.lbldir.Text
    Public conn As New SqlServerCe.SqlCeConnection("Data Source=" & path + ";Max Database Size=4091")
    Public sql As String
    Public cmd As New SqlServerCe.SqlCeCommand(sql, conn)
    Public Sub conectarse()
        Try
            conn.Open()
            '  MsgBox("Conexion exitosa")
        Catch ex As Exception
            MsgBox(ex.ToString())
        End Try
        '   conn.Close()
    End Sub
End Module

 y dentro del form de edición:

Public Class FormControl
    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Me.DialogResult = System.Windows.Forms.DialogResult.OK
        Me.Close()
    End Sub
    Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
        Me.Close()
    End Sub
    Sub asignardatos()
        Try
            Dim i As Integer = Form1.grid.CurrentRow.Index ' indica la fila actual como numero(index)
            txtproductid.Text = Form1.grid.Item(0, i).Value ' asigna valores a los textbox desde la grid
            txtsupplierid.Text = Form1.grid.Item(1, i).Value
            txtcategoryid.Text = Form1.grid.Item(2, i).Value
            txtproduct_name.Text = Form1.grid.Item(3, i).Value
            txtenglish_name.Text = Form1.grid.Item(4, i).Value
            txtquantity.Text = Form1.grid.Item(5, i).Value
            txtunida_price.Text = Form1.grid.Item(6, i).Value
            txtunits_stock.Text = Form1.grid.Item(7, i).Value
            txtUnits_On_Order.Text = Form1.grid.Item(8, i).Value
            txtreorder_level.Text = Form1.grid.Item(9, i).Value
            cbodiscontinued.Text = Form1.grid.Item(10, i).Value
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
    Private Sub btnguardar_Click(sender As Object, e As EventArgs) Handles btnAceptar.Click
        actualizar()
        Form1.cargar_datos()
    End Sub
    Sub actualizar()
        Try
            ' edita en funcion de la key primary
            conectarse()
            cmd.CommandType = CommandType.Text
            cmd.Connection = conn
            sql = "UPDATE PRODUCTS SET "
            sql += "[SUPPLIER ID] ='" & txtsupplierid.Text & "',"
            sql += "[CATEGORY ID] = '" & txtcategoryid.Text & "',"
            sql += "[PRODUCT NAME]= '" & txtproduct_name.Text & "',"
            sql += "[ENGLISH NAME] = '" & txtenglish_name.Text & "',"
            sql += "[QUANTITY PER UNIT] = '" & txtquantity.Text & "',"
            sql += "[UNIT PRICE] = '" & txtunida_price.Text & "',"
            sql += "[UNITS IN STOCK] = '" & txtunits_stock.Text & "',"
            sql += "[UNITS ON ORDER] = '" & txtUnits_On_Order.Text & "',"
            sql += "[REORDER LEVEL] = '" & txtreorder_level.Text & "',"
            sql += "[DISCONTINUED] = '" & cbodiscontinued.Text & "'"
            sql += "WHERE [PRODUCT ID] =" & txtproductid.Text
            cmd.CommandText = sql
            cmd.ExecuteNonQuery()
            MsgBox("Registro actualizado satisfactoriamente", vbExclamation)
            Me.Close()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
        conn.Close()
    End Sub
    Private Sub txtcategoryid_TextChanged(sender As Object, e As EventArgs) Handles txtunits_stock.TextChanged, txtUnits_On_Order.TextChanged, txtunida_price.TextChanged, txtsupplierid.TextChanged, txtreorder_level.TextChanged, txtquantity.TextChanged, txtproduct_name.TextChanged, txtenglish_name.TextChanged, txtcategoryid.TextChanged
        btnAceptar.Enabled = True
    End Sub
    Private Sub btncancelar_Click(sender As Object, e As EventArgs) Handles btncancelar.Click
        Me.Close()
    End Sub
End Class
Al final sobre el Form principal:
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        cargar_datos() '...................habilita los botones de acciones
        btnactualizar.Enabled = True
        btnborrar.Enabled = True
    End Sub
    Sub cargar_datos() ' procedimiento para cargar los datos
        Try
            conectarse()
            Dim ds As New DataSet
            Dim dt As New DataTable
            Dim strSql As String = "SELECT* FROM PRODUCTS "
            Dim adp As New SqlServerCe.SqlCeDataAdapter(strSql, conn)
            adp.Fill(dt)
            grid.DataSource = dt
        Catch ex As Exception
            ex.ToString()
        End Try
        conn.Close()
        contar()
    End Sub
    Sub contar() ' cuenta las filas del grid
        Dim i As Integer = grid.Rows.Count
        lblcounter.Text = "Número de items =" & i
    End Sub
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles btnactualizar.Click
        FormControl.txtproductid.Enabled = False ' en modo edicion desabilita  el texbox que contiene la key primary
        FormControl.asignardatos() ' asigna los datos de la grid a las cajas de texto
        FormControl.ShowDialog() ' por ultimo muestra el form Control
    End Sub
    Private Sub btnborrar_Click(sender As Object, e As EventArgs) Handles btnborrar.Click
        eliminaritem() ' elimina valores llamado al procedimiento
    End Sub
    Sub eliminaritem()
        Dim indice As String
        '------------ELIMINA VALORES BUSCADOS-----------
        Try
            If grid.Rows.Count = 0 Then
                MsgBox("No se puede eliminar no existen registros", vbCritical)
            ElseIf MessageBox.Show("¿Esta seguro eliminar el registro?", Me.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = DialogResult.Yes Then
                conectarse()
                Dim row As Integer
                row = grid.CurrentRow.Index
                indice = grid.Item(0, row).Value
                cmd.CommandType = CommandType.Text
                sql = "DELETE FROM PRODUCTS WHERE [PRODUCT ID] = '" & indice & "'" ' & ' 
                cmd.CommandText = sql
                cmd.ExecuteNonQuery()
                MsgBox("Registro eliminado satisfactoriamente", vbExclamation)
            Else
                MsgBox(" Proceso cancelado", vbCritical)
            End If
        Catch ex As Exception
            MsgBox(" Proceso cancelado. Error al ejecutar tarea", vbCritical)
        End Try
        conn.Close()
        cargar_datos()
        '---------------------FINALIZA ELIMINADO------------------
    End Sub
End Class
Y eso es todo, mi ejemplo queda al final del post, sus comentarios mas abajo o dirigir a mi correo..gracias! y nos vemos.

https://mega.nz/#!BBdVjDjA!m4e4HgSkAMQ-_8TyYfxvV1RUafZVdbTjzF_xQUGMBoA