21 de diciembre de 2012

ACME en VB con TableAdapter

Vamos a hacer un ACME(Actualizar, Consultar, Modificar, Eliminar) para una aplicación de escritorio, esta aplicación tendrá un formulario con un dataGridview para mostrar los datos, también tendrá un BindingNavigator para "navegar" por los datos que recuperemos en el Datagridview y enlazaramos el BindingSource del BindingNavigator para mostrar en tetxbox relativos con los campos de la tabla empleado(codigo, nombres, cargo, jefe, departamento) la información correspondiente del empleado por la que vayamos avanzando según avancemos con el BindingNavigator, al final tendremos un formulario asi:


Lo primero va ser crear un nuevo proyecto, en este ejemplo aparecen los códigos para VB y C# así que ustedes deciden que lenguaje utilizar (igual no escribiremos mucho código pues una de las ventajas de utilizar TableAdapter es que no te complicas demasiado escribiendo código) luego muestro en la imagen a continuación el Server Explorer la base de datos y la tabla a la que nos vamos a conectar, en la cual todos los campos son tipo string


Ahora vamos a agregar un nuevo elemento a nuestro proyecto que sera el Dataset sobre el que se trabajara, para esto nos colocamos en el Solution Explorer y damos click derecho sobre nuestro proyecto, nos vamos a agregar(Add) y New Item, tal como muestro en la imagen


agregamos un Dataset y como nombre le ponemos PruebaDS y click en aceptar, tal como se muestra


Al hacerlo lo primero que veremos sera una pantalla gris con esto y lo que vamos a hacer es "jalar", "arrastrar" la tabla empleados desde el Server Explorer a esta parte gris y ahora en la pantalla gris tendremos un DataTable


Tendremos este Datatable con el nombre empleado, que lo toma por defecto del nombre de la tabla, lo podemos cambiar pero en este ejemplo lo dejaremos así  ahora bien, se nos crean dos métodos en el empleadoTableAdapter que son Fill y GetData(), lo que haremos sera dar click derecho sobre la parte gris y agregar una query


Tendremos la siguiente ventana, aquí podemos escoger entre
  • Utilizar sentencias SQL y asi crear por nuestra cuenta la sentencia SQL a utilizar o bien
  • Crear un nuevo procedimiento almacenado que actuara sobre la tabla empleado y se guardara en la base de datos prueba y por ultimo
  • Utilizar un procedimiento almacenado existente en nuestra base.

Tal como lo muestra la imagen y para todas las acciones que crearemos sobre la base de datos seleccionaremos la primera opción, la de definir por nuestra cuenta la sentencia SQL a utilizar y damos click al botón Next 


a continuación escogeremos el tipo de query que se va a crear, aquí seleccionaremos la primera opción que tal como ven en la imagen es la de SELECT a fin que nos devuelva un conjunto de valores, aunque utilizaremos también el UPDATE, DELETE y el INSERT, al final la única que no utilizaremos sera opción 2.  


Aqui nos pide especificar la sentencia que utilizaremos, para el caso de SELECT en nuestro proyecto de ejemplo puede quedar tal como se muestra en la imagen, pero podemos modificarla según lo que queramos hacer, mas abajo en esta entrada encontraran las sentencias de UPDATE, DELETE e INSERT.

Antes de continuar, quiero hacerles notar que en caso deban hacer una consulta muy complicada o simplemente no recuerden como se construye adecuadamente una sentencia SQL, pueden hacer usos del Query Builder que es el botón que aparece en la parte inferior derecha



Luego pondremos un nombre a los métodos que deseamos agregar y damos click en finalizar


Acabamos de crear un query, si se fijan lo hicimos para la opción de seleccionar, al cual le deje el nombre de FillBySelect pero igualmente deberemos crear 3 mas, uno para Eliminar, otro para Insertar y otro para Modificar, al final el datatable nos queda así


y ahora muestro el Form que utilizaremos


Ahora bien, para utilizar nuestro tableadapter debemos escribir esto en código
Dim clientes As New PruebaDSTableAdapters.empleadoTableAdapter

y luego definimos la query que deseamos utilizar así:
clientes.nombre del query

Como ven el formulario utiliza un BindingNavigator y tiene un DataGridView para navegar y mostrar TODOS los datos respectivamente y conforme se avance en el DataGridView se irán mostrando los datos en los textbox, cada textbox se llama de acuerdo al campo de la tabla que va mostrar.

Todo lo anterior lo hace la función Mostrar

Codigo en VB
Private Sub Mostrar()
        Dim Clientes As New PruebaDSTableAdapters.empleadoTableAdapter
        Dim bs As New BindingSource
        bs.DataSource = Clientes.GetData
        DataGridView1.DataSource = bs
        BindingNavigator1.BindingSource = bs
        TCodigo.DataBindings.Clear()
        TCodigo.DataBindings.Add(New Binding("text", bs, "codigo"))
        TNombres.DataBindings.Clear()
        TNombres.DataBindings.Add(New Binding("text", bs, "nombres"))
        TCargo.DataBindings.Clear()
        TCargo.DataBindings.Add(New Binding("text", bs, "cargo"))
        TJefe.DataBindings.Clear()
        TJefe.DataBindings.Add(New Binding("text", bs, "jefe"))
        TDepartamento.DataBindings.Clear()
        TDepartamento.DataBindings.Add(New Binding("text", bs, "departamento"))
    End Sub

