Atualize hoje para o Scriptcase 9 e ganhe 35% de desconto! Atualize hoje para o Scriptcase 9 e ganhe 35% de desconto! COMPRAR AGORA!

Autor Tópico: Mostrar apenas os últimos registros do BD na grid - Dúvida!!!  (Lida 1521 vezes)

83Flavio

  • Novato
  • *
  • Mensagens: 3
Mostrar apenas os últimos registros do BD na grid - Dúvida!!!
« Online: Outubro 22, 2014, 11:02:45 pm »
Olá!

Estou com o seguinte problema: Tenho que consulta em que a grid está selecionando e mostrando do banco de dados todos os registros inseridos. Isto está aumentando o fluxo da rede, por isso preciso limitar esta busca no BD de apenas 10 ou 20 últimos registros.

1ª Tentativa: Na SQL da aplicação tentei usar a opção "LIMIT 10", mas não funcionou.
2ª Tentativa: Nas configurações tentei colocar paginação total e nº de registros a exibir como 10, mas não funcionou.
3ª Tentativa: Na SQL da aplicação tentei filtrar pela data atual: ...WHERE (campo = DATE_FORMAT(NOW(), '%Y-%m-%d')) mas não funcionou,deu o erro: "Faltou marcar campos que devem fazer parte da Consulta"

Alguém tem alguma outra opinião, ou então uma luz do que eu possa estar fazendo errado?

rrma

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 819
  • Quem com porcos se mistura tanto bate até que fura
    • Email
Re:Mostrar apenas os últimos registros do BD na grid - Dúvida!!!
« Responder #1 Online: Outubro 22, 2014, 11:31:18 pm »
2ª Tentativa: Nas configurações tentei colocar paginação total e nº de registros a exibir como 10, mas não funcionou.

Você tem que usar paginação parcial, aí coloca o limite por página.
Fazendo assim, a cláusula limit fica por conta do SC e vc agiliza sua consulta.
Considere também usar índices se usar WHERE.
Rodrigo Araújo

Haroldo

  • Expert
  • *****
  • Mensagens: 7258
  • Conhecimento diminui limitações.△TFA△
    • InfinitusWeb Software de Gestãol/Gestão ITIL/Consultoria Scriptcase
Re:Mostrar apenas os últimos registros do BD na grid - Dúvida!!!
« Responder #2 Online: Outubro 23, 2014, 06:25:41 am »
coloca em ordem descrescente pelo id e pagina com 20.

83Flavio

  • Novato
  • *
  • Mensagens: 3
Re:Mostrar apenas os últimos registros do BD na grid - Dúvida!!!
« Responder #3 Online: Outubro 23, 2014, 08:15:30 am »
Companheiros bom dia!

Estas sugestões que me deram já realizei e pelo monitoramento da rede elas ainda continuam com tráfego alto, pois mesmo sendo 20 registros de página por página, a grid está puxando do banco em torno de 4000 registros a cada Refresh (1mim), sem contar quando inseri outro registro.
Sobretudo, arrumei uma solução com o WHERE:

WHERE data = 'xxxxxxx'
Ele só está puxando os registro com data xxxxxxx.

Agora estou precisando de um comando MYSQL que puxe os dois últimos dias para aprimorar.
Já tentei WHERE (data = DATE_FORMAT(NOW(), '%Y-%m-%d')) mas não deu certo ainda.

Estou pesquisando, se puderem me ajudar...

joeltonsilva

  • Expert
  • *****
  • Mensagens: 523
Re:Mostrar apenas os últimos registros do BD na grid - Dúvida!!!
« Responder #4 Online: Outubro 23, 2014, 08:43:44 am »
Companheiros bom dia!

Estas sugestões que me deram já realizei e pelo monitoramento da rede elas ainda continuam com tráfego alto, pois mesmo sendo 20 registros de página por página, a grid está puxando do banco em torno de 4000 registros a cada Refresh (1mim), sem contar quando inseri outro registro.
Sobretudo, arrumei uma solução com o WHERE:

WHERE data = 'xxxxxxx'
Ele só está puxando os registro com data xxxxxxx.

Agora estou precisando de um comando MYSQL que puxe os dois últimos dias para aprimorar.
Já tentei WHERE (data = DATE_FORMAT(NOW(), '%Y-%m-%d')) mas não deu certo ainda.

Estou pesquisando, se puderem me ajudar...

