Horario

miércoles, 9 de septiembre de 2009

Práctica 2 en Optimización de sistemas de información

Se utilizará C# y MySQL

Ahora utilizaremos un DataGridView para visualizar los datos de manera de listado, y así podemos manejar más registros a la vez, aunque sigue siendo una forma no óptima



Librería: Hay que bajar el proyecto, porque tenemos que utilizar la librería "MySQLDriverCS.dll" para conectarnos a MySQL, ésta librería la tenemos que poner en la carpeta bin/debug



Tablas: Tenemos que crear la tabla con sus respectivas columnas para que todo funcione bien



Dudas: Si se tiene alguna duda, se actualizará el blog para que sea más descriptivo, si bajan el código podrán ver que está un poco documentado



Código

// Variables globales
MySQLConnection con;
MySQLCommand query;
MySQLDataReader data;

// Función para cargar los datos
private void CargarDatos()
{
    dgvDatos.Rows.Clear();
    query = new MySQLCommand("select * from clientes", con);
    data = query.ExecuteReaderEx();
    while (data.Read())
    {
        // Añadimos una línea nueva en nuestro DGV con la información de la
        // columna 0, 1 y 2 de nuestra tabla
        dgvDatos.Rows.Add(data.GetString(0), data.GetString(1), data.GetString(2));
    }
}

// Función load de la forma
private void Practica2_Load(object sender, EventArgs e)
{
    con = new MySQLConnection(new MySQLConnectionString("test", "root", "mientras").AsString);
    try
    {
        con.Open();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
        return;
    }

    CargarDatos();
}

// Evento cuando hacemos click en el datagridview
private void dgvDatos_RowEnter(object sender, DataGridViewCellEventArgs e)
{
    // Llenamos la información de la linea seleccionada en las
    // respectivas cajitas de texto
    txtNo.Text = dgvDatos.Rows[e.RowIndex].Cells[0].Value.ToString();
    txtCliente.Text = dgvDatos.Rows[e.RowIndex].Cells[1].Value.ToString();
    txtDomicilio.Text = dgvDatos.Rows[e.RowIndex].Cells[2].Value.ToString();
}

// Botones de acción
private void btnModificar_Click(object sender, EventArgs e)
{
    query = new MySQLCommand("update clientes set cli=" + txtNo.Text
        + ", clientes=\"" + txtCliente.Text
        + "\", dom=\"" + txtDomicilio.Text
        + "\" where cli=" + dgvDatos.Rows[dgvDatos.SelectedRows[0].Index].Cells[0].Value.ToString(), con);
    query.ExecuteNonQuery();
    CargarDatos();
}

private void btnAgregar_Click(object sender, EventArgs e)
{
    query = new MySQLCommand("insert into clientes values(\"" + txtNo.Text
         + "\",\"" + txtCliente.Text + "\",\"" + txtDomicilio.Text
         + "\")", con);
    query.ExecuteNonQuery();
    CargarDatos();
}

private void btnEliminar_Click(object sender, EventArgs e)
{
    query = new MySQLCommand("delete from clientes where cli="
        + dgvDatos.Rows[dgvDatos.SelectedRows[0].Index].Cells[0].Value.ToString(), con);
    query.ExecuteNonQuery();
    CargarDatos(); 
}

Descargar: Haz click aquí para descargarla
https://dl.getdropbox.com/u/1955604/Practica2.zip

martes, 8 de septiembre de 2009

Práctica 1 en Optimización de sistemas de información

Utilizaremos C# y Base de datos Access

En esta forma podemos agregar, modificar y eliminar un registro de una base de datos access. También podemos navegar por medio de cuatro botones, principio, atrás, adelante y final

El propósito de la práctica es ver lo incómodo es buscar un registro cuando ya contamos con muchos en nuestra base de datos
Como podemos ver, tenemos un texto para manejar el número del cliente, el nombre del cliente y su dirección

Pasos a seguir
  • Form Load: Este es un evento de la forma, y el código programado en el evento se ejecutará cuando la forma se haya terminado de cargar, o sea, de aparecer en la pantalla. Le damos doble click a la forma, en la parte gris en el fondo y escribimos lo siguiente
