Paginação com Firedac

02/11/2019

7

boa noite,


tenho uma sincronização onde a tabela origem com 10.000 registros e o sincronismo esta muito lento, preciso fazer uma paginação para trazer 200 registros por vez usando firedac num exemplo como esse abaixo.

FDQueryOrigem.open; //aqui vem 10.000
FDQueryOrigem.First;
while not FDQueryOrigem.eof do
begin
FDQueryDestinoID.Asinteger:= FDQueryOrigemID.Asinteger;
................

FDQueryOrigem.Next;
end;

Alguém pode me dar um exemplo de paginação nesse código usando firedac, para de vez trazer os 10.000 trazer os primeiros 500 + 500 e assim por diante?

Grato..
Responder

Posts

03/11/2019

Tone Costa.

Vc teria duas soluções.


1ª Soluçao
Trabalhar com as propriedades
FetchOptions -> RecsMax,
FetchOptions -> RecsSkip,
FetchOptions -> RowsetSize.

2ª Solução
Se eu estivesse trabalhando com firebird
Procedure Paginar(Pagina,QtdLinha : Integer);
Const
_sql = '' SELECT FIRST %D SKIP %D * FROM TABELA '';
Var
sql : String;
begin
sql := format(_sql,[qtdLinha,(Pagina-1*QtdLinha)]);
Qry.Open(s);
end;

e controlaria a pagina que seria mostrada. Se os parametros fossem Pagina =1, QtdLinha = 500 o select ficaria assim
select first 500 skip 0 * from tabela (o resultset vai trazer os primeiros 500 registros)



Responder

03/11/2019

Jose Medeiros

Vc teria duas soluções.


1ª Soluçao
Trabalhar com as propriedades
FetchOptions -> RecsMax,
FetchOptions -> RecsSkip,
FetchOptions -> RowsetSize.

2ª Solução
Se eu estivesse trabalhando com firebird
Procedure Paginar(Pagina,QtdLinha : Integer);
Const
_sql = '' SELECT FIRST %D SKIP %D * FROM TABELA '';
Var
sql : String;
begin
sql := format(_sql,[qtdLinha,(Pagina-1*QtdLinha)]);
Qry.Open(s);
end;

e controlaria a pagina que seria mostrada. Se os parametros fossem Pagina =1, QtdLinha = 500 o select ficaria assim
select first 500 skip 0 * from tabela (o resultset vai trazer os primeiros 500 registros)

boa noite,
no meu caso trabalho com mysql, as propriedades no meu caso esta assim:

FetchOptions -> RecsMax = -1
FetchOptions -> RecsSkip = -1
FetchOptions -> RowsetSize = 50

seria isso mesmo ou teria que alterar esses valores.

grato pela atenção

Responder