Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-05-2004
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 21
jzginez Va por buen camino
Suma de campos tipo time

Hola a todos estoy trabajando con firrbird 1.5 y tengo el siguiente problema:

estoy haciendo un sistema para producción de una empresa textil, tengo una tabla (TEstilo) que es un catálogo de los tipos de ropa
clave - descripcion
1 - camisa
2 - pantalon

Una tabla (TOperaciones) donde tengo las operaciones que se necesitan para hacer un estilo especifico y el tiempo que se tarda cada una de ellas, por ejemplo tengo las siguientes operaciones:
clave-descripcion-minutaje
1 - pegar manga - 00:00:30
2 - pegar cuello - 00:00:15
3 - coser bolsa - 00:00:25
4 - cerrar costados - 00:00:45
5 - cerra dobladillos - 00:00:10
6 - pegar botones - 00:01:00

Una tercera tabla (TOperEstilo) donde relaciono el estilo con las operaciones

estilo - operación
1 - 1
1 - 2
1 - 3
1 - 4
1 - 5
1 - 6
2 - 4
2 - 3
2 - 6

Necesito saber el tiempo que se tarda en producir un estilo es decir la suma de los tiempos de las operaciones que se usan en cada estilo, para empesar no podia sumar mis campos tipo time hasta que encontre el hilo de Campos tipo time El problema que tengo es que como resultado me esta dando cero, el triger que uso es el siguiente:

CREATE TRIGGER TOPERESTILO_AI FOR TOPERESTILO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable tiempoOper time;
declare variable TiempoEstilo time;
declare variable tiempoTotal Integer;
begin
/* Trigger text */
if (new.id_oper is not null)
Then begin
select minutaje from toperaciones where id = new.id_oper into :TiempoOper;
select minutaje from testilo where id = new.id_estilo into TiempoEstilo;
tiempoTotal = extract(hour from TiempoEstilo)*3600 + extract(minute from TiempoEstilo)*60 + extract(second from TiempoEstilo);
tiempototal = TiempoTotal + extract(hour from TiempoOper)*3600 + extract(minute from TiempoOper)*60 + extract(second from TiempoOper);
update testilo set minutaje = :tiempoTotal where id = new.id_estilo;
end
end


Gracias
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita
  #2  
Antiguo 21-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Hola jzguines.

Ya que habitualmente estas posteando mensajes en los foros, creo que es tiempo de aprender a usar las etiquetas [ code ], [ delphi ] y [ sql ] para publicar trozos de código correctamente indentados y con la sintaxis resaltada, que son mucho mas legibles. Al Inicio de cada foro tenes un mensaje que te ayudará a aprender a usarlas, y un vínculo en mi firma a la ayuda de la etiqueta [ code ]. El uso de las otras dos es exactamente el mismo.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 21-05-2004
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 21
jzginez Va por buen camino
gracias por lo del uso de etiquetas pero como hago mi suma
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita
  #4  
Antiguo 01-06-2004
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 21
jzginez Va por buen camino
Hola a todos esperando que la falta de respuesta sea porque no escribi el codigo dentro de las etiquetas correspondientes reescribo el codigo
Código SQL [-]
CREATE TRIGGER TOPERESTILO_AI FOR TOPERESTILO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable tiempoOper time;
declare variable TiempoEstilo time;
declare variable tiempoTotal Integer;
begin
/* Trigger text */
if (new.id_oper is not null)
  Then begin
    select minutaje from toperaciones where id = new.id_oper into :TiempoOper;
    select minutaje from testilo where id = new.id_estilo into TiempoEstilo;
    tiempoTotal = extract(hour from TiempoEstilo)*3600 + extract(minute from TiempoEstilo)*60 + extract(second from TiempoEstilo);
    tiempototal = TiempoTotal + extract(hour from TiempoOper)*3600 + extract(minute from TiempoOper)*60 + extract(second from TiempoOper);  
    update testilo set minutaje = :tiempoTotal where id = new.id_estilo;
   end
end

lo último que he intentado es

Código SQL [-]
CREATE TRIGGER TOPERESTILO_AI FOR TOPERESTILO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable preciotemp float;
declare variable tiempo1 time;
declare variable tiempo2 time;
begin
  /* Trigger text */
  if (new.id_oper is not null)
   Then begin
  select pagooper, minutaje from toperaciones where id = new.id_oper into reciotemp, :tiempo1;
  update testilo set precio = precio + reciotemp where id = new.id_estilo;
  select minutaje from testilo where id = new.id_estilo into :tiempo2;
  if (tiempo2 is null)
   then update testilo set minutaje = :tiempo1 where id = new.id_estilo;
  else update testilo set minutaje = minutaje + :tiempo1 where id = new.id_estilo;
  end
end


pero me indica el siguiente error que segun yo es en el if
Código PHP:
Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements
.
Dynamic SQL Error.
expression evaluation not supported
espero me puedan ayudar gracias
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita
  #5  
Antiguo 01-06-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Hay muchas razones por las que puede ser que nadie te responda. Porqué no se conoce la respuesta, no se entiende la pregunta, a uno no le gusta como se ha planteado, nadie ha tenido tiempo de mirarselo aún, ...

Imagino que el campo minutaje de testilo será de tipo integer, puesto que este es el tipo del valor calculado.

Prueba a depurar el código, es decir escribe este código en un procedimiento almacenado, y siguelo línea a línea. De esta forma verás en que línea no se comporta como lo esperas.

Ciertamente en el if tienes un problema if (tiempo2 is null). Más bien debería ser if (:tiempo2 is null). (Esto no implica que no haya otros problemas).

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #6  
Antiguo 02-06-2004
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 21
jzginez Va por buen camino
Hola guillotmarc lo de la falta de respuestas fue puro sarcasmo debido a que si no mal recuerdo es la primera vez que escribo un hilo en interbase y ni tu u otro master me habian ayudado con la solución ( siempre ay una primera vez), en caunto al tipo del campo en TEstilo perdon di por acentado que se entendia el tipo ( como dicen en las reglas del foro no hay que dar nada por entendido) su tipo es timer.

Ahora bien estoy usando IBExpert y no le he encontrado donde estan las herramientas de depuración si me puedes dar una ayuda te lo agradecere.
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita
  #7  
Antiguo 02-06-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Mi respuesta también fué irónica (aunque gracias por lo de master), personalmente dejo pasar un cierto tiempo antes de participar en un hilo, para dar ocasión a que participe más gente.

Respecto al tipo del campo TEstilo, realmente se ve a venir que es de tipo Time, por eso lo he resaltado, tiene que ser de tipo Integer (que es el tipo del valor que has calculado).

Lo que no entiendo es que te deje el valor a cero, en lugar de saltar un error. Estas haciendo una conversión a lo bestia de tipos, que no son convertibles entre ellos. Compruebalo con la siguiente consulta :

select cast(100 as time) from rdb$database

Prueba a construir una cadena 'hh:mm:ss', esto si que es convertible al tipo time.

Respecto a la depuración, la versión Personal (gratuita) de IB-Expert no tiene herramientas de depuración, solo están disponibles en las versiones comerciales (de pago). Puedes adquirir una versión comercial de IB-Expert, o utilizar alguna de las otras herramientas de Administración para IB/FB.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
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


La franja horaria es GMT +2. Ahora son las 12:48:40.


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