domingo, 25 de septiembre de 2016

Crud 4 Capas VB.NET y MYSQL

En esta ocasion elaboraremos un proyecto en VB.NET con el modelo 4 capas.
Deberán crear una solución, con 4 proyectos uno para cada capa(cliente,datos,entidad y negocio) y agregar las referencias correspondientes para poder utilizarlas.
Referencias:
Capa cliente->con capa negocio y entidad
Capa Negocio-> con Capa datos y entidad
Capa Datos-> con capa entidad
Capa Entidad-> Esta no necesita de referencias, pues es la respresentacion de los campos de la tabla.

Adicionalmente se creará una clase "coneccion" para hacer uso de  mysql.




Esta es la tabla a utlizar =)


A continuación, dejaré el código =) espero les sirva
Codigo del Formulario

Imports Capa_Entidad
Imports Capa_Negocio

Public Class Form1
    Private id_persona As Integer = 0
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        limpiar_todo()
    End Sub
    Private Sub carga_dgv()
        Try
            Dim dt As New DataTable
            Dim per As New NPersona
            dt = per.carga_listado_clientes()
            If dt.Rows.Count <> 0 Then
                Me.dgv_personas.DataSource = dt
                Me.dgv_personas.Columns(0).Visible = False
            Else
                MessageBox.Show("No hay datos en la bd", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Información", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
    Private Sub limpiar_todo()
        Me.dgv_personas.DataSource = ""
        Me.txt_apellidos.Text = ""
        Me.txt_nombres.Text = ""
        Me.txt_cedula.Text = ""
        Me.txt_celular.Text = ""
        Me.txt_email.Text = ""
        Me.cmb_sexo.Text = ""
        carga_dgv()
        Me.itemeditar.Enabled = False
        Me.itemeliminar.Enabled = False
        Me.itemguardar.Enabled = True
        id_persona = 0
    End Sub
    Private Sub dgv_personas_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgv_personas.CellMouseClick
        Dim fila As Integer = e.RowIndex
        If fila >= 0 Then
            id_persona = Me.dgv_personas.Rows(fila).Cells(0).Value
            Me.txt_cedula.Text = Me.dgv_personas.Rows(fila).Cells(1).Value
            Me.txt_nombres.Text = Me.dgv_personas.Rows(fila).Cells(2).Value
            Me.txt_apellidos.Text = Me.dgv_personas.Rows(fila).Cells(3).Value
            Me.txt_email.Text = Me.dgv_personas.Rows(fila).Cells(4).Value
            Me.txt_celular.Text = Me.dgv_personas.Rows(fila).Cells(5).Value
            Me.cmb_sexo.Text = Me.dgv_personas.Rows(fila).Cells(6).Value
            Me.itemguardar.Enabled = False
            Me.itemeditar.Enabled = True
            Me.itemeliminar.Enabled = True
        End If
    End Sub

    Private Sub itemlimpiar_Click(sender As Object, e As EventArgs) Handles itemlimpiar.Click
        limpiar_todo()
    End Sub

    Private Sub itemguardar_Click(sender As Object, e As EventArgs) Handles itemguardar.Click
        Try
            Dim per As New Persona
            per.Id = Nothing
            per.Apellido = Me.txt_apellidos.Text
            per.Nombre = Me.txt_nombres.Text
            per.Cedula = Me.txt_cedula.Text
            per.Celular = Me.txt_celular.Text
            per.Email = Me.txt_email.Text
            per.Sexo = Me.cmb_sexo.Text
            per.Estado = "A"
            'llamamos a guardar de Npersona-->capa negocio
            Dim nper As New NPersona
            nper.nguardar(per)
            MessageBox.Show("Persona almacenada correctamente", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information)
            limpiar_todo()
        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

    Private Sub itemeditar_Click(sender As Object, e As EventArgs) Handles itemeditar.Click
        Try
            Dim per As New Persona
            per.Id = id_persona
            per.Apellido = Me.txt_apellidos.Text
            per.Nombre = Me.txt_nombres.Text
            per.Cedula = Me.txt_cedula.Text
            per.Celular = Me.txt_celular.Text
            per.Email = Me.txt_email.Text
            per.Sexo = Me.cmb_sexo.Text
            per.Estado = "A"
            Dim nper As New NPersona
            nper.nactualizar(per)
            MessageBox.Show("Persona actualizada correctamente", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information)
            limpiar_todo()
        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

    Private Sub itemeliminar_Click(sender As Object, e As EventArgs) Handles itemeliminar.Click
        Try
            Dim nper As New NPersona
            nper.neliminar(id_persona)
            MessageBox.Show("Persona eliminada correctamente", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information)
            limpiar_todo()
        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
End Class
Capa Negocio
Imports Capa_Entidad
Imports Capa_Datos
Public Class NPersona
    Public Function carga_listado_clientes() As DataTable
        Try
            Dim dt As New DataTable
            Dim datosper As New DPersona
            datosper.listado_personas.Fill(dt)
            Return dt
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try
    End Function
    Public Sub nguardar(ByVal per As Persona)
        Try
            If (campos_completos(per)) Then
                Dim dper As New DPersona
                dper.guardar_personas(per)
            Else
                Throw New Exception("Todos los campos son requeridos")
            End If
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try
    End Sub
    Public Sub nactualizar(ByVal per As Persona)
        Try
            If (campos_completos(per)) Then
                Dim dper As New DPersona
                dper.actualizar_personas(per)
            Else
                Throw New Exception("Todos los campos son requeridos")
            End If
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try
    End Sub
    Public Sub neliminar(id_per)
        Try
            Dim dper As New DPersona
            dper.eliminar_personas(id_per)
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try
    End Sub
    Private Function campos_completos(ByVal per As Persona) As Boolean
        Dim resp As Boolean = True
        If per.Apellido = "" Or per.Nombre = "" Or per.Cedula = "" Or per.Celular = "" Or per.Email = "" Or per.Sexo = "" Then
            resp = False
        End If
        Return resp
    End Function
End Class
Capa Datos
Imports Capa_Entidad
Imports MySql.Data
Imports MySql.Data.Types
Imports MySql.Data.MySqlClient

Public Class DPersona
    Public cmd As MySqlCommand
    Public da As New MySqlDataAdapter
    Public Function listado_personas() As MySqlDataAdapter
        Try
            Dim con As New coneccion
            con.conectar_bd()
            Dim da As MySqlDataAdapter
            cmd = New MySqlCommand
            cmd.CommandText = "Select *  from persona where estado='A'"
            cmd.CommandType = CommandType.Text
            cmd.Connection = con._con
            da = New MySqlDataAdapter(cmd)
            con.cerrar_coneccion()
            Return da
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try
    End Function
    Public Sub guardar_personas(ByVal per As Persona)
        Try
            Dim con As New coneccion
            Dim query As String = "insert into persona values(?par0,?par1,?par2,?par3,?par4,?par5,?par6,?par7)"
            con.conectar_bd()
            cmd = New MySqlCommand
            cmd.CommandText = query
            cmd.CommandType = CommandType.Text
            cmd.Connection = con._con
            cmd.Parameters.AddWithValue("?par0", CInt(per.Id))
            cmd.Parameters.AddWithValue("?par1", per.Cedula)
            cmd.Parameters.AddWithValue("?par2", per.Nombre)
            cmd.Parameters.AddWithValue("?par3", per.Apellido)
            cmd.Parameters.AddWithValue("?par4", per.Email)
            cmd.Parameters.AddWithValue("?par5", per.Celular)
            cmd.Parameters.AddWithValue("?par6", per.Sexo)
            cmd.Parameters.AddWithValue("?par7", per.Estado)
            cmd.ExecuteNonQuery()
            con.cerrar_coneccion()
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try
    End Sub
    Public Sub actualizar_personas(ByVal per As Persona)
        Try
            Dim con As New coneccion
            Dim query As String = "update persona set cedula=?par1,nombre=?par2,apellido=?par3,email=?par4,celular=?par5,sexo=?par6,estado=?par7 Where id_persona=?par0"
            con.conectar_bd()
            cmd = New MySqlCommand
            cmd.CommandText = query
            cmd.CommandType = CommandType.Text
            cmd.Connection = con._con
            cmd.Parameters.AddWithValue("?par0", CInt(per.Id))
            cmd.Parameters.AddWithValue("?par1", per.Cedula)
            cmd.Parameters.AddWithValue("?par2", per.Nombre)
            cmd.Parameters.AddWithValue("?par3", per.Apellido)
            cmd.Parameters.AddWithValue("?par4", per.Email)
            cmd.Parameters.AddWithValue("?par5", per.Celular)
            cmd.Parameters.AddWithValue("?par6", per.Sexo)
            cmd.Parameters.AddWithValue("?par7", per.Estado)
            cmd.ExecuteNonQuery()
            con.cerrar_coneccion()
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try
    End Sub
    Public Sub eliminar_personas(ByVal id_per As Integer)
        Try
            Dim con As New coneccion
            Dim query As String = "update persona set estado=?par1 Where id_persona=?par0"
            con.conectar_bd()
            cmd = New MySqlCommand
            cmd.CommandText = query
            cmd.CommandType = CommandType.Text
            cmd.Connection = con._con
            cmd.Parameters.AddWithValue("?par0", id_per)
            cmd.Parameters.AddWithValue("?par1", "E")
            cmd.ExecuteNonQuery()
            con.cerrar_coneccion()
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try
    End Sub
End Class
Clase coneccion
Public Class coneccion
    Public _con As MySql.Data.MySqlClient.MySqlConnection
    Private _cadena As String
    Public Sub conectar_bd()
        Dim _estado As String = ""
        Try
            _cadena = ("server=localhost; database=bd_ejemplo_jpa; user id=root; password=")
            _con = New MySql.Data.MySqlClient.MySqlConnection(_cadena)
            _con.Open()
        Catch ex As Exception
            Throw New Exception(ex.Message)
        End Try
    End Sub
    Public Sub cerrar_coneccion()
        _con.Close()
    End Sub
End Class
Capa Entidad
Public Class Persona
    Private _id_persona As Integer
    Private _cedula As String
    Private _nombre As String
    Private _apellido As String
    Private _email As String
    Private _celular As String
    Private _sexo As String
    Private _estado As String

    Public Property Id As Integer
        Get
            Return _id_persona
        End Get
        Set(value As Integer)
            _id_persona = value
        End Set
    End Property

    Public Property Cedula As String
        Get
            Return _cedula
        End Get
        Set(value As String)
            _cedula = value
        End Set
    End Property

    Public Property Nombre As String
        Get
            Return _nombre
        End Get
        Set(value As String)
            _nombre = value
        End Set
    End Property
    Public Property Apellido As String
        Get
            Return _apellido
        End Get
        Set(value As String)
            _apellido = value
        End Set
    End Property
    Public Property Email As String
        Get
            Return _email
        End Get
        Set(value As String)
            _email = value
        End Set
    End Property
    Public Property Celular As String
        Get
            Return _celular
        End Get
        Set(value As String)
            _celular = value
        End Set
    End Property
    Public Property Sexo As String
        Get
            Return _sexo
        End Get
        Set(value As String)
            _sexo = value
        End Set
    End Property
    Public Property Estado As String
        Get
            Return _estado
        End Get
        Set(value As String)
            _estado = value
        End Set
    End Property
End Class

miércoles, 7 de septiembre de 2016

Crud zk , JPA , Java con Mysql

En esta entrada proporcionaré un ejemplo básico de como realizar el registro, actualizar y eliminar datos desde una aplicación con BD Mysql.
Utilizamos:
  • ZK
  • Java
  • Myqsl
  • JPA

Partiremos suponiendo que ya tienen el entorno listo para elaborar el ejemplo.

Trabajaremos en una tabla con los siguientes campos

Nuestro ejemplo tendrá lista en la parte inferior donde se ira actualizando conforme se elimine, edite o agregue una nueva persona.






 
  
   

Ahora, la parte del controlador
package controlador;


import java.util.List;


import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;

import org.zkoss.zul.Textbox;

import datos.Dpersona;
import entidad.Persona;

public class PersonaControlador extends GenericForwardComposer{
private static final long serialVersionUID = 1L;
 
 //-----
 @Wire
 Textbox txt_IdPersona, txt_PrimerNombre, txt_Cedula, txt_Apellido, txt_Celular, txt_Email;
 Combobox cmb_Sexo;
 Button btn_Guardar, btn_Nuevo,btn_Editar,btn_Borrar;
 Listbox list_Persona;

 
 Persona datos = new Persona();
 
 public void doAfterCompose(Component comp) throws Exception {
  // TODO Auto-generated method stub
  
  super.doAfterCompose(comp);
  cargalist();
  refrescar_formulario();
 }
 
 public void refrescar_formulario(){
  txt_PrimerNombre.setValue("");
  txt_Apellido.setValue("");
  txt_Cedula.setValue("");
  txt_Celular.setValue("");
  txt_Email.setValue("");
  list_Persona.clearSelection();
  btn_Guardar.setDisabled(false);
  btn_Editar.setDisabled(true);
  btn_Borrar.setDisabled(true);
  cmb_Sexo.setValue("");
 }
 public void cargalist(){
  Dpersona per= new Dpersona();
  List lista=per.listapersonas();
  ListModelList listamodelo = new ListModelList(lista);
   list_Persona.setModel(listamodelo);
   list_Persona.renderAll();
 }
 
 public void onSelect$list_Persona(){
  Persona per=list_Persona.getSelectedItem().getValue();
  txt_IdPersona.setValue(Integer.toString(per.getIdPersona()));
  txt_PrimerNombre.setValue(per.getNombre());
  txt_Apellido.setValue(per.getApellido());
  txt_Cedula.setValue(per.getCedula());
  txt_Email.setValue(per.getEmail());
  txt_Celular.setValue(per.getCelular());
  cmb_Sexo.setValue(per.getSexo());
  btn_Guardar.setDisabled(true);
  btn_Editar.setDisabled(false);
  btn_Borrar.setDisabled(false);
 }
 public void onClick$btn_Nuevo(){
  cargalist();
  refrescar_formulario();
 }
 
 public void onClick$btn_Guardar(){
  try {
   String nombre=txt_PrimerNombre.getValue();
   String apellido= txt_Apellido.getValue();
   String cedula= txt_Cedula.getValue();
   String celular= txt_Celular.getValue();
   String email= txt_Email.getValue();
   String sexo= cmb_Sexo.getValue();
   if(nombre.isEmpty()||apellido.isEmpty()||cedula.isEmpty()||celular.isEmpty()||email.isEmpty()){
    alert("Todos los campos son obligatorios");
   }else{
    Persona per= new Persona();
    per.setNombre(nombre);
    per.setApellido(apellido);
    per.setCedula(cedula);
    per.setCelular(celular);
    per.setEmail(email);
    per.setSexo(sexo);
    per.setEstado("A");
    Dpersona.CrearPersona(per);
    alert("Persona creada correctamente...!");
    cargalist();
    refrescar_formulario();
   }
  } catch (Exception e) {
   alert("Error: " + e.getMessage());
  }
 }
 public void onClick$btn_Editar() {
  try {
 
  if (txt_PrimerNombre.getText().isEmpty() || txt_IdPersona.getText().isEmpty() || txt_Apellido.getText().isEmpty()
    || txt_Email.getText().isEmpty() || cmb_Sexo.getValue() == "" || txt_Cedula.getText().isEmpty()) {
   alert("Todos los campos con (*) son obligatorios");

  } else {

   Dpersona mper = new Dpersona();
   Persona per = new Persona();

   per.setIdPersona(Integer.parseInt(txt_IdPersona.getText()));
   per.setNombre(txt_PrimerNombre.getText().toUpperCase());
   per.setApellido(txt_Apellido.getText().toUpperCase());
   per.setCedula(txt_Cedula.getText());
   per.setCelular(txt_Celular.getText());
   per.setEmail(txt_Email.getText());
   per.setSexo(cmb_Sexo.getValue());
   per.setEstado("A");

   mper.Editarpersona(per);
   alert("Datos actualizados con exito");
   cargalist();
   refrescar_formulario();
   
   }
   } catch (Exception e) {// TODO Auto-generated catch block
    alert(e.getMessage());
   }
  
 }

 public void onClick$btn_Borrar() {
  try {
   Dpersona mper = new Dpersona();
   Persona per = new Persona();
   per.setIdPersona(Integer.parseInt(txt_IdPersona.getText()));
   per.setEstado("E");
   mper.Eliminarpersona(per);
   alert("Datos eliminados con exito");
   cargalist();
   refrescar_formulario();
   } catch (Exception e) {
      // TODO Auto-generated catch block
    alert(e.getMessage());
   }
  }

}

La capa de datos
package datos;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;


import entidad.Persona;
public class Dpersona {
 
 public static void CrearPersona(Persona per) throws Exception{
   EntityManagerFactory emf = Persistence.createEntityManagerFactory("srlab");
     EntityManager entitymanager = emf.createEntityManager( );
     try{
      entitymanager.getTransaction().begin();
      entitymanager.persist(per);
      entitymanager.getTransaction().commit();
     } catch (Exception e) {
      entitymanager.getTransaction().rollback();
      throw new Exception("Error al registrar la Persona..!");

     }finally {
      entitymanager.close();
      emf.close();
     }
  
 }
 public void Editarpersona(Persona per) throws Exception {
 Persona per_aux = new Persona();
 EntityManagerFactory emf = Persistence.createEntityManagerFactory("srlab");
    EntityManager entitymanager = emf.createEntityManager( );
  try {
   entitymanager.getTransaction().begin();
   per_aux = entitymanager.find(Persona.class, per.getIdPersona());
   entitymanager.flush();
   per_aux.setNombre(per.getNombre());
   per_aux.setApellido(per.getApellido());
   per_aux.setCedula(per.getCedula());
   per_aux.setCelular(per.getCelular());
   per_aux.setEmail(per.getEmail());
   per_aux.setSexo(per.getSexo());
   per_aux.setEstado(per.getEstado());
   entitymanager.merge(per_aux);
   entitymanager.getTransaction().commit();

  } catch (Exception e) {
   // TODO: handle exception
   //e.printStackTrace();
   entitymanager.getTransaction().rollback();
      throw new Exception("Error al actualizar..!");
  } finally {
   entitymanager.close();
   emf.close();
  }
 }

 public void Eliminarpersona(Persona per) throws Exception {
  Persona per_aux = new Persona();
  EntityManagerFactory emf = Persistence.createEntityManagerFactory("srlab");
     EntityManager entitymanager = emf.createEntityManager( );
  try {
   entitymanager.getTransaction().begin();
   per_aux =entitymanager.find(Persona.class, per.getIdPersona());
   entitymanager.flush();
   per_aux.setIdPersona(per.getIdPersona());
   per_aux.setEstado(per.getEstado());
   entitymanager.merge(per_aux);//si quieres eliminar  aplica remove
   entitymanager.getTransaction().commit();
  } catch (Exception e) {
      throw new Exception("Error al eliminar..!");
  } finally {
   entitymanager.close();
   emf.close();
  }
 }
 @SuppressWarnings({ "unchecked", "finally" })
 public List listapersonas(){
   EntityManagerFactory emf=Persistence.createEntityManagerFactory("srlab");
   EntityManager entitymanager = emf.createEntityManager();
   List lista = null;
   try {
    entitymanager.getTransaction().begin();
    Query query = entitymanager.createNamedQuery("Persona.findAll",Persona.class);
    lista = query.getResultList();
   
   entitymanager.getTransaction().commit();
   } catch (Exception e) {
   // TODO: handle exception
    //e.printStackTrace(); 
   entitymanager.getTransaction().rollback();
   throw new Exception("no pode vose");
  
  }finally {
   entitymanager.close();
   emf.close();
   return lista;
   }
 
 }

}

La entidad que tendrán que generarla con JPA, pero bueno igual se las dejo =)
package entidad;

