Ir al contenido


Foto

[RESUELTO] tabla con registros que se autoborren


  • Por favor identifícate para responder
31 respuestas en este tema

#21 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 06 enero 2010 - 11:46

Hola luk2009,
Espero que no te enojes por lo que he dicho. Nomas te decía que lo pensaras más tranquilo.
Algo me dice que hay algo que no se está analizando en profundidad.

Yo sigo intuyendo que una combinación del campo STATUS es lo más viable. No termino de comprender como es que dices que ese enfoque te va a complicar las cosas.

Yo te invito a que sigas analizándolo, y pido que bajemos más a tierra lo que estás haciendo. ¿Podemos ver una muestra de como estás estructurando tus tablas?

Lo de conseguir esas cosas automáticas, se puede lograr (hay que ver bien esto... como he dicho y sigo diciendo... hay cosas sin analizar) con una adecuada combinación de triggers, SP y/o eventos.

El asunto radica amigo en que no contamos con todos los elementos. Tenemos una visión limitada de lo que llevas, y nos quieres hacer llevar a ver algo que no podemos (lo cual es bueno y deseable), por el simple hecho de que no nos comentas ese algo que está faltando.

No soy un gran experto ni tengo mucha experiencia pero si puedo decir y me juego a que hay algo tras todo esto que, o bien nosotros no llegamos a ver, o que tu no ves y nosotros intuimos por donde puede ir los tiros.

Si nos tranquilizamos y podemos analizar objetivamente cada cosa, en lo particular y en lo general, podremos ver diferentes alternativas y soluciones. Lo cierto es que cada persona tendrá una apreciación distinta de como enfocar las cosas. Así que en definitiva, tu deberás tomar la decisión... nosotros sólo nos estamos limitando a reflejar nuestro simple parecer.

Si hay algo que he aprendido es que en diseño de bases de datos es que no hay un diseño 100% que satisfaga a todos. Además, algunas cosas son difíciles de llevar a nivel DB y es mejor optar por llevarlo a nivel sistema y a la inversa también.

Podremos darte muchas opiniones, cada uno con sus matices, lo cierto es que mientras sientas esa sensación de "incomodidad" no estarás seguro de como llevar las cosas. Si quieres que desaparezca, debes estar abierto a evaluar opciones luego tu podrás sacar tus conclusiones y optar por una u otra. Se cual fuese, estoy completamente seguro que en alguna parte se te complicará y en otra se te hará más fácil.

Es el Jin-Jan del diseño de software... y está presente en muchos aspectos. La dualidad DB-Sistema, en la dualidad Acoplamiento-Cohesión, en la dualidad de las capas Negocio-Datos... en la dualidad POO-POA y también incluso en Estructurado-POO.

Saludos,
  • 0

#22 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 11 enero 2010 - 06:47

Hola.

Creo que no he acabado de comprender del todo lo que se quiere hacer.

Aún así voy a dar mi opinión, a ver si te abre más posibilidades.

1) Yo no soy partidario del campo estado. Ese campo, como bien has dicho antes, hay que mantenerlo. Por lo que necesitarás un proceso que se lance cada minuto y que actualice ese estado.

No me parece necesario, puesto que solo tienes que guardar la fecha-hora hasta que dura su periodo de pruebas. Con ello, si quieres saber si en estos momentos se encuentra aún en pruebas, solo tienes que mirar si la hora actual es menor a la de su fin de período de pruebas.

Es más, te puedes hacer un campo calculado, que te diga precisamente eso.

ALTER TABLE CLIENTES
ADD EN_PRUEBAS COMPUTED BY
(case when current_timestamp < coalesce(FIN_PRUEBAS, '1-1-1900') then 1 else 0 end)

Ahora ya puedes consultar el campo EN_PRUEBAS, sin necesidad de actualizarlo.

NOTA: El COALESCE está puesto por si el cliente no tiene periodo de pruebas, entonces comparo la fecha-hora actual con el 1 de enero de 1900, por lo que siempre dará falso. Es decir, si no tiene periodo de pruebas definido, pongo a Falso el campo calculado EN_PRUEBAS.

2) Finalmente he creído entender que cuando el cliente se encuentra en pruebas, no quieres que se registren unos determinados avisos. Yo eso lo haría con un simple Trigger en la Tabla de avisos.

Si pones un trigger BEFORE INSERT, entonces puedes comprobar si el cliente tiene el campo EN_PRUEBAS = 1, en cuyo caso lanzas una excepción y el registro no será dado de alta.

