Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

13/3/10

Base de Datos PRESTAMOS (proyecto completo)

JAN29


Ahora aqui dejo para su analisis un mini proyecto sobre una base de datos "PRESTAMOS" que consiste en llevar un control de los equipos prestados en una empresa constructora.

El modelo de datos Semantico es el siguiente:
y su equivalente en MER (Modelo Entidad Relacion)

La aplicacion para su conexion a la base de datos MYSQL, hace uso de la clase "conectate.java" y de la libreria  mysql-connector-java-5.0.7-bin, ademas para el control de la interfaz con la base de datos, se crea la clase "sqlclass.java" que consiste en varios metodos para INSERTAR, ELIMINAR, ACTUALIZAR registros de la base de datos.

Esta clase es utilizada por la interfaz para manipular los registros de  cada una de las tablas, como se ve en la imagen de arriba para la tabla Herramientas, donde se insertan los datos obtenidos de la base de datos en un objeto JTable, asi mismo esta clase tiene los metodos InsertarRegistro, DeleteRegistro, UpdateRegistro, que se implementan en la interfaz mediante una llamada:

String datos[] = {CodHer,descripcion,tipo,precio};
herramienta.InsertarRegistro(datos, "insert into herramienta values(?,?,?,?)");

donde el parametro datos es un objeto de tipa array que contiene la informacion a insertar en la base de datos y el parametro sql, que contiene la instruccion en sql para realizar la accion.
Igualmente para el metodo UpdateRegistro, se pasan los parametros datos(array de datos) y la instruccion sql

herramienta.UpdateRegistro(datos, "update Herramienta set descripcion=?, tipo=?, precio=? where CodHer=?");

finalmente la sintaxis para el uso del metodo eliminarRegistro, es:


herramienta.DeleteRegistro("herramienta", "CodHer", codigo);

donde se pasa como parametros, el nombre de la tabla en la cual se eliminaran registros, el nombre de la columna que contiene la llave primaria y el codigo (ID) de la fila del registro a eliminar

