Fórum Paginar a query #243356
15/07/2004
0
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
Curtir tópico
+ 0Posts
15/07/2004
Paulo_amorim
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
15/07/2004
Carlosc.jr
Gostei + 0
15/07/2004
Paulo_amorim
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
15/07/2004
Vinicius2k
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
15/07/2004
Paulo_amorim
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
15/07/2004
Carlosc.jr
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
15/07/2004
Carlosc.jr
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
Gostei + 0
15/07/2004
Vinicius2k
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
15/07/2004
Vinicius2k
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
15/07/2004
Paulo_amorim
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
15/07/2004
Vinicius2k
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
Clique aqui para fazer login e interagir na Comunidade :)