Clipper On Line • Ver Tópico - Preechimento de grid
Mudar para estilo Clássico
Projeto MiniGui - Biblioteca visual para Harbour/xHarbour
Postar uma resposta

Preechimento de grid

16 Out 2019 23:01

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:

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...

Preechimento de grid

17 Out 2019 09:55

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.

Preechimento de grid

20 Out 2019 23:40

resolvido como vc sugeriu o uso de browse envez de grid!!

Preechimento de grid

19 Nov 2019 10:47

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

Preechimento de grid

19 Nov 2019 12:24

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.

Preechimento de grid

19 Nov 2019 13:03

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:
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

Postar uma resposta