Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Question Consejo para una aplicación ( paradox )

Hola a todos
primero saludo a todos soy nuevo aquí, espero poder conocer amigos y que sea de agrado a la comunidad.

Bueno resulta que estoy en mi primer trabajo xD ya que nunca trabajé soy un chaval no mas, ahora mi jefe quiere que aprenda delphi y eso es lo que estoy haciendo y me gusta mucho el único lenguaje que se es python y algo de php pero ni al caso ahora al grano...

estoy haciendo una aplicación para el "control de asistencia de usuarios ( empleados ). Bueno y decidí usar paradox para eso, ahora lo que no se muy bien es como hacerla cuantas tablas ocupar si van a tener relación unas con las otras.
Bueno la aplicación lo unico que tendrá sera un panel principal donde pondrán un user y pass los empleados y picar en un boton y automaticamente se almacena la fecha y hora en que entro al trabajo y lo mismo para salir mete user y pass y la aplicación guardará la hora y fecha de salida.... bueno esa parte no se como hacerla, habia pensado en hacer una tabla para cada usuarios pero no creo que sea la solucion correcta. y otra es relación entre tablas ( cosa que no se pero puedo aprender ) ahora también tendrá un panel de administración y un panel de usuarios, en el panel de admin lo que podrá hacer es agregar usuarios borrarlos y modificarlos ahhh y ver el reporte de cada usuario ( reporte de las horas totales trabajadas ) esa parte de agregar eliminar modificar usuarios ya la tengo echa ( cosa que me costo mucho ) todo se conecta a una tabla (usuarios.db) y donde se almacenan - nombre, apellidos ... etc el user y pass del usuario y tambien del otro panel que mencioné (panel del usuario) donde tiene un login y que solo puedan ver las horas trabajadas, totales ( solo del user que se logeo )

Bueno creo que eso es todo... necesito consejos y ayudas para poder hacer esta aplicación, ya tengo algo avanzado puesto que recien tengo 1 semana con delphi

bueno espero haber sido claro y que puedan darme una pequeña opinion sobre como hacerla puesto que es la primera que hago.

saludos y gracias de antemano

PD me tendrán mucho por aquí
Responder Con Cita
  #2  
Antiguo 01-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Bienvenido a ClubDelphi, el número de mensajes te delata .

Normalmente a cada usuario se le asigna un código, es decir un número entero, y a partir de ahí haces varias tablas con la información que quieras almacenar.

De momento se me ocurren varias tablas:
Código:
tabla usuarios:
CodigoUsuario  (autonumérico) clave primaria
nombre
apellidos
...

tabla login:
CodigoUsuario  (entero) clave primaria
NombreUsuario  char
pass                char

tabla entradas:
CodigoUsuario  entero clave primaria
entrada  datetime clave primaria
salida     datetime
En cuanto a la relación entre tablas, debes saber que Paradox no implementa la integridad referencial, por tanto tienes que hacerlo a mano. Dicho de otra forma, cuando das de alta un usuario, se dispara el autoincremental "codigoUsuario" y ahora tú tienes que copiar ese código a la tabla login para "relacionar ambas tablas". Otras Bases de datos lo hacen automáticamente al relacionar las tablas, paradox no.

Personalmente no te recomiendo paradox, es un sistema muy antiguo, pero es tu elección, no la mía.

Para actualizar las tablas al entrar un usuario en el sistema, puedes tener una TQuery preparada con la instrucción sql de esta forma:

Código SQL [-]
 update entradas set entrada = :fecha where CodigoUsuario = :codigo
para ejecutarla le pasas los parámetros fecha y código.
Código Delphi [-]
query1.Parambyname('fecha').AsDatetime := now;
query1.Parambyname('codigo').AsInteger := < < CodigoUsuario al hacer el login > >
query1.ExecSql;

Cuando quieras hacer un informe de entradas y salidas, puedes usar algo así:
Código SQL [-]
select entrada, salida 
from entradas 
where entradas.codigoUsuario = 3
Así tienes un listado de las entradas y salidas del usuario 3.

Seguro que otra gente te dará otros puntos de vista.

Saludos y buena suerte con el sistema.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 01-12-2006 a las 21:46:13.
Responder Con Cita
  #3  
Antiguo 02-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
hola lepe