Faz como o Haroldo falou, é a maneira rápida e prática, eu uso desta forma também...

leds

  • Intermediário
  • ***
  • Mensagens: 163
    • Email
Re:Mostrar apenas os últimos registros do BD na grid - Dúvida!!!
« Responder #5 Online: Outubro 23, 2014, 09:04:21 am »
Companheiros bom dia!

Estas sugestões que me deram já realizei e pelo monitoramento da rede elas ainda continuam com tráfego alto, pois mesmo sendo 20 registros de página por página, a grid está puxando do banco em torno de 4000 registros a cada Refresh (1mim), sem contar quando inseri outro registro.
Sobretudo, arrumei uma solução com o WHERE:

WHERE data = 'xxxxxxx'
Ele só está puxando os registro com data xxxxxxx.

Agora estou precisando de um comando MYSQL que puxe os dois últimos dias para aprimorar.
Já tentei WHERE (data = DATE_FORMAT(NOW(), '%Y-%m-%d')) mas não deu certo ainda.

Estou pesquisando, se puderem me ajudar...

Faz como o Haroldo falou, é a maneira rápida e prática, eu uso desta forma também...

Flávio, já verificou os índices desta tabela? Está acontecendo só com esta grid?
Outra coisa 4000 registros é muito pouco para estar tão alto. Pode ser que sua query tenha muitos JOINS e com tabelas maiores.

Sugestões: 1) Verifique os índices; 2) Verifique a estrutura da query, as vezes mudando o lado de ação (LEFT JOIN ou RIGHT JOIN), ajuda;

Forte Abraço

83Flavio

  • Novato
  • *
  • Mensagens: 3
Re:Mostrar apenas os últimos registros do BD na grid - Dúvida!!!
« Responder #6 Online: Outubro 23, 2014, 10:12:32 am »
Resolvido por enquanto!!!!

Consegui resolver listando apenas os registros dos últimos 05 dias. O problema é que para pesquisar períodos antigos vou ter que usar outra grid.
Ainda bem que ela já existe. Ficou assim o fim do SQL:

WHERE TO_DAYS(NOW()) - TO_DAYS(data) <= 15

Caro Luis Eduardo, agradeço pela dica e vou verificar a situação repassada, pois às vezes o problema seja realmente este que você citou.

No mais obrigado a todos pelo apoio.

abdmelo

  • Novato
  • *
  • Mensagens: 6
Solucao deselegante: Mostrar apenas os últimos registros do BD na grid - Dúvida!
« Responder #7 Online: Julho 28, 2017, 05:55:03 pm »
Caro Flavio,

Apesar de só ter visto seu problema agora, passei por algo semelhante - só que com mais de 100.000 registros na tabela (em um formulário) -. mesmo usando o SC9, e encontrei uma "solução deselegante" para esse problema - enquanto a SC não responde o chamado que abri.

No campo Where (Menu Vertical >> Formulário >> SQL), coloque (sem ; no final): [ suas condições, se tiver + ] and id_da_tabela >= ( (select max(id_da_tabela) from tabela) - 9 )

E no campo Ordenação (ainda no SQL), adicione: [ seu código, caso haja, lembre-se de adicionar uma vírgula aqui , + ] id_da_tabela DESC

Obs.: isso funcionará considerando que o campo id_da_tabela seja auto-incrementável. Para relatórios, basta fazer o mesmo no SQL da grid. Note que - 9 (menos nove) trará 10 (dez) registros, pois na condição há >= (maior OU igual), isso incluirá um registro a mais. Portanto, se colocar - 10 (menos dez), retornarão os últimos 11 (onze) registros, e assim por diante.

Essa "solução" genérica deverá funcionar para a maioria dos casos, pois quase sempre há um campo de id na tabela, mas nem sempre ou necessariamente um de data/time.

Agora, o "feito colateral": na busca rápida, só estarão disponíveis os registos resultantes da query (os últimos 10) que estão no cache / sessão. Para buscar em todos os registros, provavelmente será necessário adicionar um campo personalizado de busca para fazer um full scan na tabela e atualizar / modificar a query (que certamente deverá estar em uma variável) - gambiarra que (ainda) não fiz.

Espero, sinceramente, que a SC apresente uma solução elegante para o problema ou disponibilize uma atualização com a melhoria para essa limitação.

Faças as adequações para a sua necessidade.
« Última modificação: Julho 31, 2017, 11:41:21 am por abdmelo »

