Paginar a query

Delphi

15/07/2004

Ola a todos.

Alguem aqui ja teve a necessidade de fazer o seguinte:

Imeginem um arquivo com 10.000 registros
voce cria um sp que faca o seguinte:
sp_pagina(x,y)

onde x=numero de registros a retornar
onde y=numero da pagina

Exemplo:

Arquivo

(row) Nome Endereco
1 a a
2 b b
3 c c
4 d d
5 e e
6 f f
7 g g
8 h h
9 i i
10 j j
11 k k
12 l l
13 m m
14 n n
15 o o

vc faz a chamada da sp: SP_PAGINA(2,3)
onde 2=numero de registros a retornar
onde 3=numero da pagina

de acordo com os parametros passados os dados sao vistos (virtualmente) desta forma:

(row) Nome Endereco
---> Pagina 1
1 a a
2 b b
---> Pagina 2
3 c c
4 d d
---> Pagina 3
5 e e
6 f f
---> Pagina 4
7 g g
8 h h
---> Pagina 5
9 i i
10 j j
---> Pagina 6
11 k k
12 l l
---> Pagina 7
13 m m
14 n n
---> Pagina 8
15 o o


Sera retornado
(row) Nome Endereco
5 e e
6 f f


Outro exemplo:

vc faz a chamada da sp: SP_PAGINA(5,2)
onde 2=numero de registros a retornar
onde 3=numero da pagina

Sera retornado
(row) Nome Endereco
6 f f
7 g g
8 h h
9 i i
10 j j

de acordo com os parametros passados os dados sao vistos (virtualmente) desta forma:

(row) Nome Endereco
---> Pagina 1
1 a a
2 b b
3 c c
4 d d
5 e e
---> Pagina 2
6 f f
7 g g
8 h h
9 i i
10 j j
---> Pagina 3
11 k k
12 l l
13 m m
14 n n
15 o o
---> Pagina 4


Abraco a todos
Carlos Junior


Carlosc.jr

Carlosc.jr

Curtidas 0

Respostas

Paulo_amorim

Paulo_amorim

15/07/2004

Olá

VocÊ está fazendo a SP em que banco?

Pode-se pensar assim:

Se vc quer os X primeiros registros, mas na pagina Y, o último registro do resultado será X * Y, certo?
e o primeiro, consequentemente, será X * (Y-1)
Assim, sabendo qual o primeiro registro, pde-se fazer a Query com a limitação (depende do banco, daí):
TOP, ROWNUM, LIMIT...

Espero que ajude
Até+


GOSTEI 0
Carlosc.jr

Carlosc.jr

15/07/2004

estou utilizando o interbase 6.0


GOSTEI 0
Paulo_amorim

Paulo_amorim

15/07/2004

Olá

Não lembro bem, vale a pena conferir na documentação do IB se eh a sintaxe mesmo, mas daí vc pode usar LIMIT

SELECT * FROM campo LIMIT 10

traz soh os 10 primeiros registros...e assim vai

Espero que ajude
Até+


GOSTEI 0
Vinicius2k

Vinicius2k

15/07/2004

Colega,

Infelizmente, LIMIT, TOP, ROWS, FIRST não são aceitos no IB 6.0...
Tive a mesma dúvida há algum tempo... veja este tópico :
http://delphiforum.icft.com.br/forum/viewtopic.php?t=34233

Espero ter ajudado...
T+


GOSTEI 0
Paulo_amorim

Paulo_amorim

15/07/2004

Colega, Infelizmente, LIMIT, TOP, ROWS, FIRST não são aceitos no IB 6.0... Tive a mesma dúvida há algum tempo... veja este tópico : http://delphiforum.icft.com.br/forum/viewtopic.php?t=34233 Espero ter ajudado... T+


Olá

Os registros no IB têm identificação própria? Assim como no Oracle tem o rownum(que eh a identificação sequencial de cada registro)...se tiver, até da pra selecionar por ae né... :?

Até+


GOSTEI 0
Carlosc.jr

Carlosc.jr

15/07/2004

Vinicios

isto aqui nao funcionou na minha versao do fibird (1.x)


select first 50 skip 50 from tbl_cliente
order by nome

Funcionou com vc?

Abracao
Carlos Junior


GOSTEI 0
Carlosc.jr

Carlosc.jr

15/07/2004

Vinicios

isto aqui nao funcionou na minha versao do fibird (1.x)


[b:17d67de925]select first 50 skip 50 from tbl_cliente
order by nome [/b:17d67de925]

Funcionou com vc?

Abracao
Carlos Junior

Colega, Infelizmente, LIMIT, TOP, ROWS, FIRST não são aceitos no IB 6.0... Tive a mesma dúvida há algum tempo... veja este tópico : http://delphiforum.icft.com.br/forum/viewtopic.php?t=34233 Espero ter ajudado... T+



GOSTEI 0
Vinicius2k

Vinicius2k

15/07/2004

Carlos,

select first 50 skip 50 [color=red:52719d1971]*[/color:52719d1971] from tbl_clientes


Eu não cheguei a usar com o FB 1.0, quando implementei já fiz com o FB 1.5, mas creio não haver diferença...

T+


GOSTEI 0
Vinicius2k

Vinicius2k

15/07/2004

Olá Os registros no IB têm identificação própria? Assim como no Oracle tem o rownum(que eh a identificação sequencial de cada registro)...se tiver, até da pra selecionar por ae né... :?


Me parece que não é explícito como um RecNo(), mas está presente numa das tabelas de sistema rdb$ , mas nunca usei ou implementei na prática...

T+


GOSTEI 0
Paulo_amorim

Paulo_amorim

15/07/2004

Me parece que não é explícito como um RecNo(), mas está presente numa das tabelas de sistema rdb$ , mas nunca usei ou implementei na prática...


Olá

Será viável esses dados da tabela de sistema?
Apesar de ser só um select...mas mesmo assim o FB não vai impedir o acesso?

Até+


GOSTEI 0
Vinicius2k

Vinicius2k

15/07/2004

Olá Será viável esses dados da tabela de sistema? Apesar de ser só um select...mas mesmo assim o FB não vai impedir o acesso? Até+


Vc pode efetuar selects normalmente nas tabelas de sistema desde que tenha permissão para isso (SYSDBA ou OWNER do banco)...
eu me expressei mal, não é uma tabela de sistema e sim, vamos chamar assim, uma ´coluna de sistema´ presente na tabela...
a instrução para leitura seria : [b:e92bd75090]select RDB$DB_KEY, NOME from CLIENTES[/b:e92bd75090], mas acabo de testar, a sintaxe passa mas a ´coluna de sistema´ tem um valor estranho, tipo caracter especial, no result da query...
É estranho... na verdade não sei se isso funciona realmente...
T+


GOSTEI 0
POSTAR