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
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.106
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
  #2  
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
  #3  
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.106
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
  #4  
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
  #5  
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.106
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
  #6  
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
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
Si ok, bueno segun mi idea era hacerlo con algo sencillo como una sentencia SQL
como la del inicio de este hilo:

delete from TAB1 where PK1 in (select first 10 PK1 from TAB1);

bueno si es que es posible ?
Responder Con Cita
  #7  
Antiguo 08-11-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por Casimiro Notevi
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
que tal en la "línea de comandos" de isql, bien en la consola de windows o linux?

Tal como lo veo, no será posible... ¿no es esto acaso un fallo?. Firebird debiera procesar primero el subquery, almacenar el resultado en algún lugar (tabla temporal, memoria, etc) y luego hacer el borrado de las líneas coincidentes?

Desconocía como trabaja el motor en este caso particular, y confieso que he quedado sorprendido..

sospecho que forzosamente tendrá que haber algo.... no puede hacerse con una sola sentencia SQL. Por ejemplo, creando un procedimiento almacenado, si que sería posible conseguirlo.

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
  #8  
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 jachguate
Tal como lo veo, no será posible... ¿no es esto acaso un fallo?.
Pienso* que si debe ser.
Cita:
Empezado por jachguate
Firebird debiera procesar primero el subquery, almacenar el resultado en algún lugar (tabla temporal, memoria, etc) y luego hacer el borrado de las líneas coincidentes?
Eso pense*.
Cita:
Empezado por jachguate
Desconocía como trabaja el motor en este caso particular, y confieso que he quedado sorprendido..
Hice la prueba y me he quedado como tú

Quien tenga Oracle, MSSQL y MYSQL, que prueben a ver. Me gustaria saber el resultado (con una base de datos de prueba, claro está).

*Mucho pensamientos
__________________
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
  #9  
Antiguo 09-11-2005
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.106
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jachguate
que tal en la "línea de comandos" de isql, bien en la consola de windows o linux?
Ya hombre, se suponía que era para usar desde dentro de un programa.

Cita:
Empezado por jachguate
Tal como lo veo, no será posible... ¿no es esto acaso un fallo?. Firebird debiera procesar primero el subquery, almacenar el resultado en algún lugar (tabla temporal, memoria, etc) y luego hacer el borrado de las líneas coincidentes?
Desconocía como trabaja el motor en este caso particular, y confieso que he quedado sorprendido..
Acabo de hacer algo así:
Código SQL [-]
   delete from
tblineasdocumentos
where codigocabecera in
  (select first 10 codigocabecera
   from tblineasdocumentos)
y me he quedado sin datos

Cita:
Empezado por jachguate
sospecho que forzosamente tendrá que haber algo.... no puede hacerse con una sola sentencia SQL.
Tiene que haber algo

Cita:
Empezado por jachguate
Por ejemplo, creando un procedimiento almacenado, si que sería posible conseguirlo.
Claro, así sí.
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 03:27:30.


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