import java.io.Serializable;
import javax.persistence.*;


/**
 * The persistent class for the persona database table.
 * 
 */
@Entity
@NamedQuery(name="Persona.findAll", query="SELECT p FROM Persona p where p.estado ='A'")
public class Persona implements Serializable {
 private static final long serialVersionUID = 1L;

 @Id
 @Column(name="id_persona")
 private int idPersona;

 private String apellido;

 private String cedula;

 private String celular;

 private String email;

 private String estado;

 private String nombre;

 private String sexo;

 public Persona() {
 }

 public int getIdPersona() {
  return this.idPersona;
 }

 public void setIdPersona(int idPersona) {
  this.idPersona = idPersona;
 }

 public String getApellido() {
  return this.apellido;
 }

 public void setApellido(String apellido) {
  this.apellido = apellido;
 }

 public String getCedula() {
  return this.cedula;
 }

 public void setCedula(String cedula) {
  this.cedula = cedula;
 }

 public String getCelular() {
  return this.celular;
 }

 public void setCelular(String celular) {
  this.celular = celular;
 }

 public String getEmail() {
  return this.email;
 }

 public void setEmail(String email) {
  this.email = email;
 }

 public String getEstado() {
  return this.estado;
 }

 public void setEstado(String estado) {
  this.estado = estado;
 }