primero muchisimas gracias por responder y tu consejo que me servirán de mucho en este nuevo mundo de delphi
Si, ya leí que eso de las tablas paradox esta pasado de moda y "creo" ademas no soporta mucho SQL pero bueno si es que quiero hacer algo bién tengo que hacer caso a los con mas experiencia como uds.
Ahora quisiera mas consejos como los tuyos o si quieres aumentar algo mas te estaria muy agradecido, de que motor de base de datos usar, cuantas tablas crear que conección entre ellas deve haber y cosas así para que comiense de nuevo mi aplicación puesto que ya la tenia algo echa pero un 20 % creo, bueno espero mas comentarios y consejos y gracias de nuevo por adelantado
gracias y saludos

PD si quieren subo mi proyecto en zip para que lo vean y así puedan tener una idea mas clara y así quedaria aquí el proyecto o por que no comensar uno desde el principio
Responder Con Cita
  #4  
Antiguo 02-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
No sé si conoces "la cara oculta de delphi 4" (está desfasado, pero los principios de programación y los métodos que usa son actuales) una búsqueda en google te llevará sin duda al link de descarga.

Lo que más dolores de cabeza te dará es tener en red a paradox funcionando sin fallos, busca en el foro por NETFILEDIR cuando lo necesites.

Si bien es cierto que el sql de paradox no es "actual" (porque se dejó de actualizar) tiene muchísimas características y siempre es más potente que las equivalentes instrucciones en delphi, es una opinión personal. Por ende, hazte de un manual de sql de internet.

Usando otra tecnología, mira en este hilo y en este otro

Para las horas totales, las fechas se guardan como un número flotante:
- la parte entera son los días transcurridos desde el 01/01/1900 (fecha base del calendario del ordenador)
- la parte decimal corresponde a la hora.

Esto permite restar fechas tal que así:
Código Delphi [-]
var  salida, entrada : TDatetime;
     total, horas:word;
begin
total := salida - entrada

horas := hoursBetween(salida, entrada);

Aquí he usado dos técnicas distintas:
- En total tienes los milisegundos transcurridos entre las dos fechas, ahora solo es cuestión de ir dividiendo y restando hasta obtener un resultado del tipo : " 1 día 2 horas 3 minutos 44 segundos"

- En horas, directamente ya tienes 26 horas "y pico"

Depende de qué quieras usar.

Para no tener que recalcular cada dos por tres las horas trabajadas, podrías añadir un campo en la tabla Entradas (que nombre más malo para esa tabla, quizás cambiando el nombre a "Horario" quedara más entendible), en fin, en esa tabla añades un campo "Horas" de tipo Double, de tal forma que al introducir la fecha de salida, también calculas la diferencia entre ambas y lo guardas, para solicitar listados te podría ayudar mucho.

Edito: Siendo tu primer programa en Delphi y con pocos conocimientos como tú has dicho, para ser sincero y realista, podrías usar Paradox, te dará dolores de cabeza, pero no hace falta muchos conceptos para hacerlo funcionar, más que nada hace falta imaginación para resolver los problemas que te llegarán. Con Firebird u otro sistema, necesitarás entender los conceptos y algo más de pericia al volante. Existe mucha información sobre Interbase / Firebird, pero la mejor documentación, viene en inglés en www.ibphoenix.com Si dominas el inglés leído, no te lo pienses y cambia a Interbase / Firebird / Mysql / etc.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 02-12-2006 a las 13:08:21.
Responder Con Cita
  #5  
Antiguo 02-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola nuevamente Lepe te agradesco de nuevo por la respuesta clara y sin mas vueltas que dar ... mira yo yo tengo la biblia del delphi 4 en PDF y la verdad es que no le di una pasada ( error mio ) ahh y también tengo varios tutos de SQL que por cierto entiendo mas o menos todo los queryes que me ponen. Pero bueno ahora la leeré un poco mas que todo eso de las bases de datos me interesa mucho, ahora estoy en el trabajo, disculpen por no responder antes por que estaba haciendo otras cosas y ademas esperando mas respuestas para asi dar otra de mis preguntas jejeje... bueno la cosa es que hablando con el jefe le comente lo del problema de paradox y me dijo que no hay problema por que solo será para un PC y no se trabajará en red con ese sistema de asistencia de empleados o usuarios bueno como pero par ami no es ningún problema pasarme a otro motor de base de datos.. y no conosco FIREBIRD y tampoco INTERBASE pero si MYSQL, pero repito yo no me hago problema de aprender lo que sea si para eso estoy pero por el momento creo que esta bién el uso de tablas PARADOX

