Mostrando entradas con la etiqueta Programación orientada a objetos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programación orientada a objetos. Mostrar todas las entradas

viernes, 19 de octubre de 2012

Uso básico Datagridview (DataSet y Oracle)

A petición de un lector, facilito el código para la conexión de un proyecto vb.Net con el SGBD Oracle

De nuevo, lo haré de dos formas
  • Asignando a la propiedad de la tabla source el dataset
  • Recorriendo el dataset y agregando los datos a la tabla
Los pasos son:
  1. Crear una base de datos en Oracle llamada "DBEJEMPLO"
  2. Crear una tabla llama "DEPARTAMENTOS" con los campos
    • departamento
    • descripción
CREATE TABLE "DEPARTAMETOS"
( "DEPARTAMETO" NUMBER(4,0),
"DESCRIPCION" CHAR(100) NOT NULL ENABLE,
CONSTRAINT "DEPARTAMETOS_PK" PRIMARY KEY ("DEPARTAMETO") ENABLE
)


3. Crear un proyecto en Visual Studio
4. Agregar 2 datagridview al formulario desde la barra de herramientas.
5. Ir a proyecto y agregar una referencia llamada "Oracle.DataAccess"

6. Crear una clase llama "CONEXION" y escribir el siguiente código


Imports Oracle.DataAccess.Client

