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 30-07-2013
xeuz xeuz is offline
Registrado
NULL
 
Registrado: jul 2013
Posts: 3
Poder: 0
xeuz Va por buen camino
Ayuda con modificacion masiva

Hola, necesito hacer un cambio masivo en una base de datos y no sé crear el SQL para conseguirlo, la estructura de las tablas es esta:
Tabla clientes, campos: ID, NOMBRE, LEGAJO, INGRESO
Tabla fichadas, campos: ID_CLIENTE, FECHA, ENTRADA1, SALIDA1
Y lo que necesito es borrar las fichadas que sean anteriores a la fecha de ingreso y modificar las fichadas que entre la entrada y la salida que excedan las 4 horas de diferencia, para que queden de 4 horas.

Gracias anticipadas.
Responder Con Cita
  #2  
Antiguo 30-07-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola xeuz, creo que no ha quedado muy clara tu explicación.
Detalla la estructura de las tablas con sus tipos de campos y explica en más profundidad lo que quieres conseguir exactamente.
Gracias.


Por cierto, como a todos los novatos, se le recomienda leer nuestra guía de estilo
Responder Con Cita
  #3  
Antiguo 30-07-2013
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola,

Asumiendo cosas como por ejemplo que el campo fichadas.fecha corresponda a un campo Date o TimeStamp y sea la fecha de la fichada y que de igual manera clientes.ingreso sea un campo de fecha

Para seleccionar las fichadas antes de la fecha de ingreso puede servirte algo como:
Código SQL [-]
SELECT * FROM fichadas a
INNER JOIN clientes b ON a.id_cliente = b.id
WHERE a.fecha < b.ingreso

Ahora, apoyando a casimiro, debes explicar mejor tu problema para que se te pueda responder de manera correcta porque aunque la sentencia de DELETE puede ser algo como esto,

ATENCION!!! WARNING!!! OJO PELAO!!!
Esta es sentencia podría borrarte mucho mas de lo que esperas porque podría hasta borrar una fichada de un id_cliente que tenga 2 registros con uno despues de la fecha de ingreso y el otro no.

Código SQL [-]
DELETE FROM fichadas
WHERE id_cliente =
  (SELECT a.id_cliente FROM fichadas a
     INNER JOIN clientes b ON a.id_cliente = b.id
     WHERE a.fecha < b.ingreso);

Si por alguna razón no tienes bien definidas las llaves de fichadas y con una sola sentencia no puedas obtener el resultado que esperas, te recomendaría hacer un SP que se encargue de esa tarea y hacer todas las validaciones necesarias allí dentro. Si a la final no puedes con el sp pues hacerlo desde delphi.

PS: Debí modificar el mensaje porque no me había dado cuenta que la consulta era en el foro de Interbase/Firebird
__________________
Buena caza y buen remar... http://mivaler.blogspot.com

Última edición por movorack fecha: 30-07-2013 a las 22:55:09.
Responder Con Cita
  #4  
Antiguo 31-07-2013
xeuz xeuz is offline
Registrado
NULL
 
Registrado: jul 2013
Posts: 3
Poder: 0
xeuz Va por buen camino
Red face

Muchas gracias Movorack y Casimiro por la rapidísima respuesta a mi escueto post! Estos últimos días estuve lidiando con urgencias todo el tiempo y entre las corridas aveces creo que el resto del mundo puede leer mi cabeza, ERRORRR!
Paso a comentarles un poco más en detalle, soy técnico y brindo soporte a pequeñas y medianas empresas en el rubro informática en gral y además soy programador PHP y mysql (programador de los malos, de los que saben poco, googlean mucho e improvisan otro tanto... ) y en un cliente me pidieron hacer una modificación a una base firebird y supuse que no seria muy distinta la lógica y la sintaxis, pero me encontré con varios inconvenientes y por eso recurrí a uds.
Creo que con lo que me pasó Movorack ya me las arreglo para adaptarlo a lo que necesito. Creo que comprendí la logica y sintaxis para este caso en particular.

Agradezco enormemente la ayuda por Uds. dada ya que, creo, me resolvió el problema. Lo pruebo y les cuento como me fue.

Un abrazo

XeuZ
Responder Con Cita
  #5  
Antiguo 31-07-2013
xeuz xeuz is offline
Registrado
NULL
 
Registrado: jul 2013
Posts: 3
Poder: 0
xeuz Va por buen camino
Bueno, finalmente acabo de probar el código que me paso Movorack el cual modifique un poco pero me encontré con un problema, el select no devuelve ningún registro! y estoy viendo que los hay. Estoy utilizando IBexpert. El código es:

SELECT a.id FROM fichadas a
INNER JOIN clientes b ON a.id_cliente = b.id
WHERE A.fecha < B.alta

en la parte de mensajes me aparece:

Plan
PLAN JOIN (A NATURAL, B INDEX (PK_CLIENTES))

Un dato que no había dado y no se si puede que sea eso, el campo a.fecha es del tipo date y b.alta es del tipo timestamp


Saludos

XeuZ
Responder Con Cita
  #6  
Antiguo 31-07-2013
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.927
Poder: 26
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Seria bueno que leyeras un tutorial sobre SQL y luego revisaras la sintaxis especifica de firebase.
__________________
El malabarista.
Responder Con Cita
  #7  
Antiguo 31-07-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Para una correcta presentación de código fuente, usa los tags, ejemplo:



Gracias


Ya te comenté antes que describieras lo mejor posible las tablas y los tipos de campos, recuerda que no somos adivinos
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
Modificacion masiva Spynosa Firebird e Interbase 7 07-10-2010 07:06:05
Actualizacion masiva con trigger lledesma SQL 1 23-04-2009 00:24:09
insercion masiva Alfredo Firebird e Interbase 3 12-11-2008 21:34:46
Insercion masiva de una BD a otra BD oscjae Firebird e Interbase 5 15-12-2006 21:25:49
Inserción masiva en MySQL Morfo MySQL 3 09-01-2004 19:05:33


La franja horaria es GMT +2. Ahora son las 01:45:36.


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