PDA

Ver la Versión Completa : Primeros n registros paradox


marilinspi
02-06-2023, 23:19:35
Hola, quiero obtener los primeros N registros de una tabla, uso delphi 7 y paradox
ya probé TOP, FIRST, LIMIT... nada me funciono
alguna idea?
gracias desde ya

brakaman
03-06-2023, 09:50:18
Hola amigo:

No se si te he entendido bien, sino es esto perdona. pero...

Var
N, i : Integer;
begin
N := 20; // Primeros 20 registros.
// Ya teniendo la tabla creada y abierta (claro).
Tabla1.First;
for i := 1 to N do
begin
if not Tabla1.EOF then
begin
// Acceder a los campos.
// Por Ejemplo: Memo1.Lines.Add(Tabla1.FieldByName('Campo1').AsString);

Tabla1.Next;
end
else
Break;
end;
end;
// Cerrar tabla. Tabla1.Close, liberar recursos ....



Saludos.

Jose.

Casimiro Notevi
03-06-2023, 11:53:06
Se supone que quiere hacerlo con SQL. Desconozco sin con paradox es posible.

manelb
03-06-2023, 20:12:51
Nosotros hemos trabajado con paradox durante muchos años y hemos ido descubriendo características realmente interesantes y sorprendentes para lo que es paradox(ahora me viene a la cabeza la revolución que representó para mi el descubrimiento de las vistas en paradox), pero no creo que en sql para paradox exista el equivalente de FIRST, TOP, LIMIT de otros sistemas.

Casimiro Notevi
03-06-2023, 23:27:52
Puede crear un store procedure que devuelva el número de registros que se quiera, se le puede pasar la sentencia y el número.
Algo similar a esto:


SET TERM ^ ;

CREATE PROCEDURE SelectWithLimit (
p_SelectStatement VARCHAR(1000),
p_RecordCount INTEGER
)
RETURNS (
ResultField1 <tipo_de_dato>,
ResultField2 <tipo_de_dato>,
-- Agrega más campos según tus necesidades
)
AS
DECLARE VARIABLE RowCount INTEGER;
BEGIN
RowCount = 0;

FOR EXECUTE STATEMENT p_SelectStatement INTO :ResultField1, :ResultField2
DO
BEGIN
RowCount = RowCount + 1;
SUSPEND;

IF (RowCount >= p_RecordCount) THEN
EXIT;
END
END^

SET TERM ; ^

Casimiro Notevi
03-06-2023, 23:29:06
Para usarlo, con un ejemplo se entiende:


SELECT * FROM SelectWithLimit('SELECT * FROM tu_tabla', 10);