Buscar este blog

miércoles, 14 de mayo de 2014

Como guardar, Modificar y Eliminar Información en Access desde VB.Net Y Solucionar Un error que se nos aparece en la fecha.

El error consta que cuando ingresamos información desde visual Basic hacia Access se nos presenta un error que la fecha nos sale al contrario. Esto sucede porque visual Basic guarda las fechas como: Día, Mes y Año y Access la recibe como Mes, Día, Año.
En esta ocasión aremos un ejemplo de un formulario de pasaportes que guarde elimine y modifique información.
     1.      En primer lugar creamos una tabla es Access.

  
      2.      Luego procedemos ya a lo que es Visual Basic.
       3.      Creamos un nuevo proyecto, agregando un nuevo formulario




      4.      Agregamos un ErrorProvider para que nos muestre cuando hay un error.
      5.      Para poder agregar un OledbConnection hacemos lo siguiente:
      6.      Nos vamos al Cuadro de Herramientas, Damos clic derecho en Datos, y Elegimos la opción Elegir Elementos.



      7.      Luego damos clic en el Objeto agregado en este caso el OledbConnection, creamos la conexión. Nos vamos a las propiedades del OledbConnection y hacemos lo siguiente.
     
             8.      En ConnetionString es donde vamos a crear la conexión.
    
          9.      Luego esta ventana que se nos ha abierto la cambiaremos a:

      10.  Aquí le estamos diciendo a VB que crearemos una conexión de Access.
      11.  Aquí seleccionamos la ruta de nuestra base de datos.


      1.      Ya Hemos terminado todo sobre nuestro diseño del formulario pasamos a lo que es ya programar. Dentro del formulario Presionamos f7.
      2.      En primer Lugar Creamos la Cadena.


     3.      Tienen que modificar  E\Ejercicio 1yalisto\pasapor Y colocan la ruta de donde tienen su base de datos.
     4.      Luego pasaremos a lo que es la función Validar que nos sirve para que el usuario no deje ningún campo vacío.
     5.      Para declarar la función colocamos.
Private Function Validar() As Boolean
       End Function


1.      Para poder validar los campos de tipo texto Utilizamos el siguiente código.

If txtnombres.Text.Trim = String.Empty Then
            erp.SetError(txtnombres, "Escriba su nombre")
            txtnombres.Focus()
        End If
        erp.SetError(txtnombres, "")
2.      Para poder validar los campos de tipo texto Utilizamos el siguiente código.

If Val(txtduracion.Text.Trim) = 0 Then
erp.SetError(txtduracion, "Escriba cuanto son los años de duracion")
txtduracion.Focus()
End If
erp.SetError(txtduracion, "")

3.      Para nuestro ejemplo en la función validar colocaremos el siguiente código:


Private Function Validar() As Boolean
        'validaremos todos los campos de nuestro formulario
        If txtidentidad.Text.Trim = String.Empty Then
            erp.SetError(txtidentidad, "Escriba el numero de identidad")
            txtidentidad.Focus()
            Return False
        End If
        erp.SetError(txtidentidad, "")
        If txtnombres.Text.Trim = String.Empty Then
            erp.SetError(txtnombres, "Escriba su nombre")
            txtnombres.Focus()
        End If
        erp.SetError(txtnombres, "")
        If txtapellidos.Text.Trim = String.Empty Then
            erp.SetError(txtapellidos, "Escriba su apellido")
            txtapellidos.Focus()
        End If
        erp.SetError(txtapellidos, "")
        If txtciudad.Text.Trim = String.Empty Then
            erp.SetError(txtciudad, "Escriba el nombre de su ciudad")
            txtciudad.Focus()
        End If
        erp.SetError(txtciudad, "")
        If txtdepa.Text.Trim = String.Empty Then
            erp.SetError(txtdepa, "Escriba el nombre de su departamento")
            txtdepa.Focus()
        End If
        erp.SetError(txtdepa, "")
        If Val(txtduracion.Text.Trim) = 0 Then
            erp.SetError(txtduracion, "Escriba cuanto son los años de duracion")
            txtduracion.Focus()
        End If
        erp.SetError(txtduracion, "")
        Return True
    End Function.

4.      Ahora programaremos el Botón Nuevo. Damos doble clic en él.


5.       Escribimos este código en el botón Nuevo.