La clase "sqlclass.java" en su totalidad:

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class sqlclass {
  conectate con;
  
  public sqlclass (){
    con = new conectate();
  } 
  
  /* INSERTRA UN NUEVO REGISTRO EN LA BASE DE DATOS
   * PARAMETROS(Un array de String con los datos a insertar,la instruccion sql)*/
  public void InsertarRegistro(String datos[], String sql){
       try {          
            PreparedStatement pstm = con.getConnection().prepareStatement(sql);
            for(int i=0; i<=datos.length-1;i++){
             
            }  
            pstm.execute();
            pstm.close();
         }catch(SQLException e){
         System.out.println(e);
      }
   }
     
  /* BORRA UN REGISTRO DE LA BASE DE DATOS
   * parametros (Nombre de la tabla, nombre columna, Codigo unico)*/
  public void DeleteRegistro(String tabla, String col, String id){  
            try {                
                PreparedStatement pstm = con.getConnection().prepareStatement("delete from " + tabla + " where " + col + " = ?");
                pstm.setString(1, id);
                pstm.execute();
                pstm.close();
            }catch(SQLException e){
            System.out.println(e);
            }            
   }
  
  /* ACTUALIZA UNA TABLA DE LA BASE DE DATOS
   * parametros (Un Array de string con los datos a actualizar, la instruccion sql )*/
    public void UpdateRegistro(String datos[], String sql){
       try {
            PreparedStatement pstm = con.getConnection().prepareStatement(sql);
            for(int i=0; i<=datos.length-1;i++){
                pstm.setString(i+1, datos[i]);
            }       
            pstm.execute();
            pstm.close();   
         }catch(SQLException e){
         System.out.println(e);
      }
   }
    
   /*  METODO PARA OBTENER TODOS LOS DATOS DE UNA TABLA
    *  parametros (Un array con los nombres de las columnas, el nombre de la tabla, la instruccion sql) */
 public Object [][] GetTabla(String colName[], String tabla, String sql){
      int registros = 0;
      //obtenemos la cantidad de registros existentes en la tabla
      try{         
         PreparedStatement pstm = con.getConnection().prepareStatement("SELECT count(1) as total FROM " + tabla);
         ResultSet res = pstm.executeQuery();
         res.next();
         registros = res.getInt("total");
         res.close();
      }catch(SQLException e){
         System.out.println(e);
      }
      
    Object[][] data = new String[registros][colName.length];  
    String col[] = new String[colName.length];
    
    //realizamos la consulta sql y llenamos los datos en "Object"
      try{         
         PreparedStatement pstm = con.getConnection().prepareStatement(sql);
         ResultSet res = pstm.executeQuery();
         int i = 0;
         while(res.next()){            
            for(int j=0; j<=colName.length-1;j++){
                col[j] = res.getString(colName[j]);
                data[i][j] = col[j];
            }          
            i++;
         }
         res.close();
          }catch(SQLException e){
         System.out.println(e);
    }
    return data;
 }  
 
/* METODO PARA TODOS LOS DATOS DE UNA COLUMNA
 * parametros (Nombre de la tabla, nombre columna, instruccion sql ) */
public Object [] GetColumna(String tabla, String colName, String sql){
      int registros = 0;
      //obtenemos la cantidad de registros existentes en la tabla
      try{         
         PreparedStatement pstm = con.getConnection().prepareStatement("SELECT count(1) as total FROM " + tabla);
         ResultSet res = pstm.executeQuery();
         res.next();
         registros = res.getInt("total");
         res.close();
      }catch(SQLException e){
         System.out.println(e);
      }
      
    Object[] data = new String[registros];    
      try{         
         PreparedStatement pstm = con.getConnection().prepareStatement(sql);
         ResultSet res = pstm.executeQuery();
         int i = 0;
         while(res.next()){            
            data[i] = res.getString(colName);
            i++;
         }
         res.close();
          }catch(SQLException e){
         System.out.println(e);
    }
    return data;
 }  

/* METODO PARA OBTENER UN DATO DE UNA TABLA
    PARAMETROS (nombre columna, instruccion sql) */
public String GetData(String colName, String sql){
    String data = new String();    
      try{         
         PreparedStatement pstm = con.getConnection().prepareStatement(sql);
         ResultSet res = pstm.executeQuery();         
         while(res.next()){            
            data = res.getString(colName);
         }
         res.close();
          }catch(SQLException e){
         System.out.println(e);
    }
    return data;
 }  

} //fin clase

la clase contiene ademas el metodo getTabla(), que obtiene todos los datos de una tabla de la base de datos y los coloca en un objeto Object[][] para utilizarlo mas facilmente en la interfaz, por ejemplo:


private void updateTabla(){
   String[] columNames = {"Codigo","Descripcion","Tipo","Precio"};
   String colName[] = {"CodHer","descripcion","tipo","precio"};
   //nombre de columnas, tabla, instruccion sql
   dtHer = herramienta.GetTabla(colName, "herramienta", "select * from herramienta order by CodHer");
   // se colocan los datos en la tabla
   DefaultTableModel datos = new DefaultTableModel(dtHer,columNames);
   tabla.setModel(datos);
}
Se crea un array colName[] y se lo llena con los nombres de las columnas de la BD, y se lo pasa como parametro al metodo GetTabla, al que ademas se especifica, el "nombre de la Tabla" y la instruccion SQL para realizar la obtencion de datos.


El proyecto tambien hace uso del tipo de formularios MDI (multiple document interface) y de la libreria Substance para aplicar un skin a la interfaz


Vista general del proyecto
[Enlace de descarga actualizado 27-03-2011]
El proyecto para descargar
Click para descargar

31 comentarios:

Dan dijo...

Muy buena la página. Me he descargado los archivos necesarios para probar el proyecto, pero en el momento de introducir los datos en las tablas me da error. Las tablas las importo y se crean perfectamente, pero los datos al tratar de insertarlos a través de la ventana SQL de phpMyAdmin me da error. Por más que miro no encuentro error alguno en el archivo "departamento" que es el primero que estoy tratando de insertar. ¿Alguna solución?.

Mouse dijo...

