Fórum Abrir Tabela enorme com FDQuery #466681
12/01/2014
0
preciso fazer uma correção geral na tabela e quanto tento Active = True fica em processo interminavel e gerenciador de tarefas do Windows 8 diz q programa não responde.
alguem mais experiente e já conhece FDQuery do FireDac pode me ajudar nesse quesito. fico grato a todos.
Everaldo Silva
Curtir tópico
+ 0Posts
12/01/2014
Maicon Wagner
1- Tivemos que revisar todas as tabelas e criar alguns índices melhores nas tabelas.
2- Ao fazer uma consulta sempre fazemos dos campos específicos, evitamos utilizar "SELECT * FROM", pois tem vezes que nunca queremos todos os campos.
3- Ao fazer a consulta não fazemos a consulta de todos os registros, parametrizamos uma variável que eh a quantidade de registros que a query busca de cada vez. Fazendo assim quando você estiver num grid, ira aparecer no grid sempre a quantidade especificada + a nova consulta.
Bom para nos isso deu certo, mas caso você queira retornar mesmo todos os registros de uma vez, creio que terá uma demora mesmo em sua requisição. Ainda mais se tiver campos com Blob.
Gostei + 0
12/01/2014
Everaldo Silva
Configuração do PC:
Quad Core
HD 512 novo e formatado a 10 dias
8gb de mem
Placa Mãe Intel
Clock de 2.8Ghz
Windows 8
Agradeço a ajuda e colaboração de todos que puderem me ajudar.
Gostei + 0
13/01/2014
Maicon Wagner
Configuração do PC:
Quad Core
HD 512 novo e formatado a 10 dias
8gb de mem
Placa Mãe Intel
Clock de 2.8Ghz
Windows 8
Agradeço a ajuda e colaboração de todos que puderem me ajudar.
Amigo voce ja tentou fazer esta consulta pelo banco ? Tenta fazer essa consulta diretamente no banco e posta para gente ver qual o resultado ?
Gostei + 0
15/01/2014
Everaldo Silva
mas com um bom cidadão tenho backups e testei o mais recente e esta tudo ok. Muito obrigado pela dica, não te informei a mais tempo prq meu provedor de internet
estava com problemas, um abraço, kara essa tabela tem uma incosistência e to fazendo correção, uso o XE5 como citado anteriormente e usando FireDac que jé e nativo nesta versão XE5, faço um seclet com paginação de 50 registro por pagina e o programa quando inicializa os primeiros 20.000 registro processa bem rapido mas, o bicho quando a medida q avança, a peformance cai drasticamente, então o que faço é: Nesta tabela de Endereço preciso verificar quais endereços estão sem referência com a tabela de Bairro, então zerei toda referência End_Bai_ID chave estrangeira pela que é o relacionamento entre TB_Endereco/TB_Bairro, e faço uma pesquisa usando Locate pelo nome do Bairro que há na TB_Endereço field End_Bairro o codigo é bem simple
with FDQryEndereco do
begin
while not(Eof) do //Executa enquanto nao for o fim Tb_Endereco
begin
if FDQryBairro.Locate('BAI_UF; BAI_CIDADE; BAI_NOME',
VarArrayOf( [ FieldByName('END_UF').AsString,
FieldByName('END_CIDADE').AsString,
FieldByName('END_BAIRRO').AsString ] ), []) then
begin
FieldByName('Novo_Bai_ID').AsInteger := FDQryBairro.FieldByName('Bai_ID').AsInteger;
. . .
end
else
begin
with FDQryBairro do
begin
append;
. . .
post;
ApplyUpdates(0);
end;
end;
next
if vContRegistro >50 the
begin
ApplyUpdates(0);
vGetNextRecord := vGetNextRecord + vContRegistro; // incremente sempre + 50 para buscar os próximos 50 registros
vContRegistro := 1;
. . .// aqui há uma chamada de uma procedure que refaz o "Select First 50 Skip vGetNextRecord campos da tabela endereco "
end ;
end;
end;
creio que é bem simples e funcional, se possível me liga que te retorno, meu Cel: Tim 041-75-9164-6423 ou Claro 021-75-8131-4335
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)