Ir para conteúdo
  • Cadastre-se

dev botao

Pro Pessoal Que Ta Usando Firedac


  • Este tópico foi criado há 1604 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

tive a curiosidade de testar o firedac com POST, APPEND usando FETCH ROW, e percebir que, supomos que eu defina fetch row de um cadastro de produtos que contem 35 mil registros pra trazer de 5 em 5, no carregamento do form , apos o open da query ate ai tudo blz. ai faço um append e gravo com POST, o dataset carrega 35 mil produtos, e fica lento ate demais. inclusive, tentei usar lookup pq em minhas aplicacoes uso apenas o codigo FK , e queria a opniao de voces tambem qual a melhor forma de fazer isso.

pq na tela de lancamento de nota tenho o campo FK mais preciso que o usuario veja o nome do produto digitado.

até em dblookupcombo se quando vc clica nele, em chama o record count traz tudo, imagina ai uma aplicacao com 1 milhao de registros?

Link para o comentário
Compartilhar em outros sites

  • Consultores

Não utilizo o Append e muito menos o FireDAC.

Mas, se não me engano, o método append implicitamente faz com que o TDataset use o método Last.

O método last faz pular para o último registro, e para que se consiga isso é necessário carregar todos os registros da tabela.

Então, tente utilizar o método Insert ao invés disso, ou procure outra alternativa no FireDAC.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

mesmo com um simples edit, e apos isso fazer o post, com a query setada pra 10 o fetch rows, ele movimenta a tabela toda apos o post.

mesmo usando insert.

e quanto a lookup voce tem uma dica, pq tenho campos na minha tela de nfe onde preciso mostrar as descricoes, como produto, NCM, CFOP, e tenho apenas os cados FK nessa tabela de itens. o que voce me indicaria?

Link para o comentário
Compartilhar em outros sites

  • Consultores

mesmo com um simples edit, e apos isso fazer o post, com a query setada pra 10 o fetch rows, ele movimenta a tabela toda apos o post.

mesmo usando insert.

 

Se você for posicionar para algum registro, o componente vai fazer a query pra todos os registros nela até encontrar o registro. A única forma de limitar isso é alterando a query para retornar apenas a quantidade de registros que você realmente precisa.

 

 

e quanto a lookup voce tem uma dica, pq tenho campos na minha tela de nfe onde preciso mostrar as descricoes, como produto, NCM, CFOP, e tenho apenas os cados FK nessa tabela de itens. o que voce me indicaria?

Veja o que é recomendado a se fazer com o FireDAC. Desde que você apenas carregue poucos registros por vez, você não vai ter muitos problemas.

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

certo pq em dbexspress vc usaria o packed record, no firedac existe o fetch rows, so que quando usa lookup o firedac nao respeita a limitacao, se tiver 1 milhao de registros trará todos, mesmo a query estando configurada pra trazer 10 registros por vez. entao como proceder nesse caso, uso firebird, o select FIRTS XX registros funcionaria?

Link para o comentário
Compartilhar em outros sites

  • Consultores

Não achei a documentação deste Fetch Rows, mas acho que tanto ele quanto o packed record não é o exatamente o que você está pensando. Não é um limite de quantidade de registros. mas quantidade de registros por vez...

 

Quando eu disse query, eu não quero dizer TQuery ou algum componente semelhante, mas a consulta ao banco de dados composta do Select e seus parâmetros. Então a ideia seria um where para limitar a quantidade de registros que devem ser retornados já que você possui o FK.

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Estava pesquisando algumas coisas aqui sobre o FireDac e acabei vendo essa discussão rsrs. 

Não acredito que o problema seja o componente e sim a forma com que você está trabalhando com eles. 

Usar Lookup são as piores coisas que se pode fazer no sistema, tente otimizar o select, eu utilizo mysql e faço uso dos Left Joins e inner Joins para não utilizar lookup. 

Quanto ao Append e o post também faço normalmente, mas utilizo limit no select da tabela, selecionando um registro o comando não fica pesado. 

Link para o comentário
Compartilhar em outros sites

não desfazendo do alessandro, não vejo nada de errado no lookup. é só usar para pequenas tabelas (estado, sexo, estado civil, etc). já no caso de existir a necessidade de ligar a tabelas de grandes conteudos tambem n recorro a esse meio (conforme já explicado por alessandro pk) e uso filtros genericos ou especificos para cada caso.

Link para o comentário
Compartilhar em outros sites

  • 4 meses depois ...
Em 29/09/2016 at 17:34, 3Soft Sistemas disse:

não desfazendo do alessandro, não vejo nada de errado no lookup. é só usar para pequenas tabelas (estado, sexo, estado civil, etc). já no caso de existir a necessidade de ligar a tabelas de grandes conteudos tambem n recorro a esse meio (conforme já explicado por alessandro pk) e uso filtros genericos ou especificos para cada caso.

Sem problemas, eu tive experiências com lookup em que uma tabela com grandes registros o lookup afetava e muito a performance do sistema. 
Otimizando os selects melhorou absurdamente, então deixei de usar lookup. 

Link para o comentário
Compartilhar em outros sites

  • 4 meses depois ...

Para limitar o fetch de uma tabela usando fdquery, você deve ir em "options-> Fetch options -> Rowset size: 50" e trocar o 50 pelo numero de registros que você quer por fetch.

Alguns detalhes que você deve levar em consideração são:

O "Fetch mode" deve estar setado para "fmOnDemand"

Não pode ser usado junto com Keep Connection Alive do FDConnection.

 

Para campos lookup eu não cheguei a testar o fetch, mas ja fiz o teste com tabelas gigantes e o fetch on demand funciona direitinho.

 

Link para o comentário
Compartilhar em outros sites

Corrigindo um engano ....

 

Citar

Não pode ser usado junto com Keep Connection Alive do FDConnection.

Na verdade o que não pode ser utilizado junto com o fetch on demand é "Auto Detect and recover broken connection", porque ele força o fetch mode para fmAll.

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...

Senhores, é possível usar uma query com requestlive (firedac) e join, e ao alterar um campo automaticamente atualizar os campos que foram chamados com o join?
por exemplo: 

select A.Cliente, B.Nome from Notas a
left join Clientes B
on B.Codigo = A.Cliente

ao alterar num dbgrid o campo Cliente, que o campo nome já aparecesse automaticamente. Não queria usar lockup pois vai ficar muito lento...  

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1604 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.