 public String getNombre() {
  return this.nombre;
 }

 public void setNombre(String nombre) {
  this.nombre = nombre;
 }

 public String getSexo() {
  return this.sexo;
 }

 public void setSexo(String sexo) {
  this.sexo = sexo;
 }

}
 
Igual aqui les dejo el archivo del projecto para que lo puedan descargar y una pagina donde podrán aprender más sobre JPA.
Archivo: Srlab
Pagina: JPA

Dudas o preguntas, comenten =) 

Leer, escribir y vaciar archivo de texto Vb.net


Vamos a usar un ejemplo con 3 cajas de texto. Simulando un número de factura, que al dar click en aumentar se incrementará en 1 el  número de la tercer caja de texto.




 
Hay funciones para verificar si la carpeta y archivo de texto existen, para crearlos en caso de que no, para borrar el contenido del archivo y volver a escribir, cabe recalcar que se trabajará con la primer linea del archivo.
Dudas o preguntas, comenten =) 

A continuación, el código.


 Private Sub btn_guardar_Click(sender As Object, e As EventArgs) Handles btn_guardar.Click
        If (Me.txt_serie1.Text = "" Or Me.txt_serie2.Text = "" Or Me.txt_numero_serie.Text = "") Then
            MsgBox("Faltan algunos campos")
        Else
            If verifica_existe_carpeta() Then
                If verifica_existe_archivo() Then
                    '   MsgBox("Archivo existe")
                    borra_info_fac()
                    escribir_numero_de_factura(Me.txt_serie1.Text, Me.txt_serie2.Text, Me.txt_numero_serie.Text)
                Else
                    '   MsgBox("Archivo no existe")
                    crear_archivo()
                    escribir_numero_de_factura(Me.txt_serie1.Text, Me.txt_serie2.Text, Me.txt_numero_serie.Text)
                End If
            Else
                ' MsgBox("Carpeta no existe")
                crear_carpeta()
                crear_archivo()
                escribir_numero_de_factura(Me.txt_serie1.Text, Me.txt_serie2.Text, Me.txt_numero_serie.Text)
            End If
            cargar_numero_fac()
        End If
    End Sub
    Private Function verifica_existe_carpeta() As Boolean 'verifica si existe el archivo
        Dim resp As Boolean = False
        Dim ruta As String = "C:\iconos"
        If Directory.Exists(ruta) = True Then
            resp = True
        End If
        Return resp
    End Function
    Private Function verifica_existe_archivo() As Boolean 'verifica si existe el archivo
        Dim resp As Boolean = False
        Dim ruta As String = "C:\iconos\num_serie.txt"
        If File.Exists(ruta) = True Then
            resp = True
        End If
        Return resp
    End Function
    Private Sub cargar_numero_fac() 'carga el numero de la factura
        If verifica_existe_carpeta() And verifica_existe_archivo() Then
            Dim objStreamReader As StreamReader
            Dim strLine As String
            objStreamReader = New StreamReader("C:\iconos\num_serie.txt")
            'extraemos la primer linea de texto
            strLine = objStreamReader.ReadLine
            objStreamReader.Close()
            If strLine = "" Then
                Me.txt_serie1.Text = "000"
                Me.txt_serie2.Text = "000"
                Me.txt_numero_serie.Text = "000000000"
            Else
                Dim Arreglo As String() = strLine.Split("-")
                Me.txt_serie1.Text = Arreglo(0)
                Me.txt_serie2.Text = Arreglo(1)
                Me.txt_numero_serie.Text = Arreglo(2)
            End If
        Else
            ' MsgBox("Carpeta y/o archivo no existe")
            Me.txt_serie1.Text = "000"
            Me.txt_serie2.Text = "000"
            Me.txt_numero_serie.Text = "000000000"
        End If
    End Sub
    Private Sub crear_carpeta()
        Dim ruta As String = "C:\"
        My.Computer.FileSystem.CreateDirectory(ruta & "\iconos")
    End Sub
    Private Sub crear_archivo()
        Dim ruta As String = "C:\iconos\num_serie.txt"
        Dim fi As FileInfo = New FileInfo(ruta)
    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        cargar_numero_fac()
    End Sub
    Private Sub escribir_numero_de_factura(ByVal serie1 As String, ByVal serie2 As String, ByVal num_serie As String)
        Dim ruta As String = "C:\iconos\num_serie.txt"
        Dim sw As StreamWriter
           sw = File.CreateText(ruta)
        sw.WriteLine(serie1 & "-" & serie2 & "-" & num_serie)
        sw.Flush()
        sw.Close()
    End Sub
    Private Sub borra_info_fac()
        Using file As New IO.StreamWriter("C:\iconos\num_serie.txt")
            file.Flush()
        End Using
    End Sub
    Private Sub incrementa_num_fac()
        ' extraemos contenido
        Dim objStreamReader As StreamReader
        Dim strLine As String
        objStreamReader = New StreamReader("C:\iconos\num_serie.txt")
        'Leemos la primer linea de texto
        strLine = objStreamReader.ReadLine
        'cerramos el archivo.
        objStreamReader.Close()
        Dim Arreglo As String() = strLine.Split("-")' separamos la cadena 
        Dim s1 As String = Arreglo(0)
        Dim s2 As String = Arreglo(1)
        Dim s3 As String = CStr(CInt(Arreglo(2)) + 1)'sumamos en 1
        '-------------borramos contenido
        borra_info_fac()
        '---------------actualiza
        escribir_numero_de_factura(s1, s2, s3)
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        incrementa_num_fac()
        cargar_numero_fac()
    End Sub


