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 08-11-2005
Abel Garcia Abel Garcia is offline
Miembro
 
Registrado: nov 2004
Posts: 45
Poder: 0
Abel Garcia Va por buen camino
Lightbulb Borrar n Registros de una Tabla

Hola, Tengo una duda que en primera instancia pareseria sencilla pero no he encontrado como hacerlo, la idea seria borrar los primeros n registros de una tabla esto usando Firebird 1.5 , el problema es que me encontre un parrafo en el documento Firebird 1.5 Relese notes donde afirma que la siguiente posible intruccion que podria llegar ha hacer esto tendria el siguiente problema:

Two Gotchas with SELECT FIRST
1. This
delete from TAB1 where PK1 in (select first 10 PK1 from TAB1);
will delete all of the rows in the table. Ouch! the sub-select is evaluating each 10 candidate rows for
deletion, deleting them, slipping forward 10 more...ad infinitum, until there are no rows left.
y si efectivamente si ejecutas la instruccion no solo borra los 10 primero como pudieras esperar, sin no que borra todos los registros:
Alguien mas Tiene un idea de como hacer esto ?

Muchas gracias por su ayuda
Responder Con Cita
  #2  
Antiguo 08-11-2005
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En un query haces el select de esos primeros 10 registros y luego los recorres del primero al último borrándolo.
Responder Con Cita
  #3  
Antiguo 08-11-2005
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Cita:
Empezado por Casimiro Notevi
En un query haces el select de esos primeros 10 registros y luego los recorres del primero al último borrándolo.
Esto es como los conocidos cursores en otros motores, creo que aquí se hace con la instrucción FOR..
__________________
No todo es como parece ser...
Responder Con Cita
  #4  
Antiguo 08-11-2005
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Desde delphi podrías hacer algo así,:

Código SQL [-]
 DMdoc.QRlineas.Close;
 DMdoc.QRlineas.SelectSQL.Text := 'select first 10 from tbLineas';
 DMdoc.QRlineas.Open
 while not DMdoc.QRlineas.Eof do
     DMdoc.QRlineas.Delete;
Responder Con Cita
  #5  
Antiguo 08-11-2005
Abel Garcia Abel Garcia is offline
Miembro
 
Registrado: nov 2004
Posts: 45
Poder: 0
Abel Garcia Va por buen camino
Cita:
Empezado por Casimiro Notevi
Desde delphi podrías hacer algo así,:

Código SQL [-]
 DMdoc.QRlineas.Close;
 DMdoc.QRlineas.SelectSQL.Text := 'select first 10 from tbLineas';
 DMdoc.QRlineas.Open
 while not DMdoc.QRlineas.Eof do
     DMdoc.QRlineas.Delete;
Ok si Casimiro Notevi, esa seria una forma pero la idea seria sin usar por decir delphi, sino atravez de una sentencia SQL, obviamenete tambien seria sin usar un procedimiento en la base de datos, bueno si es que es posible hacerlo ?
Responder Con Cita
  #6  
Antiguo 08-11-2005
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Abel Garcia
Ok si Casimiro Notevi, esa seria una forma pero la idea seria sin usar por decir delphi, sino atravez de una sentencia SQL, obviamenete tambien seria sin usar un procedimiento en la base de datos, bueno si es que es posible hacerlo ?
Y si no es desde delphi, ni desde un procedimiento o trigger, entonces cómo quiéres hacerlo?, en alguno de los dos sitios tendrás que poner la sentencia
Responder Con Cita
  #7  
Antiguo 08-11-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos
Cita:
Empezado por Abel Garcia
Two Gotchas with SELECT FIRST
1. This
delete from TAB1 where PK1 in (select first 10 PK1 from TAB1);
[font=Trebuchet MS][size=2]
will delete all of the rows in the table. Ouch! the sub-select is evaluating each 10 candidate rows for
deletion, deleting them, slipping forward 10 more...ad infinitum, until there are no rows left.
[le
CHANFLEE!! No sabia. Nunca se me habia presentado el caso de borrar los 1ro tantos de un registro.
Seria interesante que alguien nos dijera como se podria hacer en sentencias.
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
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 04:26:58.


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