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.