sábado, 13 de agosto de 2016

Crear informe vb.net conexion nativa Mysql

Bueno en esta ocasion utilizaré una tabla con la que estoy trabajando actualmente =)
 
Ahora crearemos un dataset y dentro de este crearemos una tabla 


Sencillo verdad? en este caso lo cree con solo 3 campos pues en la seleccion que hare en visual solo traere los 3 campos, agrupandolos por descripcion y contando, para saber el numero de pacientes por consulta. 
Ahora deben crear un informe .rdlc  y en "Datos de Informe" deben agragar el dataset y escoger la tabla que creamos anteriormente.


 Bueno luego de eso solo debes arrastrar de Dataset1 en Conjunto de datos o crear una tabla dependiendo de como quieran presentar sus datos
 Me ha quedado de esta manera y tambien agregue unos parametros que voy a enviar desde mi formulario =)


Luego crearemos un nuevo formulario donde se visualizara nuestro informe
 


 Agregan un Reportviewer y eligen el rdlc que creamos en el paso anterior.
 
Ahora desde mi formulario enviare 4 parametros, los de las 3 cajas de texto de abajoo y la fecha actual


A continuacion el codigo del boton Imprimir
 Private Sub btn_imprimir_Click(sender As Object, e As EventArgs) Handles btn_imprimir.Click
        Dim fecha_reporte, tot_reg, tot_ate, tot_din As String
        fecha_reporte = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")
        tot_reg = Me.txt_num_reg.Text
        tot_ate = Me.txt_total_atendidos.Text
        tot_din = Me.txt_dinero_atendidos.Text

        Dim fecha_desde, fecha_hasta As String
        fecha_desde = Me.dt_fecha_desde.Value.ToString("yyyy-MM-dd")
        fecha_hasta = Me.dt_fecha_hasta.Value.ToString("yyyy-MM-dd")

        Dim querycab As String
        conexion_global()
        querycab = "select  Descripcion,count(*) numero, sum(total) total from det_fac_con where Dia_Turno>='" & fecha_desde & "' and Dia_Turno<'" & fecha_hasta & "' Group by Descripcion"
        da = ejecuta_consulta_DataAdapter(querycab)
        Dim table As New DS_general_estadisticas.tabla_general_estDataTable
        da.Fill(table)

        ver_pacientes_atendidos.DS_general_estadisticas.tabla_general_est.Merge(table)
        'Parametros 

        Dim parameters As ReportParameter() = New ReportParameter(3) {}
        parameters(0) = New ReportParameter("fecha_reporte", fecha_reporte)
        parameters(1) = New ReportParameter("num_reg", tot_reg)
        parameters(2) = New ReportParameter("tot_ate", tot_ate)
        parameters(3) = New ReportParameter("tot_din", tot_din)


        ver_pacientes_atendidos.ReportViewer1.LocalReport.SetParameters(parameters)
        ver_pacientes_atendidos.ReportViewer1.RefreshReport()

        ver_pacientes_atendidos.ShowDialog()
        cerrar()
    End Sub
