FetchOnDemand-Maravilhoso/dúvidoso
Boa tarde;
Uso 3 camadas, e em chamadas com muitos registros(5000/8500) estou testando o Fetch 500, achei maravilhoso pois me carrega o Grid rapidamente só q...
Como meus usuarios estão viciados na tela de baixa de doctos a pratica s levaram a serem rapidos na procura e baixa,,,, qdo termina o Grid com os primeiros 500 registros o cds me traz mais 500 mas esta demorando e o usuario fica parado esperando...
Teria como, fazer essas chamadas de 500 em 500 sem ter q chegar ao EOF=true,
Obrigado
Uso 3 camadas, e em chamadas com muitos registros(5000/8500) estou testando o Fetch 500, achei maravilhoso pois me carrega o Grid rapidamente só q...
Como meus usuarios estão viciados na tela de baixa de doctos a pratica s levaram a serem rapidos na procura e baixa,,,, qdo termina o Grid com os primeiros 500 registros o cds me traz mais 500 mas esta demorando e o usuario fica parado esperando...
Teria como, fazer essas chamadas de 500 em 500 sem ter q chegar ao EOF=true,
Obrigado
Orpolonio
Curtidas 0
Respostas
Vinicius2k
23/05/2005
Colega,
Fetch por demanda é um excepcional recurso, como vc pode peceber e , em geral pouco utilizado.
Eu trabalho em duas camadas, por isto o meu caso é até bem mais simples que o seu, basta setar PacketRecords no CDS e pronto. Eu utilizo valores bem mais baixos, geralmente 32.
Não entendi o sentido de se baixar o próximo pacote de registros se o pacote anterior não tiver chegado ao fim. Vc poderia esclarecer melhor?
Por exemplo, vc traz o primeiro pacote e depois traz todos os outros de uma vez?
Se sim, vc só eliminou o problema da abertura. Então, nem teria muito sentido o fetch por demanda já que, de qualquer forma, o usuário teria que aguardar...
Se não, o problema pode estar na implementação que, apesar de não trabalhar com 3 camadas, conheço (um pouco) de como deve ser a implementação na aplicação. O help do Delphi orienta que vc interceda e faça os pedidos ao Provider informando a partir de qual registro deve vir o novo pacote e através de PacketRecords, quantos registros virão.
[quote:f0b20adf96=´Help do Delphi, PacketRecords´]Warning: When PacketRecords is greater than 0, the client dataset must fetch its data incrementally. If the provider is on a stateless application server, the client dataset must inform the provider where to start fetching data. This communication can occur using a BeforeGetRecords event handler.[/quote:f0b20adf96]
[quote:f0b20adf96=´Help do Delphi, BeforeGetRecords e FetchOnDemand´]This example shows how to use the BeforeGetRecords event handler (a TRemoteEventType value) to send the provider information it needs for incremental data fetching. Before fetching the next data packet, the client dataset packages up the key value of the last record so that the provider knows where to begin the next data packet. It also sends some application-specific information, which is stored in Memo1.
[/quote:f0b20adf96]
Espero ter ajudado.
T+
Fetch por demanda é um excepcional recurso, como vc pode peceber e , em geral pouco utilizado.
Eu trabalho em duas camadas, por isto o meu caso é até bem mais simples que o seu, basta setar PacketRecords no CDS e pronto. Eu utilizo valores bem mais baixos, geralmente 32.
Não entendi o sentido de se baixar o próximo pacote de registros se o pacote anterior não tiver chegado ao fim. Vc poderia esclarecer melhor?
Por exemplo, vc traz o primeiro pacote e depois traz todos os outros de uma vez?
Se sim, vc só eliminou o problema da abertura. Então, nem teria muito sentido o fetch por demanda já que, de qualquer forma, o usuário teria que aguardar...
Se não, o problema pode estar na implementação que, apesar de não trabalhar com 3 camadas, conheço (um pouco) de como deve ser a implementação na aplicação. O help do Delphi orienta que vc interceda e faça os pedidos ao Provider informando a partir de qual registro deve vir o novo pacote e através de PacketRecords, quantos registros virão.
[quote:f0b20adf96=´Help do Delphi, PacketRecords´]Warning: When PacketRecords is greater than 0, the client dataset must fetch its data incrementally. If the provider is on a stateless application server, the client dataset must inform the provider where to start fetching data. This communication can occur using a BeforeGetRecords event handler.[/quote:f0b20adf96]
[quote:f0b20adf96=´Help do Delphi, BeforeGetRecords e FetchOnDemand´]This example shows how to use the BeforeGetRecords event handler (a TRemoteEventType value) to send the provider information it needs for incremental data fetching. Before fetching the next data packet, the client dataset packages up the key value of the last record so that the provider knows where to begin the next data packet. It also sends some application-specific information, which is stored in Memo1.
procedure TForm1.ClientDataSet1BeforeGetRecords(Sender: TObject; var OwnerData: OleVariant);
var
LastValue: OleVariant;
CDSClone:ClientDataSet;
begin
if ClientDataSet1.Active then
begin
CDSClone := ClientDataSet.Create(Form1);
try
CDSClone.CloneCursor(ClientDataSet1, True);
{ turn off FetchOnDemand so that the clone only fetches
the last LOCAL record }
CDSClone.FetchOnDemand := False;
CDSClone.Last;
LastValue := CDSClone.Fields[0].AsString;
CDSClone.Close;
finally
CDSClone.Free;
end;
end else
LastValue := NULL;
OwnerData := VarArrayOf([Memo1.Lines.Text, LastValue]);
end;Espero ter ajudado.
T+
GOSTEI 0
Src68
23/05/2005
Olá, tb trabalho com um aplicativo 3 camadas, e tenho o mesmo problema como o seu, e a tempos procuro resposta de como usar o FETCH, e ainda nao encontrei, já usei o exemplo do delphi que nosso amigo colocou aqui e assim mesmo nao funcionou.
Parece q sempre qdo se tem um Grid na tela, ou ele trava depois de chegar ao fim, ou da uma mensagem de duplicação da chave primária.
Vou realizar alguns teste aqui e colocar como tópico novamente.
Obs.: Em duas camadas ele funciona realmente.
Parece q sempre qdo se tem um Grid na tela, ou ele trava depois de chegar ao fim, ou da uma mensagem de duplicação da chave primária.
Vou realizar alguns teste aqui e colocar como tópico novamente.
Obs.: Em duas camadas ele funciona realmente.
GOSTEI 0
Orpolonio
23/05/2005
Bom, o meu ´pequeno problema´ é q os usuarios estão viciados nas rotinas, e uma chamada normal de 1000 registros por exemplo, o usuario ja tem as nfs para baixar, e pode ser que, na primeira chamada do fetch(ex: 100 registros ´ainda faltam 9 chamadas) a nf n esteja, então, com uma tecla de atalho F1 ele procura. Qdo chega ao fim do GRID existe uma pausa( no total 9 pausas)... isto q estão reclamando.
A primeira chamada(100) é maravilhosa, mas os times das outras 9 fazem com q eles parem para esperar, é pouquissimo tempo, mas são milhares de nfs para baixa(um simples f3=baixada).
A primeira chamada(100) é maravilhosa, mas os times das outras 9 fazem com q eles parem para esperar, é pouquissimo tempo, mas são milhares de nfs para baixa(um simples f3=baixada).
GOSTEI 0