Antes de ejecutar el SQL en el phpMyAdmin, debes quitar las comillas (backquotes en ingles) a los nombres de los campos, asi:

INSERT INTO departamento (CodDep, Nombre, Fono, Jefe) VALUES
('DEP-TEMP01', 'Sala oscura', '64-29695', 'Aquiles Grito'),
('DEP-TEMP02', 'Cocina', '64-23776', 'Mirando Cosas');

Antes de crear los archivos sql, me olvide quitar la opcion de - Usar "backquotes" con tablas y nombres de campo - es por eso que en el rar los archivos tienen esas molestosas comillas, un error mio

Dan dijo...

Caramba, es verdad, que tontería; por más que miraba no veía el error, tienes toda la razón. Bueno voy a probar todo el código y a ir viendo poco a poco el resto de código de la página. Muchas gracias.

Anónimo dijo...

hola el proyecto seve bien sabes pero no podrias de porfavor subirlo a otro servidor como medifire porque ese en que esta nome deja bajarlo si no es mucho pedir..

Anónimo dijo...

buen aporte a los q estamos aprendiendo a trabajar con netbeans yo estoy haciendo el enlace con postgreSQL y me jala bien solo q la tabla seccion y prestamos no actualiza voy a ver como puedo hacer jalar de nuevo gracias

Anónimo dijo...

Muchas Gracias por el ejemplo ya lo hice jalar bien utilizando PostgreSQL de nuevo gracias si vos no somos nada

Anónimo dijo...

hola esta bien el proyecto,pero tengo una duda o talves me equivoque pero si tenemos la tabla prestamos y la de herramienta que es de alli donde se van a tomar las herramientar a prestar creo que en la tabla herramienta deberia ir rebajando la cantidad de harramientas prestada para asi saber cuantas hay en disposicion talvez puedes responderme esta duda esque yo ise un proyecto casi igual solo que era de rentar de videojuegos y en el producto rebajaba la cantida que tenia en disposicion eso es todo....

jc mouse dijo...

si y no, me explico, en el caso de un videoclub donde un video puede tener "muchas copias" y por tanto se necesita un control mas detallado de entradas y salidas SI se puede utilizar la forma que dices dependiendo de la estructura de tu base de datos (OJO), pero tambien NO, osea la cantidad de videos prestados puede saberse realizando una consulta a la BD y asi no tener que utilizar todo un campo en la tabla "videos" por ejemplo.

En el caso de "prestamo de maquinarias" una herramienta "es única", osea no puede exisitir un tractor con el mismo número de "placa" por poner un ejemplo, asi que no es necesario ese campo que dices.

todos los caminos conducen a roma :), pero hay unos mas largos y otros mas cortos

Anónimo dijo...

Hola gracias por responder ami duda tienes razon sabes tus totoriales mean ayudado mucho ya que yo estoy estudiando una lic. informatica y estoy empesando en esto de la programacion de java con netbeans. te agradesco que compartas tu proyectos ya que estoy seguro de que nos has ayudado a muchos si que adelante estare pendiente de tus totoriales

Gerardo dijo...

primero que todo te agradezco por todo lo que haces.
sabes tengo un problema y la verdad no se que hacer, intale mysql y cree las tablas, le agregue todo al proyecto, pero al ejecutar y dar click en "departamentos o herramientas", bueno en cualquiera no me muestra nada, ni siquiera error y si le doy click de nuevo me dice que la ventana ya esta abierta, si me puedes ayodar porfavor.

Muchas Gracias.

jc mouse dijo...

supongo a que te refieres a que el formulario hijo DEPARTAMENTO O HERRAMIENTA, no se ve, fijate que la etiqueta SHOW() este presente cuando llames los formularios, porque si te muestra el mensaje, quiere decir que el objeto se creo pero no te lo esta mostrando

Gerardo dijo...

todo arreglado y funcionando al 100%, te pasaste muchas gracias!!

Anónimo dijo...

Hola soy nuevo en esto de los codigos java desearia revisar la estructura de tus codigos pero desde el server en el q esta su archivo no me permite desacargar le agradeceria mucho si podria subirlo en otro server o si seria tan amable de enviar a mi correo attila46_1@hotmail.com.
De ante mano gracias y muy iteresantes sus codigos

