Preechimento de grid

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Preechimento de grid

Mensagem por Nascimento »

amigos eu tenho um banco que esta com mais de 20 mil registros
e preciso preencher uma grid com eles
ja fiz de varias formas , mais ficou muito lento!
teria alguma forma de a grid preencher rapido com uma quantidade dessas de registros? usando a minigui extended

abaixo um trecho do meu codigo

Código: Selecionar todos


 aData := {}
 select arq 
 set order to 1
goto top
 while !eof()
 Aadd(aData,{ sui, dtoc(data), entr,said, strzero(nnota,5), placa, str(n_cartela,5), iif(bonus,"T","F"),trans(diaria,'@E 999,999.99'),trans(bar,'@E 999,999.99') , trans(vldesc,'@E 999,999.99'), trans(vlbonus,'@E 999,999.99'),dtoc(datamov), str(turno,2), codcaixa, codport})
 skip
 end do


define grid placa
 	        parent Displaca_form
           col 10
           row 50 
           width 700 //390
           height 400
           headers {"SUITE","DATA","ENTR", "SAIDA", "NOTA", "PLACA", "CARTELA", "BONIF.", "PERMANENCIA", "CONSUMO", "DESCONTO", "BONUS", "DT. MOV", "TURNO", "TEL.", "PORT."}
           widths {60,80,80,70,70,70,70,70,70,70,80,70,80,70,70,70}
           value 1
			  fontname 'Arial'
           fontsize 9
           fontbold .t.
           backcolor {255,255,206}
*           fontcolor BLACK
 *          nolines .t. 
*           showheaders .f.
           tooltip 'Exibe o Consumo Geral da Suite'
*          justify { BROWSE_JTFY_LEFT,BROWSE_JTFY_LEFT,BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT } 
           on init Preenche_grid()    
       end grid

Static Function Preenche_grid
for nPos := 1 to len(aData)
 
    doMethod("Displaca_form","placa", "addItem", aData[nPos] )
 
next

até funcionou , mais da uma travada até no sistema, depois de um bom tempo que aparece a grid preenchida

tentei com browse mais os campos ficaram meio loucos...
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

Preechimento de grid

Mensagem por MSDN »

Nesses casos quando tem muita informação, só tem uma maneira de lidar, só preenche o grid com informações depois de uma pesquisa ( filtro ), e mesmo assim tomando certos cuidados para que o filtro não traga os 20 mil registros de uma só vez.
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Preechimento de grid

Mensagem por Nascimento »

resolvido como vc sugeriu o uso de browse envez de grid!!
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Preechimento de grid

Mensagem por NiltonGM »

A pratica para usar GRID ou Browser sempre é carregar por páginas, carregue um limite de 1000 registros por página exemplo, poderia ser 300 registros por página se quiser...
Disponibilize botões para avançar ou retroceder as páginas...
Veja meu aplicativo carregando do MySQL para uma GRID na imagem abaixo:
Anexos
Anotação 2019-11-19 104543.png
Nilton Medeiros
nilton@sistrom.com.br
Heero
Usuário Nível 2
Usuário Nível 2
Mensagens: 51
Registrado em: 13 Jul 2015 22:10
Localização: Guarulhos/SP

Preechimento de grid

Mensagem por Heero »

NiltonGM escreveu:A pratica para usar GRID ou Browser sempre é carregar por páginas, carregue um limite de 1000 registros por página exemplo, poderia ser 300 registros por página se quiser...
Disponibilize botões para avançar ou retroceder as páginas...
Veja meu aplicativo carregando do MySQL para uma GRID na imagem abaixo:
Boa, como você fez ? Criou uma VIEW ou Array ou DBF temporário ?

Abraços.
Ricardo Rodrigues
Harbour 3.2 + BCC + Minigui
Cursando Análise e Desenvolvimento de Sistemas
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Preechimento de grid

Mensagem por NiltonGM »

Olá Heero, não uso DBF a muito séculos...
Nos eventos dos botões avançar, retroceder, ir direto para uma página, etc você cria a clausula WHERE e LIMIT do SELECT
Exemplo do evento do botão próxima página:

Código: Selecionar todos

Procedure clientes_btnProximaPagina_Action()
    Local nPag := clientes.Text_pagina.Value
    Local nMaxPag := hb_Val( HB_USUBSTR( clientes.Label_QtdePagina.Value, 4 ) )
    Local nMinimo

    IF nPag < nMaxPag
       nPag++
       pCli_cSQL := SQLClientes( IF(pCli_lFiltro, pCli_cWHERE, Nil) )    // Essa função recria a string SQL conforme filtros ativo na grade
       pCli_cSQL += OrderByClientes()    // Essa função cria a string "ORDER BY " conforme definido na grade
       nMinimo := ( nPag * hb_Val(clientes.Combo_RegPorPagina.DisplayValue) ) - hb_Val(clientes.Combo_RegPorPagina.DisplayValue)   // o mínimo na clausula LIMIT
       pCli_cLIMIT := hb_NToS(nMinimo) + "," + LTrim(Clientes.Combo_RegPorPagina.DisplayValue)
       pCli_cSQL += "LIMIT " + pCli_cLIMIT    // O SELECT ficaria algo assim: "SELECT coluna1, coluna2,..colunax FROM CLIENTES WHERE filtro ORDER BY ordem LIMIT 300,600" pega registros de 300 a 600 no caso de 300 registros por página.
       clientes.Text_pagina.Value := nPag
       CarregaGridClientes()    // Essa fução zera a GRID e recarrega com o novo SELECT
    ENDIF
Return

Nilton Medeiros
nilton@sistrom.com.br
Responder