Ahora el codigo en el Modulo "Conexion" =)

Imports MySql.Data
Imports MySql.Data.Types
Imports MySql.Data.MySqlClient

Module Conexion
    Public _cadena As String
    Public _conexion As MySqlConnection
    Public cmd As MySqlCommand
    Public da As New MySqlDataAdapter
    Public ultimo_id As Integer
    Public Function conexion_global() As Boolean
        Dim _estado As Boolean = True
        Try
            _cadena = ("server=localhost; database=primeroagosto; user id=root; password=")
            _conexion = New MySqlConnection(_cadena)
            _conexion.Open()

        Catch ex As Exception
            MessageBox.Show(ex.Message)
            _estado = False
        End Try
        Return _estado
    End Function
    Public Sub cerrar()
        _conexion.Close()
    End Sub
End Module

domingo, 7 de agosto de 2016

Código para enviar correo con Java

Antes de implementar el código de abajo tienen que generar una contraseña de aplicación de una cuenta de google

import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 

 
public class correo {
 static String remitente = "correo@gmail.com";
 static String claveCorreo = "";
 static Properties mailServerProperties;
 static Session getMailSession;
 static MimeMessage generateMailMessage;
 
 public static void main(String args[]) throws AddressException, MessagingException {
  enviarcorreo();
  
 }
 