Public Class conexion
   
    Private OCommand As New OracleCommand()
    Dim OConnString As String = "DATA SOURCE=127.0.0.1;PASSWORD=Micontraseña;USER ID=Miusuario"
    Public oConexion As OracleConnection = New OracleConnection(OConnString)
    Dim oAdapter As OracleDataAdapter
    Public Dataset As DataSet = New DataSet()

    Private Function CargarDataset(ByVal OString As String, ByVal tabla As String) As DataSet
        Try
     oAdapter = New OracleDataAdapter(OString, oConexion)
     Dim oCreadorDeComandos As OracleCommandBuilder = New OracleCommandBuilder(oAdapter)
     Dataset.Clear()
     oAdapter.Fill(Dataset, tabla)
     oConexion.Close()
     Return Dataset
        Catch ex As Exception
     Return Nothing
     MessageBox.Show("No se pudo completar la operación, intente de verificar la conexión a la base de datos.", "Fallo conexión a la base de datos", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
     oConexion.Close()
        End Try
    End Function


    Public Sub Cargargrid(ByVal formulario As String, ByRef dtg As DataGridView)
        Try
     Dim tabla As String = "departamentos"
     Dim OString As String = "select a.id_departamento as Código, a.descripcion as Departamento from  " + tabla + " a"
     Dim ds As DataSet = CargarDataset(OString, tabla)

     If ds Is Nothing Then
         Exit Sub
     End If

     Select Case formulario
         Case 1
             CargarForma1(ds, dtg, tabla)
         Case 2
             CargarForma2(ds, dtg, tabla)
         Case Else
             Exit Sub
     End Select
        Catch ex As Exception
     MessageBox.Show(Err.Description)
        End Try
    End Sub


    Private Sub CargarForma1(ByVal ds As DataSet, ByRef dtg As DataGridView, ByVal tabla As String)
        Try
     Dim n As Integer ' variables para el for
     Dim fila As DataGridViewRow ' representa una fila del datagridview
     ' ciclo para limpiar el datagrid de cualquier dato y evitar que se repitan
     If dtg.Rows.Count > 0 Then
         For n = dtg.Rows.Count - 2 To 0 Step -1
             fila = dtg.Rows(n)
             dtg.Rows.Remove(fila) ' Eliminamos la fila de la colección
         Next
     End If


     dtg.DataSource = Nothing ' limpiar el datasourse
     dtg.Refresh() ' actualizar
     dtg.DataSource = ds ' asignar en la memoria la tabla
     dtg.DataMember = tabla ' asignar la tabla escogida
        Catch ex As Exception
     MessageBox.Show(Err.Description)
        End Try
    End Sub


    Private Sub CargarForma2(ByVal ds As DataSet, ByRef dtg As DataGridView, ByVal tabla As String)
        Try
     If dtg.Rows.Count > 0 Then
      dtg.Rows.Clear() 'limpiar el datagridview
     End If
     Dim filas As Integer = ds.Tables(tabla).Rows.Count - 1 ' verificamos
     If filas < 0 Then
         Exit Sub
     End If
     Dim Codigo As String
     Dim descripcion As String
     For i As Integer = 0 To filas ' recorrer las filas del dataset cargado
         Codigo = ds.Tables(tabla).Rows(i)(0)
         descripcion = ds.Tables(tabla).Rows(i)(1)
         dtg.Rows.Add(Codigo, descripcion)
     Next
        Catch ex As Exception
     MessageBox.Show(Err.Description, "Fallo conexión a la base de datos", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

End Class


7. En el evento load del formulario

  Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim s As New conexion
        s.Cargargrid(1, DataGridView1)
        s.Cargargrid(2, DataGridView1)
    End Sub

8. Listo a ejecutarlo


El proyecto esta disponible   AQUI

Espero que les sea de gran utilidad...!!!  

sábado, 13 de octubre de 2012

Windows Mobile con C# y datadrid

En esta ocasión me interesa compartirles en lo que estoy trabajando ahorita con aplicaciones móviles para pocket PC.

En este caso utilizaremos;
  • Lenguaje de programación C# o C sharp.
  • Programación orientada a objetos. :)
Los requerimientos son:
Una vez instalados todos los requerimientos procedemos a seguir los pasos siguientes:
  • Paso 1. Crear nuevo proyecto "Smart Device Project"
  • Paso 2 . Elegir la plataforma "Windwos Mobile 5.0 Pocket PC SDK" con "Device Application"

al click a "OK"  se cargará el proyecto....



  • Paso 3. Crear una base de datos llamada "Inventario" y una tabla llamada "artículos"
Vamos al proyecto agregamos un nuevo item y en DATA seleccionamos "database file", al dar agregar aparece una ventana dar click en "cancelar" no es necesario crear un data set.

Nota: en lo personal los data set creados en   diseño no me gustan, prefiero hacerlos manuales...

Creamos la tabla y posteriormente para efectos de muestra la llenamos con datos...



  • Paso 4. Agregar un datagrid

Nota: en caso de enlazar la aplicación a una base de datos normal deben agregar la referencia "System.Data.SqlClient", en este ejemplo se necesita la referencia  "System.Data.SqlServerCe" debido a que es una base de datos compacta incluida en el proyecto.

  • Paso 5. Crear una clase llamada "ConnectClass" 

Primero tenemos que agregar...


using System;
using System.Data;
using System.Data.SqlServerCe;
using System.Windows.Forms;


En esa función de la clase se añade código para establecer la conexión con la base de datos.

public ConnectClass()
{
try
String path;/*Variable para la ruta de la BD*/

path = "Data Source=" + System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\inventario.sdf";

SqlCeCon = new SqlCeConnection(path);/*asignar a la conexión la ruta*/

SqlCeCon.Open();}/*abrir conexión para  verificar */

catch (SqlCeException e)
MessageBox.Show("Error de conexión , error:"+ e.Message);}/*Mensaje en caso  de falla de conexión */
finally
{SqlCeCon.Close();}}/*Cerrar la conexión*/



Esta función devuelve un dataset y tiene como parámetros de entrada el comando SQL y el nombre de la tabla.