Bueno quiero mostrarles mi avance hasta este momento, no se si álguien se molestará en mirarlo pero bueno ya hice la intención y cuando lo complete el que quiera aprender me puede pedir el source ( me refiero a newbies como yo )

Bueno espero mas comentarios o consejos para hacer mas que todo las tablas por que eso de tomar la decición que motor voy a usar me da igual y todos se "deben" manejar de una igual forma o parecida bueno eso es todo y muchas gracias por toda la colavoración del foro


saludos gente


Fichero Adjunto ( control de asistencia )

http://www.mytempdir.com/1095772

PD mi trabajo de 5 dias con delphi
Responder Con Cita
  #6  
Antiguo 03-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Código Delphi [-]

procedure TFAgregar_Usuario.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  //Cerramos la Tabla al cerrar el form
  TUsuarios.Cancel;
  //liberamos el formulario de memoria
  //Action := caFree;
end;

¿Seguro que cierras la tabla? jejeje para mí que el Code Insight de delphi te ha jugado una mala pasada, en lugar de Close estas usando Cancel

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 03-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
jejeje es verdad Lepe bueno tendré un poco mas de cuidado en esos aspectos.

Pero en fin uds como lo ven ??? le falta algo ? esta mal organizado ?

una cosa mas... ta carpeta datos la ponen en c:\ y listo cosa que quede c:\datos y así no tendrán que compilarlo de nuevo..

bueno un saludo y gracias Lepe por haberte dado la molestia de mirarlo y revisarlo pero quisiera mas criticas para que me ayuden a observar en que esta el error o que tengo que hacer para ahorrarme lineas de codigo o memória o cosas así (tips)
bueno saludos y gracias de new



Responder Con Cita
  #8  
Antiguo 04-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Bueno.. resulta que me baje los componentes ZEOS y funcionaron sin problema alguno y tampoco tuve problemas para la conección
Bueno ahora tengo asi mi base de datos.