Codigo en C#
private void Mostrar() {

PruebaDSTableAdapters.empleadoTableAdapter clientes= new PruebaDSTableAdapters.empleadoTableAdapter();
            BindingSource bs = new BindingSource();
            bs.DataSource = clientes.GetData();
            bindingNavigator1.BindingSource = bs;
            dataGridView1.DataSource = bs;
            TCodigo.DataBindings.Clear();
            TCodigo.DataBindings.Add(new Binding("text", bs, "codigo"));
            TNombres.DataBindings.Clear();
            TNombres.DataBindings.Add(new Binding("text", bs, "nombres"));
            TCargo.DataBindings.Clear();
            TCargo.DataBindings.Add(new Binding("text", bs, "cargo"));
            TJefe.DataBindings.Clear();
            TJefe.DataBindings.Add(new Binding("text", bs, "jefe"));
            TDepartamento.DataBindings.Clear();
            TDepartamento.DataBindings.Add(new Binding("text", bs, "departamento"));
        }


Explicare el código del evento click para el botón consultar: busca el codigo en especifico que se escriba en el textbox llamado Tcodigo si lo encuentra lo muestra solo en el DataGridView pues por un dato no se va activa el BindingNavigator.
En caso de no escribir nada en el textbox Tcodigo y dar click al botón consultar entonces listara todos los datos en el Datagridview, igualmente utilizara un BindingNavigator y mostrara los datos según se avance en los textbox, muestro la consulta y el código del evento click del botón Consultar:

SELECT        codigo, nombres, cargo, jefe, departamento
FROM            empleado
WHERE        (codigo = @codigo)

Codigo en VB
Private Sub BConsultar_Click(sender As System.Object, e As System.EventArgs) Handles BConsultar.Click
        Dim Clientes As New PruebaDSTableAdapters.empleadoTableAdapter
       
        If (Not (String.IsNullOrEmpty(TCodigo.Text))) Then
            Me.DataGridView1.DataSource = Clientes.GetDataBySelect(Me.TCodigo.Text)
        Else
            Mostrar()
        End If
    End Sub

Codigo en C#
private void BConsultar_Click(object sender, EventArgs e){

PruebaDSTableAdapters.empleadoTableAdapter clientes = new   PruebaDSTableAdapters.empleadoTableAdapter();

            if (string.IsNullOrEmpty(TCodigo.Text))
            {
                Mostrar();
            }
            else {
                this.dataGridView1.DataSource = clientes.GetDataBySelect(TCodigo.Text);
            }
         }

  • Ahora el código del evento click para el boton Eliminar, muestro la consulta SQL que agregamos al Tableadapter y el código para el evento click del boton Eliminar:
DELETE FROM [dbo].[empleado]
WHERE ([codigo] = @codigo)

Codigo en VB
Private Sub BEliminar_Click(sender As System.Object, e As System.EventArgs) Handles BEliminar.Click

Dim clientes As New PruebaDSTableAdapters.empleadoTableAdapter
clientes.Eliminar(TCodigo.Text)
Mostrar()
End Sub

Codigo en C#
private void BEliminar_Click(object sender, EventArgs e){

PruebaDSTableAdapters.empleadoTableAdapter clientes= new PruebaDSTableAdapters.empleadoTableAdapter();
clientes.Eliminar(TCodigo.Text);
Mostrar();
        }

  • Para agregar datos tenemos la siguiente consulta y código para el evento click del botón Insertar:
INSERT INTO [dbo].[empleado] ([codigo], [nombres], [cargo], [jefe], [departamento]) 
VALUES (@codigo, @nombres, @cargo, @jefe, @departamento);

Codigo en VB
Private Sub BInsertar_Click(sender As System.Object, e As System.EventArgs) Handles BInsertar.Click
  
Dim clientes As New PruebaDSTableAdapters.empleadoTableAdapter
clientes.Insertar(TCodigo.Text, TNombres.Text, TCargo.Text, TJefe.Text, TDepartamento.Text)
Mostrar()
End Sub

Codigo en C#
private void BInsertar_Click(object sender, EventArgs e){
    
PruebaDSTableAdapters.empleadoTableAdapter clientes = new PruebaDSTableAdapters.empleadoTableAdapter();
clientes.Insertar(TCodigo.Text, TNombres.Text, TCargo.Text, TJefe.Text, TDepartamento.Text);
Mostrar();
        }

  • Para modificar datos tenemos la siguiente consulta y código para el evento click del botón Actualizar:
UPDATE       empleado
SET                nombres = @nombres, cargo = @cargo, jefe = @jefe, departamento = @departamento
WHERE        (codigo = @codigo); 

Codigo en VB
Private Sub BActualizar_Click(sender As System.Object, e As System.EventArgs) Handles BActualizar.Click

Dim clientes As New PruebaDSTableAdapters.empleadoTableAdapter
clientes.Modificar(TNombres.Text, TCargo.Text, TJefe.Text, TDepartamento.Text, TCodigo.Text)
Mostrar()
End Sub


Codigo en C#
private void BActualizar_Click(object sender, EventArgs e){

PruebaDSTableAdapters.empleadoTableAdapter clientes = new PruebaDSTableAdapters.empleadoTableAdapter();
clientes.Modificar(TNombres.Text, TCargo.Text, TJefe.Text, TDepartamento.Text, TCodigo.Text);
Mostrar();
        }


eso es todo :)



viernes, diciembre 21, 2012