private void Practica1_Load(object sender, EventArgs e)
{
    coneccion = new System.Data.OleDb.OleDbConnection(
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=datos.mdb");

    // Código para crear la tabla e ingresar los rows
    /*
    System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
    myCommand.Connection = coneccion;
    myCommand.CommandText = "create table clientes(cli int, clientes string, dom string)";
    coneccion.Open();
    myCommand.ExecuteNonQuery();
    myCommand.CommandText = "insert into clientes values (1, \"Juan\",\"Avenida 3\")";
    myCommand.ExecuteNonQuery();
    myCommand.CommandText = "insert into clientes values (2,\"Ana\",\"Calle 7\")";
    myCommand.ExecuteNonQuery();
    myCommand.CommandText = "insert into clientes values (3,\"Maria\",\"Avenida 12\")";
    myCommand.ExecuteNonQuery();
    myCommand.Connection.Close();
    */

    CargarDatos(0);
}
Nos podemos dar cuenta que tenemos un código extra para crear tablas e ingresar datos a la tabla, estos los tenemos que descomentar la primera vez que corremos el programa, para descomentar solo borra el /* y el */

Para esto, debimos haber creado un archivo lllamado "datos.mdb" en el directorio "bin/Debug" de nuestro proyecto
  • Button Click: Es el evento al hacerle click a un botón. Para programarlo, basta con darle doble click a un botón, a continuación el código que deben poner en cada uno de los botones
private void btnAgregar_Click(object sender, EventArgs e)
{
    canal = new System.Data.OleDb.OleDbDataAdapter(
        "insert into clientes values(\"" + txtNo.Text
        + "\",\"" + txtCliente.Text + "\",\"" + txtDomicilio.Text
        + "\")", coneccion);
    tabla = new DataSet();
    canal.Fill(tabla, "mitabla");
    ren++;
    CargarDatos(ren);
}

private void btnModificar_Click(object sender, EventArgs e)
{
    canal = new System.Data.OleDb.OleDbDataAdapter(
        "update clientes set cli=" + txtNo.Text
        + ", clientes=\"" + txtCliente.Text
        + "\", dom=\"" + txtDomicilio.Text
        + "\" where cli="
        + tabla.Tables["mitabla"].Rows[ren][0].ToString(), coneccion);
    tabla = new DataSet();
    canal.Fill(tabla, "mitabla");
    CargarDatos(ren);
}

private void btnEliminar_Click(object sender, EventArgs e)
{
    canal = new System.Data.OleDb.OleDbDataAdapter(
        "delete from clientes where cli="
        + txtNo.Text, coneccion);
    tabla = new DataSet();
    canal.Fill(tabla, "mitabla");
    if (ren > 0) ren--;
    CargarDatos(ren);
}

private void btnSalir_Click(object sender, EventArgs e)
{
    this.Close();
}

Nota importante: Mis campos de texto se llaman txtNo, txtCliente y txtDomicilio, es probable que los tuyos se llamen textbox1, textbox2 y textbox3
  • Navegación: La navegación está hecha en base a botones, por lo tanto es igual que lo anterior
private void btnPrimero_Click(object sender, EventArgs e)
{
    ren = 0;
    CargarDatos(ren);
}

private void btnAtras_Click(object sender, EventArgs e)
{
    if (ren > 0)
        ren--;
    CargarDatos(ren);
}

private void btnAdelante_Click(object sender, EventArgs e)
{
    if (ren < tabla.Tables["mitabla"].Rows.Count - 1)
        ren++;
    CargarDatos(ren);
}

private void btnUltimo_Click(object sender, EventArgs e)
{
    ren = tabla.Tables["mitabla"].Rows.Count - 1;
    CargarDatos(ren);
}

Otra nota: Los botones también los nombré de diferente manera, puede que el código de la función del evento sea un poco distinto, es decir, en lugar de "btnUltimo_Click" podría decir "button1_Click"
  • Variables globales y CargarDatos: La función CargarDatos es creada por nosotros mismos y ésta va a ser ejecutada principalmente por los botones de navegación. Las variables globales van fuera de cualquier función, pero dentro de la clase
int ren;
System.Data.DataSet tabla;
System.Data.OleDb.OleDbDataAdapter canal;
System.Data.OleDb.OleDbConnection coneccion;

private void CargarDatos(int rego)
{
    canal = new System.Data.OleDb.OleDbDataAdapter("select * from clientes", coneccion);
    tabla = new DataSet();
    canal.Fill(tabla, "mitabla");
    ren = rego;
    txtNo.Text = tabla.Tables["mitabla"].Rows[ren][0].ToString();
    txtCliente.Text = tabla.Tables["mitabla"].Rows[ren][1].ToString();
    txtDomicilio.Text = tabla.Tables["mitabla"].Rows[ren][2].ToString();
}

Con esto podemos dar por terminada la práctica, a continuación el link para descargar la práctica
https://dl.getdropbox.com/u/1955604/Practica1.zip

domingo, 8 de febrero de 2009

Instalando Python 2.6.1 en Windows

1. Descarga
Haz click aquí para entrar a la página de descargas de Python, y da click donde dice "Python 2.6.1 Windows installer (Windows binary -- does not include source)".

Hay dos versiones de Python que se manejan actualmente, 3.0 y 2.6.1. Para fines de compatibilidad con los siguientes tutoriales y la mayoría de los módulos hechos en Python, instalaremos la versión 2.6.1.

No te sientas desactualizad@ por utilizar el 2.6.1 en lugar del 3.0. Se podría decir que Python 2 es mas popular que Python 3. Además, Python 2 y Python 3 son vistos como proyectos distintos en donde cada uno seguirá su propio camino.


2. Instalación
Python se instala como cualquier otro programa en windows. Te recomiendo dejar todas las opciones así como vienen especificadas por predeterminado.

3. Verificando
Abre una consola de comandos de windows, esto lo puedes hacer dando click en inicio y luego en ejecutar, en la pequeña ventana que aparece escribe cmd y da click en aceptar.
Una combinación de teclas para abrir la ventana de ejecutar es presionar la tecla de windows + r

Verificamos que se haya instalado Python correctamente escribiendo python y dando Enter.


4. Listo
Con esto damos por terminado el tutorial, si tienes algún problema, no dudes en comentarlo y con gusto haré lo posible por solucionar el problema.