Jailton

  • Expert
  • *****
  • Mensagens: 2560
Re:Mostrar apenas os últimos registros do BD na grid - Dúvida!!!
« Responder #8 Online: Julho 28, 2017, 06:48:20 pm »
Caro Flavio,

Apesar de só ter visto seu problema agora, passei por algo semelhante - só que com mais de 100.000 registros na tabela (em um formulário) -. mesmo usando o SC9, e encontrei uma "solução deselegante" para esse problema - enquanto a SC não responde o chamado que abri.

No campo Where (Menu Vertical >> Formulário >> SQL), coloque (sem ; no final): [ suas condições, se tiver + ] and id_da_tabela >= ( (select max(id_da_tabela) from tabela) - 9 )

E no campo Ordenação (ainda no SQL), adicione: [ seu código, caso haja, lembre-se de adicionar uma vírgula aqui , + ] id_da_tabela DESC

Obs.: isso funcionará considerando que o campo id_da_tabela seja auto-incrementável. Para relatórios, basta fazer o mesmo no SQL da grid. Note que - 9 (menos nove) trará 10 (dez) registros, pois na condição há >= (maior OU igual), isso incluirá um registro a mais. Portanto, se colocar - 10 (menos dez), retornarão os últimos 11 (onze) registros, e assim por diante.

Essa "solução" genérica deverá funcionar para a maioria dos casos, pois quase sempre há um campo de id na tabela, mas nem sempre ou necessariamente um de data/time.

Agora, o "feito colateral": na busca rápida, só estarão disponíveis os registos resultantes da query (os últimos 10) que estão no cache / sessão. Para buscar em todos os registros, provavelmente será necessário adicionar um campo personalizado de busca para fazer um full scan na tabela e atualizar / modificar a query (que certamente deverá estar em uma variável) - gambiarra que (ainda) não fiz.

Espero, sinceramente, que a SC apresente uma solução elegante para o problema ou disponibilize uma atualização com a melhoria para essa limitação.

Faças as adequações para a sua necessidade.

No SC V9, já tem isso, não precisa 'fazer gambiarras', fica fácil simples e limpo.
« Última modificação: Julho 28, 2017, 06:50:44 pm por Jailton »
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

robertobru

  • Avançado
  • ****
  • Mensagens: 402
    • Email
Re:Mostrar apenas os últimos registros do BD na grid - Dúvida!!!
« Responder #9 Online: Julho 28, 2017, 11:57:23 pm »
Ainda não migrei para a V9 mas vi essa opção nela.
Muito boa a observação do Jailton.

abdmelo

  • Novato
  • *
  • Mensagens: 6
Retorno ~> Mostrar apenas os últimos registros do BD na grid - Dúvida!
« Responder #10 Online: Julho 31, 2017, 11:38:08 am »
Jailton,

Bom dia.

Conforme informado anteriormente, no FORM (formulário, tipo Registro Único) do SC9 NÃO HÁ ESSA OPÇÃO (Limit ou mesmo o campo para manipulação do SQL.Ver imagem a seguir), somente nas grids (consultas). Eis o motivo da "gambi". Por isso estou no aguardo da resposta oficial da SC sobre o assunto.



De qualquer forma, sua contribuição foi MUITO BOA para os que necessitarem implementar esse recurso nas consultas / grids, sem gambiarra. :)

Tão logo receba o retorno (positivo ou não) da SC, postarei aqui.

Jailton

  • Expert
  • *****
  • Mensagens: 2560
Re:Mostrar apenas os últimos registros do BD na grid - Dúvida!!!
« Responder #11 Online: Julho 31, 2017, 12:58:53 pm »
Neste seu caso então era só criar um VIEW EDITÁVEL e usar ela para fazer o formulário.

CREATE VIEW view_minha_tabela AS (SELECT * FROM minha_tabela ORDER BY LancamentoID DESC LIMIT 10);

Usar a tabela view_minha_tabela no SC para criar seu Formulário Único registro.

O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

abdmelo

  • Novato
  • *
  • Mensagens: 6
Re:Mostrar apenas os últimos registros do BD na grid - Dúvida!!!
« Responder #12 Online: Julho 31, 2017, 04:54:49 pm »
E usar uma "view editável" para um formulário de inclusão - que deveria ter uma solução elegante, assim com a grid tem, para esse tipo de problema - não é uma GAMBIARRA? ;)