 public static void enviarcorreo() throws AddressException, MessagingException {
 
  mailServerProperties = System.getProperties();
  mailServerProperties.put("mail.smtp.host", "smtp.gmail.com");
  mailServerProperties.put("mail.smtp.port", "587");
  mailServerProperties.put("mail.smtp.auth", "true");
  mailServerProperties.put("mail.smtp.starttls.enable", "true");


  getMailSession = Session.getDefaultInstance(mailServerProperties, null);
  generateMailMessage = new MimeMessage(getMailSession);
  generateMailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress("destinatario1"));
  generateMailMessage.addRecipient(Message.RecipientType.CC, new InternetAddress("destinatario2"));
  generateMailMessage.setSubject("PRUEBAAA...!");
  String mensaje= "Correo de prueba. " + "Oh";
  generateMailMessage.setContent(mensaje, "text/html");
  
  Transport transport = getMailSession.getTransport("smtp");
 
  transport.connect("smtp.gmail.com",remitente,claveCorreo);
  transport.sendMessage(generateMailMessage, generateMailMessage.getAllRecipients());
  transport.close();
 }
}

viernes, 6 de junio de 2014

Error al instalar Wampserver "msvcr100.dll"


Bueno dicho error se debe a que primero debemos instalar unos cosillas para que el wamp funcione correctamente =)..si no se quedara en el estado anaranjado x_X
Aquí esta el link --> Visual C++ 2012.
instalen y vuelvan a instalar el wamp..y listo =) a mi me funciono =D xD

jueves, 19 de septiembre de 2013

Recuperar equipo con Prey

Bueno como esta semana a sido de descanso ..((despues de examenes xD)) me puse a mirar unas paginas para ver si encontraba algo que me llamara la atención y lo encontré en la pagina de Dragonjar.
Y lo que hice en ese momento fue probarla xD pa ver si era cierto jeje...y pSs si me parecio  una herramienta muy util si en algun caso sufrimos el robo de uno de nuestra computadora.

La Herramienta se la tienen que descargar de la pagina de PREY la cual tienen instalarla en el equipo a asegurar, se registran y toda la cosa y listo.
El funcionamiento de la herramienta es el siguiente:
Como ya estan registrado y el equipo tambien, van a la pagina y acceden con sus datos y podran ver los dispositivos vinculados a la cuenta.
Para la herramienta entre en funcionamiento es necesario poner en estado missing al dispositivo y nos pedirá el intervalo en que deseamos recibir los reportes. Ponemos en guardar cambios y recibimos un correo en el cual lamentan la perdida de nuestro equipo y que estemos atentos que en los proximos minutos recibiremos un reporte.