Código SQL [-]
-- Base de datos: `sisconas`
-- 
CREATE DATABASE `sisconas` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE sisconas;
-- --------------------------------------------------------
-- 
-- Estructura de tabla para la tabla `datos`
-- 
CREATE TABLE `datos` (
  `ID_usuario` int(11) NOT NULL auto_increment,
  `Nombres` varchar(30) NOT NULL default '',
  `Apellidos` varchar(30) NOT NULL default '',
  `Telefono` varchar(15) default NULL,
  `Celular` varchar(15) default NULL,
  `Email` varchar(30) default NULL,
  `Direccion` varchar(255) default NULL,
  `Otros` varchar(255) default NULL,
  `Fecha` date default '0000-00-00',
  `User` varchar(10) NOT NULL default '',
  `Pass` varchar(10) NOT NULL default '',
  `Nivel` int(1) NOT NULL default '0',
  PRIMARY KEY  (`ID_usuario`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- 
-- Volcar la base de datos para la tabla `datos`
-- 
-- Estructura de tabla para la tabla `horarios`
-- 
CREATE TABLE `horarios` (
  `ID_usuario` int(11) NOT NULL auto_increment,
  `Entrada` datetime NOT NULL default '0000-00-00 00:00:00',
  `Salida` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`ID_usuario`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


bueno espero que lo haya hecho bién ahora la duda que tengo es que como hago para que el ID_usuario de la tabla horarios sea el mismo de ID_usuarios de la tabla datos, para que al hacer el reporte utilize esa sentencia sql que me paso Lepe en el anterior post.

BUeno para el que quiera ver la aplicación esta en mi anterior post todo será igual ahora lo que quiero hacer es esa parte principal donde se logean los usuarios para registrar su horario

bueno saludos

PD algun moderador creo que deberia mover este tema al subforo MYSQL

gracias de antemano
Responder Con Cita
  #9  
Antiguo 04-12-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Baje el programa y esta simpatico, muy basico pero bien.
Ahora ma queda la duda, Paradox o Mysql, cual va a ser la base de datos, veo que estas usando zeos, bueno esto me dice que te vas por mysql o no?
Creo que siempre es bueno empezar con algo y terminar con lo mismo, si al final se necesita cambiar pues se hace.
Sigue como vas, para mi vas muy bien, solo persistir.
saludos
Responder Con Cita
  #10  
Antiguo 04-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola Caral

gracias por lo de simpatico jejeje bueno pero no es funcional y en si no sirve para nada xD, bueno me quedaré creo con paradox para esta pequeña aplicación y ya para las demás usaré mysql, ahora alguna idea de que el usuario al meter su user y pass se registre su horario con su ID y así al hacer el reporte me de solo las horas y fechas de ese usuario algo asi como la sentencia que puse Lepe en el segundo post, ahh una cosa mas Caral con respecto a lo que esta simple es verdad pues es mi primer programa en delphi, una cosa que mas podría implementarle ? La verdad no se me ocurrio nada mas que los reportes

Bueno saludos

PD lo de mysql solo era una opción y en si resulta lo mismo los mismos querys etc.

saludos de new y gracias.
Responder Con Cita
  #11  
Antiguo 05-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Dado que es MySql ya dejaré de contestar porque no sé mucho, al menos en Firebird puedes poner:

Código SQL [-]
`Entrada` datetime NOT NULL default 'NOW'

NOW es una función que entiende, por tanto al crear un nuevo registro en la tabla usuarios (para que quede constancia de su entrada en el sistema), automáticamente se añade la fecha que tenga el servidor.

Id_usuario no puede ser clave primaria, ya que no permitiría la entrada de un mismo usuario dos veces.

En la tabla horarios, el id_usuario no puede ser un autoincrement, ya que se incrementaría automáticamente, y por tanto, no coincidiría con el verdadero código del usuario.


Yo puse clave primaria dos campos a la vez, el id_usuario y la fecha de entrada (ambos a la vez forman la clave primaria), ya que las dos cosas a la misma vez es imposible que ocurra, salvando una posible violación de clave primaria en la tabla.

Otra cosa: Si te fijas en esta línea:
Código SQL [-]
 `User` varchar(10) NOT NULL default '',

UserName
"User" aparece en negrita, lo que quiere decir que es una palabra reservada de SQL, por tanto, al intentar acceder por SQL a ese campo te dará errores. Cambia el nombre del campo añadiendo una letra más. Acabo de hacer la prueba y "UserName" no lo detecta como palabra reservada.

Faltaría añadir los índices secundarios a los campos que vas a acceder constantemente, por ejemplo el nombre del usuario, que lo buscarás cada dos por tres en el login de tu sistema.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 05-12-2006 a las 00:47:32.
Responder Con Cita
  #12  
Antiguo 05-12-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola BlackDaemon
Me he tardado un poco en contestarte porque estaba tratando de hacer algo para que te sirviera de ejemplo.
Por lo de simpatico, lo digo con la mejor de las intenciones, nunca en modo burlon, no se me ocurriria hacer eso nunca, menos como aprendiz que soy.
Bueno aqui te envio un ejemplo sencillo, modificando tu programa.
Hay usuarios autorizados y no autorizados, con esto evitas varias cosas, ya lo veras, si entras con usuario caral, clave caral, te aparece el menu principal, si entras con el usuario nada, el menu desaparece.
Pruebalo, tal vez te sirva de guia.
La entrada se registra como entrada o salida y se registra la fecha, la hora y el usuario, no he echo mas modificaciones para que las veas y si te gustan poder seguir tu mismo.
Aqui esta:
http://rapidshare.com/files/6215322/...encia.zip.html
Saludos
Responder Con Cita
  #13  
Antiguo 07-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola Caral , jejej gracias por lo de simpatico en serio xD es que no puedo creer que este bién, aunque no me gusta mucho por que veo ejemplos de otros y lo hacen con un buen aspecto visual, yo creo que con el tiempo iré adquiriendo experiencia en eso, me gusta muchisimo delphi y espero manejarlo con el tiempo bien y poder usar como herramienta de trabajo en mi futuro.

Bueno ahora pasando al otro tema te doy muchas GRACIAS Caral por darte el tiempo de hacerme un ejemplo verdad que dan ganas de llorar
bueno lo miraré y luego te digo que tal y que cosas mas le quisiera agregar...
para ser sincero no se que mas agregarle... a ver alguien con mas experiencia quisieran que me digan que cosas mas se le puede agregar al programa... me refiero a opciones... ya tiene reporte osea la planilla, Bueno espero mas ideas para que asi mi primer programa valga la pena

bueno saludos y muchas gracias Caral y Lepe con gente como uds. si vale la pena aprender..

PD.- LEpe ya estoy leyendo La cara oculta de delphi 4
Responder Con Cita
  #14  
Antiguo 12-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Bueno, me perdí un poco del foro por que he estado muy ocupado con el trabajo jiji ( sarcasmo ) Lo que pasa es que ya casi tengo lista la aplicación ahora tengo solo 2 problemas.. bueno vamos por el primero y el mas importante.

Resulta que tengo 1 tabla donde almaceno las horas, fechas de entrada y salida de cada usuario ( emleado ) .... Bueno ahora el problema es a la hora de sacar el reporte con el total de las horas y días trabajados por que el formato en el que se almacena en las tablas es este:

Time : hh/mm/ss ej: -> 08:22:47 a.m.
Date : dd/mm/aaaa ej: -> 11/12/2006

Ahora el problema es que tengo que hacer que me saque 2 reportes uno con el "total" de horas trabajadas al mes y el segundo reporte es que me saque un total de minutos/horas de retrazo desde la hora de entrada... por ej:

Hora de entrada 7:30 --> por ej. esa es la hora de entrada a la empresa ahora un empleado llega a las 7:40 y ya sería 10 minutos de retrazo que tiene al día y tengo que sacar en el reporte eso mas... osea los minutos de retrazo que tenga cada empleado al día ... así para que al 3er retrazo que tenga tendrá una sanción o algo

Bueno aqui les deja mis tablas de asistencia.db de fechas y horas.

Field Name Type zise key
--|--------------|-----|----|----|
1 | Id_asistencia | + |
2 | id_usuario | N |
3 | HoraEntrada | T |
4 | FechaEntrada | D |
5 | HoraSalida | T |
6 | FechaSalida | D |

Bueno ahora para el reporte es lo que tengo problema..


saludos y gracias de antemano
Responder Con Cita
  #15  
Antiguo 12-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
¿Cual es el horario de entrada / salida?
¿algún día de la semana cambia ese horario?
¿existe algún turno de noche de tal forma que se entre a las 23:45 y se salga de trabajar al día siguiente?

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #16  
Antiguo 12-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola Lepe a tu primera pregunta.

La hora de entrada y salida es por ej en la mañana -> entrada y al medio dia -> salida... ahora cuando entra en la tarde lo cuenta como entrada y cuando sale en la tarde lo cuanta como salida No sé si lo hice bién pero creo que si, ahora a tu segunda pregunta.. NO ningún día cambia el horario. Todos los dias es una entrada a las 8:30 y salida a las 12:30
y la tercera pregunta.. también NO.. no existe ese turno todo es en el día y se sale a las 7:00 pm

Ahora regresando a lo que yo estoy haciendo.. es esto para sacar las horas totales en el reporte
--- Lo saqué de un post de LEPE era cuestión de buscar un poco ----

Código SQL [-]
select
  sum(
    (
      3600*extract(hour from HoraSalida) +
      60*extract(minute from HoraSalida) +
      extract(second from HoraSalida)
    )
    -
    (
      3600*extract(hour from HoraEntrada) +
      60*extract(minute from HoraEntrada) +
      extract(second from HoraEntrada)
    )
  )
  as HorasTotales
from
  asistencia
where
 id_usuario = :id_usuario

Bueno ahora como dice en el otro post.. SI me da como resultado la resta de la hora de salida con la hora de entrada y me da un total de hotas trabajadas en un periodo.. podría ser de toda la mañana o tada la tarde y para convertir ese numero entero ( segundos ) en formato H M S estoy usando esto

Código Delphi [-]
var  T, H, M, S: Integer;
Time: TTime;
begin
  T := Query1['HorasTrabajadas'];
  H := T div 3600;
  M := (T mod 3600) div 60;
  S := (T mod 3600) mod 60;
  Time := EncodeTime(H, M, S, 0);
end;

Pero ahora mi duda es que ese HorasTrabajadas tiene que estar si o si en una columna ?
creo que no, pero queria hacer que se almacene eso mas en una columna de mi tabla

Field Name Type zise key
--|--------------|-----|----|----|
1 | Id_asistencia | + |
2 | id_usuario | N |
3 | HoraEntrada | T |
4 | FechaEntrada | D |
5 | HoraSalida | T |
6 | FechaSalida | D |
7 | HorasTrabajadas |T|

Bueno espero respuestas

saludos y espero haber sido claro si no pregunten y yo con gusto les doy mas datos

gracias por adelantado
Responder Con Cita
  #17  
Antiguo 13-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Ya veo que andas a pasos agigantados, me he quedado gratamente impresionado.

Las horas trabajadas no creo que pueda guardarlas en un formato Time, ya que si trabaja 24 horas, el formato Time cambia a cero la hora automáticamente (es lógico, solo acepta valores de 0-23 horas)

Quizás fuera mejor dejarlo como un campo que se cree al vuelo dada 2 fechas, no sé si te gustará... ya me dirás.

Para tu consulta:
Sería armar un procedimiento almacenado (store procedure), con dos parámetros de fechas, así puedes saber las horas trabajadas. El procedimiento almacenado sería de selección, de tal forma que devuelva los datos del trabajador más una columna añadida (posiblemente de texto para facilitar las cosas) donde se indique esas horas trabajadas o incluso los minutos que ha llegado tarde cada día.

(Los cálculos que haces en delphi, también los podrás hacer dentro del procedimiento almacenado)

Si quieres añadir el campo horas trabajadas, lo mejor sería un trigger (disparador) en el afterUpdate de la tabla, de esa forma siempre que se guarde algún valor, la base de datos intentaría hacer el cálculo automáticamente.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #18  
Antiguo 14-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola Lepe jejej lo que pasa es que yo cuando me propongo algo siempre estoy sobre eso y pues asi uno avanza muy rápido mas con la ayuda de uds y de un amigo ( garcez ) xD
Bueno pero ahora si que no te entendí mucho lo que me dijiste.
Vamos por partes...
En eso de las horas trabajadas tienes toda la razón que no se podría guardar las horas trabajadas en formato TIME por el motivo que me dices, ahora seria de agurdarlo en un campo Numérico ??? O Alphanumérico ?? o guardaria el tiempo en segundos ?? y al momento de hacer el reporte lo transformo al formato H/M/S ??
Bueno solo eso faltaría para completar mi aplicación es que me de un reporte completo y hacer lo que mi jefe me pide y mas aún si es mi primer trabajo y será mi primer sueldo este 16 y lo que quiero es que no me pague por nada.. bueno aunque ya programé su página web xDD
Pero quería terminar esta aplicación hasta el 16 por que luego pienso viajarme unas semanas al campo de vacaciones pues ya salí de la escuela
bueno al final terminé hablando de mi vida personal como si álguien le interesaría

saludos y suerte
Responder Con Cita
  #19  
Antiguo 14-12-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola BlackDaemon
He seguido de cerca tu progreso y me parece, que dentro de poco te pido consejos.
Para hacer lo que quieres, yo, haria que se interpretaran las horas como un simple float, donde los segundos fueran los decimales, ahunque creo que en verdad los segundos no deberian importar.
Una vez hecho esto, haria una simple resta de los datos y los pasaria a la tabla empleados, donde se cambie continuamente el dato.
Bueno son unas idea nada mas.
Vas muy bien, ni me meto, por que lepe te esta ayudando mas.
Saludos
Responder Con Cita
  #20  
Antiguo 14-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola Caral.. pues es que ahora si que estoy medio fregado a la hora de hacer eso.. aparte que no entiendo mucho las alicaciones con reportes osea no le entiendo mucho como hacer las sumas o restas en la aplicacion puesto que no hay algún boton o algo para hacer clic xDD creo que tendria que poner las sentencias SQL en oncreate del form verdad ?? o en el objec inspector SQL del componente TQuery ??

bueno espero respuestas que me estoy liando solo en algo que no creo que sea muy complicado..

saludos y gracias por responder rápido

ya es hora de salida de mi trabajo responderé mañana
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consejo para impresion lbidi Impresión 2 02-08-2006 03:58:22
Consejo aplicación Internet (Backups) Gabriel Firebird e Interbase 2 26-12-2005 15:36:59
Consejo para manejar tablas Paradox Coco_jac Varios 8 17-11-2005 17:27:17
Consejo para Acelerar Procesos manuelpr Varios 2 08-03-2005 09:02:22
Consejo para desarrollar en linux Casimiro Notevi Varios 2 05-01-2005 10:41:51


La franja horaria es GMT +2. Ahora son las 17:36:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi