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)
-   -   SQL que arroja 20 registros que muestre 10 (https://www.clubdelphi.com/foros/showthread.php?t=7404)

cahosoft 13-02-2004 23:39:02

SQL que arroja 20 registros que muestre 10
 
esto parecera bobo... pero ya ustedes saben como son los jefes....

el objetivo es que una consulta que arroja varios registros solo me muestre los primeros 10 registros.... un amigo me deijo que utilizara palabre "TOP", pero no me la reconoce... estoy utilizando el interbase 6.1 ... auxilio a tengo que mostrar todos los campos de las tablas relacionadas....

de ante mano gracias......

vecino 14-02-2004 12:29:23

Hola:

Creo que necesitamos más información para ayudarte.
¿Arroja 20 registros, cómo?, ¿en un select desde dónde?, muestra sólo 10
registros... ¿dónde?, ¿en un dbgrid?, ¿has probado queryelquesea.Last?

Saludos.

cahosoft 18-02-2004 14:02:12

que muestre los primeros 20 registros
 
hola como estas....
gracias por querer ayudarme....

en realidad los registros deben aparecer a nivel de sql de interbase, sin tener en cuenta el lenguaje de programacion en este caso delphi, en oracle hay una palabra reservada de sql que es ROW... que de los resultados de una consulta (select * from table_name) y muestra solo primeros que yo le indique, (rows=10)..., en sql de interbse row no lo reconce,... estoy buscardo la forma que en el sql se valide esto......


gracias....

atentamente
cristian hoyos

guillotmarc 18-02-2004 14:10:41

Hola.

En Interbase 6 no hay ningun modificador del SELECT para ayudarte a limitar el nº de registros devueltos.

Firebird 1.03 incorporó los modificadores FIRST .. STEP, para devolver una consulta en grupos de n registros, y Interbase 6.5 también añadió un modificador para ese propósito (aunque no recuerdo su nombre).

Tienes dos opciones, actualizar a Firebird 1.03 / Firebird 1.5 / Interbase 6.5 / Interbase 7, o bien hacer la consulta mediante un procedimiento almacenado, con lo que podrás limitar el nº de registros devueltos sin actualizar tu versión de Interbase.

Saludos.

haron 18-02-2004 14:22:58

tu jefe te habra pedido que muestre los 10 primeros resgistros porque la consulta pude devolver una gran cantidad y esto saturaria la red.

dile a tu jefe que la mejor solucion es indicar un filtro mas exhaustivo, de manera que el conjunto sea menor.

otra forma que se me ocurre, mediante un procedimiento almacenado:

Código:

set term^;
create procedure CONSULTA returns(campo1, campo2, ..) as
declare variable cont integer;
begin
  cont:=0;
  FOR select campo1, campo2, .. from tabla into :campo1, :campo2, .. DO
  begin
    // aqui devuelve un registro
    suspend;
    // sale del bucle cuando supera los 10 registros
    cont:=cont+1;
    if cont>10 then break;
  end;
end^
set term;^

luego lo unico que tienes que hacer es

Código:

select * from CONSULTA;
no estoy seguro de que sea correcta la sintaxis del procedimiento anterior, no tengo interbase delante para comprobarlo.
posiblemente haya una forma mas sencilla de hacerlo.

si encuentras alguna otra forma mas sencilla, nos lo comentas.

Giniromero 19-02-2004 16:37:53

Hola a todos,

Yo tengo un problema parecido, ¿no hay entonces ninguna forma que sustituya la clausula TOP por otro en interbase 7? yo lo que tengo es una consulta en la que sólo tienen que aparecer los últimos 10 o 15 registros de una tabla, el resto de los registros no me hacen falta.

Muchas gracias

Virginia

guillotmarc 19-02-2004 18:23:15

Hola.

Consulta la cláusula ROWS en la documentación. Se pone al final de la instrucción (no a continuación del SELECT como hace el TOP de SQL Server).

Saludos.

haron 19-02-2004 18:44:29

Cita:

Empezado por Giniromero
Hola a todos,

Yo tengo un problema parecido, ¿no hay entonces ninguna forma que sustituya la clausula TOP por otro en interbase 7? yo lo que tengo es una consulta en la que sólo tienen que aparecer los últimos 10 o 15 registros de una tabla, el resto de los registros no me hacen falta.

Muchas gracias

Virginia

recuerdo que un TADOQuery tenia un parametro para no devolver todos los registros, sino que se los iba trayendo del servidor uno a uno cada vez que se ejecutaba el metodo 'next'.

lo que puedes hacer es lo siguiente:

Código:

select campo1, campo2, ...
from tabla
order by campo_i DESC

con la opcion DESC obtengo los ultimos registros al principio.

luego lo que tienes que hacer es recorrer estos registros:

Código:

cont:=0;
while not query.eof do
begin
  // me traigo un registro
  query.next;
  // hago lo que tenga que hacer, como insertarlo en un TStringGrid
  ....
  // si supero los quince registros, me salgo del bucle
  cont:=cont+1;
  if cont>15 then break;
end;

si quieres presentarlo en una grilla, deberas usar en este caso un TStringGrid.


La franja horaria es GMT +2. Ahora son las 18:29: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