Y listo.. recibimos un correo  el cual nos indica que llego un reporte...vamos al panel de prey ingresamos al dispositivo registrado y vamos hasta reportes y bueno nos llega la direccion de donde esta nuestro equipo, tambien recibimos una captura de pantalla y una foto tomada de la web cam. con un poco de suerte podremos capturar el rostro del delincuente :D y meterlo preso xD jeje bueno eso es todo :) espero les sirva de mucho ....bendiciones..!!=)

Nota: Es obvio que no recibirán un reporte hasta que el delincuente se conecte a Internet y si la formatearon psSs recontra chanfle ya nada se puede hacer jeje pero esperemos que si le llegan a sustraer su equipo los delincuentes no sean tan sabidos jeje.

jueves, 22 de noviembre de 2012

Capturar imágenes de una red LAN (Backtrack 5)

Para poder capturar las imagenes de las paginas que visiten las pc's de nuestra red necesitamos de dos  herramientas:

  • Ettercap
  • Driftnet
Primero tenemos que usar el ettercap para envenenar la red(Man in the middle)


Luego abrimos otro terminal y ponemos a escuchar el trafico de la tarjeta de red
Driftnet -i eth0





Y podemos observar los resultados....xD....bueno eso es todo por hoy..xD





Enlaces:

sábado, 17 de noviembre de 2012

Ataque Phishing en una red LAN con bactrack 5


Bueno ahora toca hablar de Phishing o pesca Informatica.....mientras mas grande sea la presa mejor...jaja..me gusto esa frase.. :)..bueno pero que es el phishing??
El phishing es un tipo de delito incluido dentro del ámbito de las estafas, se comete mediante el uso de un tipo de ingeniería social caracterizado por intentar adquirir información confidencial de forma fraudulenta. El estafador se hace pasar por una persona o empresa de confianza en un aparente comunicación oficial electrónica; por lo común un  correo electrónico, o algún sistema de mensajería instantánea
A continuación les mostrare como hacer este ataque.



El ataque se lo recreará en una red lan, la cual estará compuesta por:
·         Dos computadores
·         Y un modem Adsl
El computador Compaq será el atacante en el cual instalaremos Backtrack 5 utilizando vmware para poder realizar la suplantación de la página. Desde este mismo computador se realizara el envió del correo electrónico con la herramienta sendblaster.
La victima será el computador Hp mini al cual le llegara el correo electrónico con el respectivo enlace de la dirección del fake. Al entrar a la pagina falsa el usuario ingresara sus datos, dando como resultado el envió de estos a la maquina atacante. 


Usando backtrack KDE 5:

1.-Cambiamos el modo de la tarjeta de red de NAT  a VMnet0 que la configuraremos mas adelante.



2.-Después de finalizar la creación de la maquina virtual vamos a la pestaña “Edit” y damos click en la opción “virtual Network Editor”

En la maquina virtual escogeremos  la tarjeta de red Inalambrica



3.-Nos  dirigimos hasta la opción “Wicd Network Manager” para asignarle una ip estática a nuestro backtrack

4.-Le asignamos la ip 192.168.1.6 debido a que la plantilla que se diseño para enviar al correo tiene esa ip.

5.-nos dirigimos a la barra de tareas ubicada en la parte inferior y damos click en el icono > BackTrack > Social Engineering Toolkit > set.




6.-Del menú de opciones seleccionamos la opción 2. Website Attack Vectors.


7.- Seleccionamos la opción 3. Credential Harvester Attack Method


8.-Seleccionamos la opción 2. Site Cloner


 9.-Ingresamos la url del sitio a suplantar en este caso “http://www.facebook.com” y esperamos que se levante el sitio.


10.-Ahora enviaremos el correo con sendblaster..!en el cual ya hemos diseñado la plantilla
.

11.-Se lo envía a la victima usando el servicio smtp de gmail, para esto necesitamos una cuenta de gmail con su respectiva contraseña



12.-Si la víctima le da click en “Ver el comentario” o “Ir a los comentarios”, se abrirá una pestaña en la cual aparecerá nuestra página falsa


 13.-La victima ingresa su usuario y contraseña


 14.-En el backtrack se puede apreciar la ip de la máquina de la víctima en este caso es la 192.168.1.2 y también su correo y contraseña




Análisis de Metadatos con FOCA




Bueno ayer conocí a una herramienta que trabaja con los metadatos de los archivos....la verdad me pareció muy interesante....además permite hacer mas cosas como es la de poder ver las paginas que están navegando los usuarios de una red con tan solo poner el dominio de la organización.




Manuales:

http://www.elladodelmal.com/2010/07/foca-25-free-manual-de-usuario-1-de-6.html
Videos:
http://www.youtube.com/watch?v=Xx8ESYfbpRU
Se lo pueden descargar desde aqui:
http://www.informatica64.com/foca.aspx
Version Online:
http://www.informatica64.com/foca/

viernes, 27 de julio de 2012

SO

Preguntas SO 1. Si varios usuarios usan un mismo sistema que riesgos se corren con respecto a la administración de procesos. Liste y explique al menos dos de estos riesgos. Es posible aminorarlos?, explique su respuesta.
Que un proceso utilice un determinado recurso durante mucho tiempo. Ahora hay métodos de planificación que normalmente le dan un tiempo en la cpu o también ponen en bloqueo dicho proceso (hasta que se le asigne dicho recurso) y ejecuta otro que este listo. También existe el administrador de tareas mediante el cual podemos eliminar procesos. Que no haya comunicación entre procesos. Por ejemplo que un usuario quiera eliminar un archivo que otro usuario esta re-escribiendo.

2. La administración de recursos es un problema recurrente en el diseño de SO. Una de las consideraciones más importantes es el entorno de trabajo. Liste que recursos deben ser manejados con más cuidado en los siguientes casos:
a. -Mainframe conectado a terminales tontos

• Procesador
• Memoria
• E/S

b. -Una estaciones de trabajo conectada a un servidor
• Redes
• Memoria
• Procesador

c. -Un teléfono celular 3G.
• Procesador
• Batería(duración)
• Conectividad con otros equipos
• Memoria

3. Los primeros kernels de SO ni el hardware donde corrían proveían un bit de modo. Hubiera sido posible a pesar de esto crear un SO más seguro? De argumentos a favor y en contra.

No, al menos que encontraran otro hardware que soporte el modo bit de un so. Si, debido a que los diseñadores de sistemas operativos hubieran buscado la forma de:

• Restringir el acceso total de un programa de usuario a los recursos.
• Evitar que un proceso acceda a la memoria de otro.
• Evitar el acceso al Hw a menos que sea necesario.

Evitando resultados que podrían ser desastrosos debido a la utilización errónea del hw.

4. Los kernels modulares tiene la ventaja de que los módulos se cargan/descargan dinámicamente en el espacio de memoria del kernel. Piense en algún problema que pueda derivarse de este procedimiento.

Si son módulos que se cargan y descargan deberían ser seguros o al menos depurar errores cuando se hagan estos procedimientos, ya que cualquier error inhabilitaría dicho modulo y ya no estaría para el uso.


5. Los kernels suelen modificarse en función de las limitaciones del hardware del sistema, cual es el dispositivo electrónico más sencillo (en términos de funcionalidad) que Ud. conoce donde ejecuta el kernel de un SO.

El dispositivo que conozco con mas limitaciones de Hw es mi pc vieja con procesador Pentium 200mb de ram y 10G de disco duro, en donde tuve que instalar el SO Minix 1.3.8 para realizar un proyecto de minishell.
Aunque he leído de un SO llamado “kolibriOS” que solo necesita 8mb de Ram y un espacio de 1.44mb, pero tiene algunos problemas con las tarjetas de red. También podrían ser los primeros celulares que tuvieron un so como el celular n95 que tenia el so symbian v9.2


Las respuesta están en base a a como interprete las preguntas....y a lo que he investigado..puede que no estén del todo bien..pero hice mi mayor esfuerzo..x))

martes, 28 de diciembre de 2010

Audio Vive latino 2006



eeeee..Hola .... gente...pSss ...aqui dejandoles el audio de la presentacion

de PXNDX en el vive latino 2006 [<--a mi parecer la mejor en vivo

cuando estaban chamacos..xD]..

sin nada mas que decir [bueno ..bueno ..escribir..=P]..

me despido..

Listado de Canciones

  • Cuando no es como debiera ser
  • Amiguito
  • ...y de la gasolina renacio el amor
  • En el vaticano
  • 3+1
  • Ya no jalaba
  • No tienes oportunidad contra mi antipatica imaginacion
  • No te deseo el bien... pero tampoco te deseo el mal
  • Cita en el quirofano
  • Promesas / Decepciones
  • Mala suerte
  • Ando pedo y ella esta aqui
  • Miedo a las alturas
  • Disculpa los malos pensamientos

  • aqui un video ...


    love & Rockets

    Runing

    DESCARGAR

    jueves, 4 de noviembre de 2010

    Yo al ultimo y los toma toma





    “Bender ¿Por qué saltaste? – Todos lo hacían yo solo
    quería ser popular-”esa frase de Bender basto para
    iniciar esto, yo al último y los toma toma es música
    que ya conoces al estilo TOMA TOMA, es ver todo el
    día Futurama y los Simpson repitiendo los diálogos
    sin importar cuantas veces has visto el capitulo, es
    jugar space invaders en un atari viejo, es faltar a
    clases y manejar sin ningún rumbo, es disfrazarte el
    día de muertos, es reír cada vez que Bender dice
    “muerde mi brillante y metálico trasero”…
    ----------
    Esta banda rifa ^^ me encanto el disco... ahí les dejo
    para que escuchen una música... y si les gusta ....
    también les dejo el enlace para que lo puedan descargar.







    DESCARGAR

    PRIMER POST

    DEVICE DOCTOR




    ENCUENTRA Y ACTUALIZA TUS DRIVERS


    Descripción
    Permite actualizar cualquier driver a la última versión
    disponible. Incluso funciona para detectar
    “dispositivos desconocidos“.

    Su uso es extremadamente sencillo, basta con pulsar el
    botón Begin Scan y comenzará analizar el hardware del
    equipo, para posteriormente consultar a su extensa base de
    datos en busca de actualizaciones para su descarga.

    ¿No tienes conexión a Internet?
    Device Doctor de permite guardar el resultado del escaneo
    y luego trasladarlo a un equipo con Internet, para que
    puedas descargar las actualizaciones normalmente.

    Esta aplicación es tan potente, que tiene aproximadamente
    3 Terabytes (3,000GB) en drivers almacenados en su base de
    datos, cada controlador es revisado por humanos utilizando
    herramientas de compatibilidad y por si fuera poco
    compatible con Windows XP, Vista y Windows 7.
    Datos del Archivo:
    * Plataformas: Windows 2000/ XP/ 2003/ Vista/ Se7en
    * Tipo: Instalación
    * Compresión: WinRar
    * Idioma: Ingles
    * Peso: 4.5 Mb
    * Licencia: Free

    DESCARGAR

    sábado, 9 de octubre de 2010

    eee...mm...la verdad..este es la primera vez que publico algo..jeje..
    pero bueno..les voy a dejar la Canción "Procedimiento para llegar a un común acuerdo"....que la subi a mi cuenta de youtube....espero y les guste..^^..