Saludos.
  • 0

#23 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 11 enero 2010 - 09:31

Marc me has dado unas ideas buenisimas. Te estas volviendo imprescindible en este foro. Gracias amigo, voy a trabajar con tus ideas.


  • 0

#24 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 03 febrero 2010 - 11:31

Hola a todos
Despues que he creado los campos calculados, lo cual hice con ibexpert y todo funciona bien con lo que queria hacer en el programa. Sin embargo cuando creo un query nuevo en el datamodule y le adiciono los campos, entonces al intentar correr el programa me dice que los campos calculados que habia creado en el otro query no se encuentran.

Me explico, creo un query nuevo y le añado los campos, entonces intento compilar el programa y me da el error de que no encuentra los campos calculados del otro query.

Alguna idea?
Imagen Enviada



  • 0

#25 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 04 febrero 2010 - 04:09

Hola luk2009, la verdad es que me he perdido un poco con tu explicación :), no entiendo bien si es que tienes dos querys, y porqué.

El caso es que solo te quería comentar que para Delphi, los campos calculas son como cualquier otro campo de Firebird, no los diferencia en nada (que yo sepa). Así que si tu consulta no puede verlos, es que has cometido un pequeño error en algún sitio, pero no tiene nada que ver con que el campo sea o no sea calculado.

Saludos.
  • 0

#26 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 04 febrero 2010 - 08:50

Gracias Marc por tu respuesta.

La idea es la siguiente, tengo los dos campos calculados en la tabla acmsub la cual esta en un query con un join con la tabla de nombre activas. vamos a ponerle a ese query1.  asi esta funcionando perfectamente bien y no tengo ningun problema.

Estoy ahora creando el query2 sobre la tabla  de nombre activas y cuando cargo los campos al query2 e intento correr el programa me da el error que te muestro arriba.  Entonces voy a recargar los campos al query1 y ahi no me encuentra los campos calculados, aunque si estan en la tabla.

  • 0

#27 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 04 febrero 2010 - 09:02

Saludos.

Es un error confuso, debes de revisar si la conexión esta bien, osea, si tu componente DataBase esta apuntando correctamente a la BD que tiene los cambios.

Pruebas y nos avisas!
  • 0

#28 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 04 febrero 2010 - 09:17

Rolphy tenias razon, El problema es que no tengo puesto el hostname en la conexion, porque se lo paso en tiempo de ejecucion. Pero como tengo una base de datos de respaldo en mi laptop, el sistema asume como localhost el hostname y en esa base de datos de respaldo no tengo los campos calculados.

El problema como dices era que estaba apuntando a una base de datos que no tenia esos campos y por ello no aparecian.

gracias rolphy.
  • 0

#29 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 04 febrero 2010 - 10:01

:D :D :D

Recién ayer estaba platicando con enecumene le comenté una anecdota que me aconteció hace ya un tiempo, resulta que me pasé 2 días (con sus noches) buscando un maldito problema al insertar registros en una tabla, pues bien, el programa que insertaba los registros lo hacía perfectamente, no errores, no avisos, nada, sin embargo en otro programa donde realizaba estadísticas de la información no aparecía nada de lo que se estaba ingresando, cero errores, cero avisos, cero información :@

Pues nada, que el programa de insertar registros estaba apuntando a la BD de producción mientras que el programa "cliente" apuntaba a la BD de desarrollo :s.

Claro, cuando me di cuenta no le dije a nadie, pero perdí dos días a lo wey jajajajajajaja

Salud OS
  • 0

#30 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 04 febrero 2010 - 10:13

Gracias egostar por tu apoyo, aunque de repente me acuerdo de aquel refran "Mal de muchos, consuelo de tontos". :smiley:

Siempre hay un dia que uno pasa por tonto, pero lo importante es contar con amigos como ustedes que entienden la situacion y tratan de ayudar a resolver el problema.

Eso es lo mas importante de este foro y que no debe perderse, el espiritud de ayuda y de cooperacion que hay.

En otros foros te insultan, se burlan o simplemente no te responden y  esas cosas son las que tenemos que evitar.

saludos  y gracias a todos. (y) 


  • 0

#31 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 04 febrero 2010 - 11:55

Como crees amigo, aquí no nos burlamos de nadie

Imagen Enviada
  • 0

#32 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 04 febrero 2010 - 06:57

no hablaba de ti en mi comentario, tu eres la excepcion que confirma la regla.  :D :D :D :D :D :D :D :smiley:
  • 0




IP.Board spam blocked by CleanTalk.