public DataSet ExecuteDataset(string SQL, string table)
        {
      try
            {
 // Abrimos la conexión 

            if (SqlCeCon.State==ConnectionState.Closed){
              SqlCeCon.Open();
            }

// Abrimos la conexión 

            DataSet ds = new DataSet(table); 
            SqlCeDataAdapter   Sqldapter =  new   SqlCeDataAdapter(SQL,SqlCeCon);          

// asigna un adaptador con el comando SQL y la conexión

            Sqldapter.FillSchema(ds, SchemaType.Source, table);
           
            Sqldapter.Fill(ds, table); // load data
         
            return ds; //return dataset with data
            }
            catch (SqlCeException e)
            {
                MessageBox.Show(e.Message);
                return null;
            }
            finally
            {
                SqlCeCon.Close();
            }
        }

y listo esa es la clase...Sencilla...
  • Paso 7. Agregar código en el formulario, específicamente en el evento Load
private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
 //se instancia la clase
InventoryMov.ConnectClass objRegisters = new InventoryMov.ConnectClass();

DataSet ds = new DataSet(); // dataset para cargar los datos

ds = objRegisters.ExecuteDataset("SELECT * from articulos", "articulos");

dataGrid1.DataSource = null;

dataGrid1.DataSource = ds.Tables[0]; //asignamos el dataset al datagrid
              
            }
            catch (Exception A)
            {
                MessageBox.Show(A.Message);
                dataGrid1.DataSource = null;
            }
             
        }

  • Paso 8. Correr la aplicación, pero antes debemos hacer algo importante, conectar un dispositivo, en este caso usaremos un emulador para ello vamos a   "tools" y seleccionamos "Connect to device", seleccionamos el emulador y dar click a "conectar" 

Damos click en "close"  , ejecutamos nuestra aplicación y esperamos....

  • Paso 9. Listo.



Espero que les sea de mucha utilidad!!! 

El proyecto se encuentra disponible en http://sdrv.ms/W5PDdI

miércoles, 11 de abril de 2012

Ejemplos de recursividad VB.NET


Bueno, estos ejemplos de código muy básicos son en VB.NET, la recursividad es un tema bastante importante en la programación, por lo que todo ingeniero debe conocer o al menos entender de que se trata, por eso quise hacer estos pequeños ejemplos simples para entender como funciona. Básicamente lo que hice fue crear una clase llamada recursividad y algunas funciones con parámetros por valor y cree un objeto en los formularios y los mande a llamar, pero eso se los dejo a ustedes yo solo voy a mencionar las funciones.

Primero que todo la recursividad es la capacidad que tienen algunos lenguajes de programación que permite a las funciones o procesos llamarse así mismos. 

El común de todos los ejemplos es el factorial de un número, recordemos que desde nuestra época en el colegio nos enseñaron que el factorial, por ejemplo, de 5! era 5*4*3*2*1. Si vemos es la multiplicación de  números secuenciales uno menor que el anterior. 


  • FACTORIAL UN NÚMERO

Public Function factorial(ByVal numero As Integer)
        If numero = 0 Then
            Return 1
        Else
            Return (numero * (factorial(numero - 1)))
        End If
    End Function

  • SUMA DE UN NÚMERO

 Public Function suma(ByVal numero As Integer)
        If numero = 0 Then
            Return 0
        Else
            Return (numero + suma(numero - 1))
        End If
    End Function



  • EXPONENTE 

Public Function exponente(ByVal num As Integer, ByVal exp As Integer)
        Dim resultado As Integer
        If exp = 0 Then
            resultado = 1
        Else
            resultado = (num * exponente(num, exp - 1))
        End If
        Return resultado
    End Function

  • MÁXIMO COMÚN DIVISOR

    Public Function MaxCD(ByVal a As Integer, ByVal b As Integer) 
        If b = 0 Then
            Return a
        ElseIf a = 0 Then
            Return b
        ElseIf a >= b Then
            Return MaxCD(a - b, b)
        Else
            Return MaxCD(a, b - a)
        End If
    End Function

  • SUMA DE VALORES DE UN VECTOR

    Public Function sumavector(ByVal v() As Integer, ByVal i As Integer)
        If i = 0 Then
            Return 0
        Else
            Return sumavector(v, i - 1) + v(i)
        End If
    End Function