Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Ayuda con Contadores en interbase (https://www.clubdelphi.com/foros/showthread.php?t=70365)

Ares1989 17-10-2010 01:52:58

Ayuda con Contadores en interbase
 
Hola soy nuevo en este foro y tengo un problemilla que no me ha dejado dormir; Estoy trabajando con una base de datos en interbase y tengo dos tablas (Tabla 1 y Tabla 2) con los siguientes campos: Tabla 1: id, nombre, apellido,..., tipo, cargo, categoria. Tabla 2: tipo, cargo, categoria, sueldo_unitario, contador.
- La llave primaria de tabla 1 es id y se relaciona con mi tabla 2 a través de los campos: (tipo, cargo, categoria) como se habrán dado cuenta estos tres últimos campos son la llave primaria de Tabla 2. Ahora bien mi urgencia es saber como hago para que en el campo contador de Tabla 2 se almacene la cantidad de empleados y que este contador se actualice cada vez que ingrese o elimine un empleado. Algo como esto:
tabla 2
tipo: A; cargo: B; categoria: C; sueldo_unitario: 10; contador: 1
tipo: A; cargo: B; categoria: D; sueldo_unitario: 350; contador: 4
tipo: C; cargo: B; categoria: D; sueldo_unitario: 1200; contador: 3

- En este ejemplo por lo menos represento lo que quiero: que el contador me muestre cuantos empleados de tipo A Cargo B y Categoria C existen, etc.
Agradezco la ayuda y apreciaría cualquier colaboración de ustedes los expertos ya que soy nuevo en programacion y en este excelente foro. GRACIAS!!

Casimiro Notevi 17-10-2010 12:38:10

Si te digo la verdad, no entiendo el concepto que planteas.

marcoszorrilla 17-10-2010 12:42:20

Me da la impresión que lo que plantea se resolvería con un Procedimiento que sumara agrupando por los conceptos que el comenta y luego los resultados los trasladara a la otra tabla con un Update.

Un Saludo.

Ares1989 17-10-2010 16:58:25

Gracias por sus respuestas pero mi duda persiste, por ejemplo para yo saber cuantos empleados tengo en relación a cada tipo, cargo y categoria introduzco el siguiente código:

SELECT TIPO, CARGO, CATEGORIA, COUNT (*) FROM Tabla1, Tabla2
WHERE Tabla1.TIPO=Tabla2.TIPO AND
Tabla1.CARGO=Tabla2.CARGO AND
Tabla1.CATEGORIA=Tabla2.CATEGORIA
GROUP BY TIPO, CARGO, CATEGORIA

el resultado me lo demuestra así:
tipo:A cargo:B categoria:C count:6
tipo:A cargo:B categoria:D count:2

...y es correcto! pero Ahora bien como hago para que cada vez que inserte o elimine un empleado de la tabla 1, aparezca en el campo 'contador' que se corresponda con mi tabla2, la cantidad de empleados que existen producto de la inserción o eliminacion. Concuerdo mucho con el planteamiento de Marcos pero aún no estoy muy claro en el cómo construir ese código. Agradezco sus respuestas por favor! :)

cloayza 18-10-2010 02:45:20

Bueno hay dos formas de hacerlo

En un trigger para Tabla2 en la base de datos que cada vez que se ingresa o elimina un registro en Tabla1, se dispare

Otro en el componente de tu aplicacion TIBTable o lo que sea (No indicas que componentes de acceso estas usando :mad:), en el afterinsert o afterdelete ejecutes el codigo siguiente valido para la forma anterior.

Código SQL [-]
UPDATE TABLE2
SET CONTADOR=(SELECT COUNT(*) FROM TABLE1
                        WHERE Tabla1.TIPO=Tabla2.TIPO AND
                        Tabla1.CARGO=Tabla2.CARGO AND
                        Tabla1.CATEGORIA=Tabla2.CATEGORIA
                        GROUP BY TIPO, CARGO, CATEGORIA)
WHERE Tabla2.TIPO=:TIPO AND
          Tabla2.CARGO=:CARGO AND
          Tabla2.CATEGORIA=:CATEGORIA

Saludos

Ares1989 19-10-2010 18:20:33

Wow! muchas gracias cloayza de verdad muy agradecido por tu respuesta, de seguro este código que me facilitastes me servirá más adelante cuando haga la conexión; disculpa las molestias pero me podrías indicar el código para crear el trigger para tabla 2 cada vez que inserte o elimine un registro de tabla 1, no sé como hacerlo; lo que pasa es que soy nuevo programando! Saludos.

rastafarey 20-10-2010 02:37:29

Resp
 
Bueno la respuesta que te dio cloayza la puedes complementar creando contador como campo calculado.


La franja horaria es GMT +2. Ahora son las 16:31:20.

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