Private Sub btnnuevo_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles btnnuevo.Click
'Este codigo se utiliza para poder limpiar todos nuestro campos del formulario al momento de dar clic en el
txtidentidad.Clear()
txtnombres.Clear()
txtapellidos.Clear()
txtciudad.Clear()
txtdepa.Clear()
dtpFechaNac.Value = Now
txtduracion.Clear()
txtidentidad.ReadOnly = False

End Sub

6.      Luego pasamos a lo que es programar el LostFocus. Que nos sirve para que al momento de que queramos recuperar la información solo con ingresar el Número de Identidad nos jale todo el registro.
El LostFocus lo programamos en el texbox de la identidad.


Private Sub txtidentidad_LostFocus(ByVal sender As ObjectByVal e As System.EventArgsHandles txtidentidad.LostFocus
'Esta variable fecha la declararemos para poder solucionar el problema que se nos puede presentar al momento de guardar la fecha
Dim fecha As String
'verificamos si la propiedad identida se encuentra vacia
If txtidentidad.Text <> String.Empty Then
If txtidentidad.ReadOnly = False Then
'si txtidentidad,readonly esta en false jalaremos todos los campos por medio de la Identidad.
Dim cSQL As String = "select * from Pasaportes where Identidad='" & txtidentidad.Text.Trim & "'"
'creamos la conexion
Dim oConexion As New OleDb.OleDbConnection(Cadena)
'abrimos la conexion
oConexion.Open()
Dim Comando As New OleDb.OleDbCommand(cSQL, oConexion)
'declararemos un lector para que nos pueda jalar la informacion desde access a VB.
Dim Lector As OleDb.OleDbDataReader = Comando.ExecuteReader
'si el rector es igual a verdadero jalaremos los campos
If Lector.Read = True Then
txtidentidad.ReadOnly = True
'Jalamos el nombre
txtnombres.Text = Lector("Nombres")
'Jalamos el Apellido
txtapellidos.Text = Lector("Apellidos")
'Jalamos La fecha de nacimiento
dtpFechaNac.Value = Lector("FechaNac")
'empesaremos a utilizar la varible fecha que hemos declarado
'en primer lugar que tome el valor del Datetimepiker
fecha = dtpFechaNac.Value
'utilizamo la funcion Mid Para que nos devuelva la cadena de los caracteres y nos lo jale
fecha = (Mid(fecha, 1, 2) & "/" & Mid(fecha, 4, 2) & "/" & Mid(fecha, 7))
'esta linea es para que al momento de que Visual jale la informacion la reciva como Dia, Mes, Año ya que Visual haci trabaja con las fechas
fecha = dtpFechaNac.Value.Day & "/" & dtpFechaNac.Value.Month & "/" & dtpFechaNac.Value.Year
'Jalamos la ciudad
txtciudad.Text = Lector("Ciudad")
'Jalamos su departamento
txtdepa.Text = Lector("Departamento")
'Jalamos la duracion del pasaporte
txtduracion.Text = Lector("DUracion")
End If
End If
End If
End Sub


7.      Luego programaremos el Botón Guardar. Damos doble clic en él.


8.      Escribimos el Siguiente código en el Botón.

Private Sub btnguardar_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles btnguardar.Click
If Validar() = True Then
'esta variable es declarada para que al momento de que se guarde la informacion Visual se la mande a access como el la recive
'como ya sabemos que access la recive como Mes, Dia, Año
Dim fecha As String = dtpFechaNac.Value.Month & "/" & dtpFechaNac.Value.Day & "/" & dtpFechaNac.Value.Year
'la utilizaremos para las instrucciones sql que utilizaremos
Dim sql As String
'si txtidentidad es igual a falso eso quiere decir que el campo Identidad esta vacio en pocas palabras es un registro nuevo
If txtidentidad.ReadOnly = False Then
'si la condiccion es verdadera se ejecutara un Insert, que nos sirve para poder ingresar informacion
sql = "Insert into Pasaportes (Identidad,Nombres,Apellidos,FechaNac,Ciudad,Departamento,Duracion) values ('" & txtidentidad.Text.Trim & "','" & txtnombres.Text.Trim & _
"','" & txtapellidos.Text.Trim & "',#" & fecha & "#,'" & txtciudad.Text.Trim & "','" & txtdepa.Text.Trim & "'," & txtduracion.Text.Trim & ")"
'para poder verificar que nuestra instruccion este correcta
MsgBox(sql)
Else
'y si no es verdadera quiere decir que ya existe un ragistro
'utilizaremos un Update que nos sirve para poder modificar.
sql = "Update Pasaportes set Nombres='" & txtnombres.Text.Trim & "',Apellidos='" & txtapellidos.Text.Trim & "',FechaNac=#" & fecha & "#,Ciudad='" & txtciudad.Text.Trim & _
"',Departamento='" & txtdepa.Text.Trim & "',Duracion=" & txtduracion.Text.Trim & " Where Identidad='" & txtidentidad.Text.Trim & "'"
End If
Dim oConexion As New OleDb.OleDbConnection(Cadena)
'abrimos la conexion
oConexion.Open()
Dim cmb As New OleDb.OleDbCommand(sql, oConexion)
cmb.ExecuteNonQuery()
'dejamos un mensaje para comprobar si se nos ha guardado la informacion
MsgBox("La informacion fue almacenada"MsgBoxStyle.OkOnly, "Guardar")
'cerramos la conexion
oConexion.Close()
'llamamos al boton nuevo para que despues de que la informacion se nos guarde se limpien todos los campos
Call btnnuevo_Click(NothingNothing)
End If
End Sub

9.      Ahora programaremos el botón Eliminar.



10.  Escribimos el siguiente código en el botón eliminar.

'la utilizaremos para las intruciones sql que necesitamos
Dim Cql As String
If Validar() = True Then
'si la funcion validar es igual a verdadera se ejecutara la intruccion Delete.
Cql = "Delete from Pasaportes where Identidad='" & txtidentidad.Text.Trim & "'"
Dim Oconexion As New OleDb.OleDbConnection(Cadena)
'abrimos la conexion
Oconexion.Open()
Dim Comando As New OleDb.OleDbCommand(Cql, Oconexion)
Comando.ExecuteNonQuery()
'le dejamos un mensaje diciendole que se ha eliminado la informacion
MsgBox("La informacion fue eliminada"MsgBoxStyle.OkOnly, "Eliminar")
'cerramos la conexion
Oconexion.Close()
'llamamos al boton nuevo para que nos limpie todos los campos.
Call btnnuevo_Click(NothingNothing)
End If
End Sub

11.  Programaremos el Botón salir.


12.  Colocamos el código:

Private Sub btnsalir_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles btnsalir.Click
Close()
End Sub

13.  Ahora aremos que nos muestre cuantos Días, Meses y Años tiene.


14.  Pero esto solo nos aparecerá en el formulario en la base de datos no nos aparecerá porque no tenemos ningún campo con ese nombre.

15.  Lo programaremos en la FechaNac ya que todo depende de la fecha de nacimiento.


16.  El código que utilizaremos es:

Private Sub dtpFechaNac_ValueChanged(ByVal sender As System.ObjectByVal e As System.EventArgsHandles dtpFechaNac.ValueChanged
'declaramos la variable para que tome la fecha actual para poder calcular los años
Dim FechaActual As Date = Now, FechaNac As Date = dtpFechaNac.Value
'declaramos unas variables que utilizaremos para los agnios meses y dias que iniciaran en 0.
Dim agniosvividos As Integer = 0, mesesvividos As Integer = 0, diasvividos As Integer = 0
'Un conteo con el siglo while y comparamos si la fecha de nacimiento es menor o igual que la fecha actual
While FechaNac <= FechaActual
'si es verdadera los dias vividos se le sumara uno hasta que la fecha de nacimiento sea igual a la fecha actual
diasvividos += 1
'este codigo es para que los dias vividos se conviertan a meses
Dim Diasdelmes As Integer = System.DateTime.DaysInMonth(FechaNac.Year, FechaNac.Month)
'condicion para ver si los dias vividos son mayores que los dias del mes actual
If diasvividos >= Diasdelmes Then
'si es verdadera los meses incrementara 1
mesesvividos += 1
'aqui los dias vividos le restaremos los dias del mes
diasvividos = diasvividos - Diasdelmes
''para poder calcular los años
If mesesvividos = 12 Then                    'cuando los meses llegen a 12 los años incrementaran 1 y los meses seran igual a 0                    agniosvividos += 1                    mesesvividos = 0                End If            End If            FechaNac = FechaNac.AddDays(1)            'fin del siclo while        End While        'visualizamos la informacion en el texbox de la edad.        txtedad.Text = diasvividos & " Dias con " & mesesvividos & " meses " & agniosvividos & " años"
End Sub



Esperamos que les ayude en  algo.





sábado, 5 de abril de 2014

ADO.NET C#


Es un conjunto de componentes del software que pueden ser usados por los programadores para acceder a datos y a servicios de datos. Es comúnmente usado por los programadores para acceder y para modificar los datos almacenados en un Sistema Gestor de Bases de Datos Relacionales, aunque también puede ser usado para acceder a datos en fuentes no relacionales.
ADO.NET separa de acceso a datos de manipulación de datos en componentes discretos que se pueden utilizar por separado o en tándem. ADO.NET incluye. NET Framework para conectarse a una base de datos, ejecutar comandos y recuperar, guardar, modificar y eliminar resultados.



Objetos de ADO.NET

El objeto System.Data.OleDb.OleDbConnection
Para interactuar con una base de datos, debe tener una conexión a la misma. La conexión ayuda a identificar el servidor de base de datos, el nombre de base de datos, nombre de usuario, contraseña y otros parámetros necesarios para la conexión a la base de datos. Un objeto de conexión es utilizado por los objetos de comando para que sepan qué base de datos para ejecutar el comando.
La instancia de OleDbConnection C# lleva cadena de conexión como argumento y pasar el valor a la declaración Constructor. Una instancia de la clase OleDbConnection C # con el apoyo del proveedor de datos OLEDB.
  connetionString = "Provider = Microsoft.Jet.OLEDB.4.0;
   Origen de datos = yourdatabasename.mdb; ";
  cnn = new OleDbConnection (connetionString);
Cuando se establece la conexión entre C # aplicación y el origen de datos especificado, los comandos SQL se ejecutará con la ayuda del objeto de conexión y recuperar o manipular los datos en la base de datos. Una vez que las actividades de base de datos es a través de conexión debe ser cerrada y la liberación de los recursos de origen de datos.
  cnn.Close (); 
El método Close () en la clase OleDbConnection se utiliza para cerrar la conexión con la base. El método Close deshace cualquier transacción pendiente y libera la conexión de la base de datos conectada por el proveedor de datos OLEDB.



El objeto System.Data.OleDb.OleDbCommand
El proceso de interactuar con una base de datos significa que debe especificar las acciones que desea que se produzca. Esto se hace con un objeto de comando. Se utiliza un objeto de comando para enviar instrucciones SQL a la base de datos. Un objeto de comando utiliza un objeto de conexión de averiguar qué base de datos para comunicarse con. Puede utilizar un objeto de comando solo, para ejecutar un comando directamente, o asignar una referencia a un objeto de comando a un SqlDataAdapter, que posee un conjunto de comandos que funcionan en un grupo de datos tal como se describe a continuación.
El objeto de comando en ADO.NET ejecuta sentencias SQL y procedimientos almacenados en el origen de datos especificado en la C # objeto de conexión. El objeto de comando requiere una instancia de un objeto de conexión C # para la ejecución de las sentencias SQL.
Con el fin de recuperar un conjunto de resultados o ejecutar una instrucción SQL en un origen de datos, primero debe crear un objeto de conexión y abrir una conexión con el origen de datos especificado en la cadena de conexión. El siguiente paso es asignar la conexión abierta a la propiedad de conexión del objeto de comando. Entonces el objeto de comando se puede ejecutar las sentencias de SQL. Después de la ejecución de la sentencia de SQL, el objeto de comando devolverá un conjunto de resultados. Podemos recuperar el conjunto de resultados utilizando un lector de datos.



El objeto Comando también Incluye 2 objetos dentro de él los cuales son:
ExecuteNonQuery
El ExecuteNonQuery () es uno de los método más utilizado en OleDbCommand objetos y se utiliza para ejecutar sentencias que no devuelve resultado conjuntos. El ExecuteNonQuery () realiza las tareas de definición de datos, así como las tareas de manipulación de datos también.
  cmd.ExecuteNonQuery (); 
Las tareas de definición de datos como la creación de procedimientos almacenados, vistas, etc. realizan por el ExecuteNonQuery (). También las tareas de manipulación de datos, como insertar, actualizar, eliminar, etc. realizan por el ExecuteNonQuery ().
ExecuteReader
ExecuteReader () en el objeto OleDbCommand envía los comandos a OleDbConnection objeto y rellenar un objeto OleDbDataReader basado en las sentencias SQL y procedimientos almacenados pasaron por el objeto OleDbCommand.


El objeto System.Data.OleDb.DataReader
Objeto DataReader en ADO.NET es un avance de sólo, la recuperación basada en secuencias de sólo lectura de los resultados de la consulta de las fuentes de datos, que no se actualizan los datos. El DataReader no se puede crear directamente desde el código, pueden creada únicamente llamando al método ExecuteReader de un objeto de comando.


  DataReader.Read (); 

OleDbDataReader objetos proporciona una orientada a la conexión de acceso a datos para los orígenes de datos OLEDB través de aplicaciones de C #. ExecuteReader () en el objeto OleDbCommand envía los comandos a OleDbConnection objeto y rellenar un objeto OleDbDataReader basado en las sentencias SQL y procedimientos almacenados pasaron por el objeto OleDbCommand.
  OleDbDataReader oledbReader = oledbCmd.ExecuteReader (); 
Cuando el método ExecuteReader en OleDbCommand objeto ejecutar, será una instancia de un objeto OleDb.OleDbDataReader. Cuando empezamos a leer de un OleDbDataReader siempre debe estar abierto y posicionado antes del primer registro. El método Read () en el OleDbDataReader se utiliza para leer las filas de la OleDbDataReader y siempre se mueve hacia adelante a una nueva fila válida, si existe cualquier fila.


Ejemplos de cómo Insertar información en C#.

Haremos un ejemplo que permita el Ingreso de información.

La instrucción SQL que utilizaremos es:

Insert Into Nombre_de_la_Tabla (Campo1,Campo2,Campo3) values (Valor1,Valor2,Valor3)

Ejemplo en C#

    1.      En primer lugar diseñamos un formulario y agregamos un botón, (el botón lo hemos diseñado para que al momento de ejecutar el programa solo daremos clic en el y se ejecutara la instrucción SQL que hemos hecho.)



     2.      Luego agregamos los siguientes objetos. Dando clic en el cuadro de herramientas, luego damos clic derecho en Datos y luego damos clic en elegir elementos y se nos aparecerá una ventana donde seleccionaremos los objetos que vamos a utilizar en este caso seleccionamos los siguientes objetos.
 



      3.      Luego damos clic en el objeto ya agregado en este caso en oledbconnetion y creamos la conexión.
    
















  4.      Luego de haber dado clic en cambiar se nos abrirá otra ventana y seleccionaremos.

      5.      Luego en Examinar elegimos donde tenemos la base de datos.

      6.      Luego damos doble Clic en el botón que agregamos al formulario y escribimos el siguiente código.

// aqui programaremos lo del boton que utilizaremos//
        private void button1_Click(object sender, EventArgs e)
        {
            //En la cadena escribimos la direccion de la unidad donde tenemos la base de datos//
            string Cadena = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"G:\\Base de Datos III Tecnico\\Base de datos Proyecto.accdb\"";
            System.Data.OleDb.OleDbConnection Conexion = new System.Data.OleDb.OleDbConnection(Cadena);
            //Aqui se abre la conexion//
            Conexion.Open();
            MessageBox.Show("Conexion abierta");
            //Luego escribimos La intruccion sql que deceamos escribir en este caso es un Insert//
            string cSQL = "Insert into Inscripciones(RNE, Nombres, Apellidos) Values (\"785214\",\"Bavaros\", \"Grupo 3\")";
            System.Data.OleDb.OleDbCommand Comando = new System.Data.OleDb.OleDbCommand(cSQL, Conexion);
            Comando.ExecuteReader();
            // Cierre de la conexion//
            Conexion.Close();
        }

8. Con todos los códigos que C# incluye nos tiene que quedar así:



9. Luego lo ejecutamos y damos clic en el Botón que colocamos en el formulario y nos tendrá que aparecer este Mensaje que es el que le dejamos en el MessageBox. Y si no es porque tenemos mala la conexión.