Anónimo dijo...

Uff necesito este proyecto pero no puedo descargarlo el link ya murio.. Si pueden mandarme el mismo se los agradeceria! o arreglar el link. me lo envian: marbrice02@gmail.com

Anónimo dijo...

Por favor ¿podrían subir el archivo de nuevo? el enlace está roto.

Gracias y buen trabajo!!

Anónimo dijo...

Me gustaría aprender del código de este proyecto si alguien pudiera mandarmelo a mi correo porque el link esta roto...

ulikeme88@hotmail.com

saludos ^^

Mouse dijo...

enlace actualizado

Anónimo dijo...

hola, un favor. podrias de cirme donde pongo las librerias para que me funcione tu JAR?

projdbprestamo2\PROYECTO NETBEANS\prestamos\dist

alli esta en jar: prestamo.jary
y en una carpeta lib estan dis ibrerias, una de mysql y otra de substance, donde las pongo o copio para que el jar de PRESTAMO me funcione?

pòrque lo abro, pero cuando le doy algun boton, no abre ninguna ventana, y cuando le vuelvo a dar click me dice que la ventana ya esta abierta.

jc mouse dijo...

lee las instrucciones que estan dentro del RAR, el jar no te va a funcionar en tu pc porque necesitas cambiar desde netbeans el Root, Password de tu base de datos, ademas tienes que crear una base de datos "dbprestamo", tienes que tener instalado y configurado las librerias mysql-connector y substance, todo eso esta desglosado a detalle en el blog. suerte

Anónimo dijo...

ok hare eso, creo que mejor me meto al codigo y a ve que pasa.

muchas gracias.

InvestigacionOperaciones dijo...

Hola jc-mouse.

En primer lugar felicitarte por tan buenos post en serio de agradecer el que compartas tanto de tus conocimientos.

Seguidamente quisiera pedirte un favor cuando te compartes un tuto de gestión de usuarios, con roles y bitacora para la base de datos.

Saludos

Reycito dijo...

hola mi hermano yo tambien soy bolivia y me siento orgulloso de saber que hay gente que le pone ganas al estudio y quiere salir adelante con todas estas aplicaciones me doy cuenta que te interesa mucho la programacion en java estamos iguales quiero agradecerte por los los tutoriales y las aplicaciones que permanentemente estas publicando pero un consejo amigo utiliza algo como megaupload o rapishare para subir tus archivos esto de frakshare es pesimo no eh podido descargar algunas aplicaciones por que me da un erro saludos gracias espero lo arregles para que pueda aprende algo de tus aplicaciones gracias

Mouse dijo...

InvestigacionOperaciones:
Gracias, por el momento estoy ocupado pero proximanente estare subiendo nuevos proyectos, la mayoria ya los tengo hechos pero como sabran algunos, cuesta tiempo y esfuerzo hacer un post, subir archivos, y demas

Reycito:
gracias hermano, ya visité tu blog esta buenisimo

Andreiitha dijo...

Felicidades muy bueno tu programa me ayudara a realizar el mio...gracias! :)

rolandorip dijo...
Este comentario ha sido eliminado por el autor.
rolandorip dijo...

mouse gracias por tu gran aporte de ls tutoriales y proyectossoy tu segidor ^^, buenoe stoy haciendo este proyecto ya lo arme todo y todo perfecto, pero en netbeans no me corre, nose por ke y en jar k creastes solo se abre el ayuda, pero no los demas cuadros, ayudame este proyecto ya lo boy realizando 1 semana y mañana tengo k presentar este u.u ayudame porfa gracias

Anónimo dijo...

excelente codigo !!!!
no saves cuanto me ayudo !!!!

Vianey vargas morales dijo...

muchisismas gracias amigo mouse por la manera tan inmensa y humilde de compartir Dios te siga ayudando

Anónimo dijo...

Gracias, me parece interesante

Anónimo dijo...

no lo puede descargar

Luis E. Luza dijo...
Este comentario ha sido eliminado por el autor.

Post recomendado