Estou usando a GRID do minigui extend e lendo dados do postgres...até ai, blz...mas me deparei com uma extrema lentidão...quando faço a QUERY ao postgres, o retorno é praticamente instantâneo, agora, quando entro em um laço para adicionar os registros ao GRID...é o caos...e olha que testei com 500 registros...tenho clientes que tem base de clientes, na ordem de 60 mil registros...talvez esteja fazendo de uma forma errado...por isso...peço o socorro de todos que puderam colaborar...vou postar os fontes...para poderem avaliar...
Aqui...é a montagem da grid no form...toda vez que inicia o form....em ON INIT chamo a função CRGCLI()
DEFINE GRID ogCli
ROW 10
COL 10
WIDTH 1084
HEIGHT 489
HEADERS {"Código", "Cliente", "Cidade", "UF", "Expira em"}
WIDTHS {150,442,318,55,98}
HEADERIMAGE { IM__ORDUP, IM__ORDDN }
CELLNAVIGATION .T.
DYNAMICBACKCOLOR { _gridCor, _gridCor, _gridCor, _gridCor, _gridCor }
ONHEADCLICK { { || CrgCli('Codigo') }, { || CrgCli('Nome') }, { || CrgCli('Cidade') }, { || CrgCli('UF') }, { || CrgCli('Validade') } }
END GRID
Aqui... a função que carrega os dados e transfere para a grid...
//----------------------------
STATIC FUNCTION CrgCli(zordem)
//----------------------------
LOCAL nCnt, oRow, zAscDesc
LOCAL oQuery, cQuery
zAscDesc := MntCtrlOrdem(zordem,@zCtrlOrd)
Clientes.ogCli.HeaderImage(1) := IIF(zordem='Codigo' ,IIF(zAscDesc='ASC',1,2),0)
Clientes.ogCli.HeaderImage(2) := IIF(zordem='Nome' ,IIF(zAscDesc='ASC',1,2),0)
Clientes.ogCli.HeaderImage(3) := IIF(zordem='Cidade' ,IIF(zAscDesc='ASC',1,2),0)
Clientes.ogCli.HeaderImage(4) := IIF(zordem='UF' ,IIF(zAscDesc='ASC',1,2),0)
Clientes.ogCli.HeaderImage(5) := IIF(zordem='Validade',IIF(zAscDesc='ASC',1,2),0)
cQuery := "SELECT Codigo, Nome, Cidade, UF, Validade FROM Licenciamento ORDER BY "+zordem+" "+zAscDesc
IF EXQuery(cQuery,@oQuery)
Clientes.ogCli.DeleteAllItems
aCli := {}
IF oQuery:Lastrec() > 0
Clientes.ogCli.DisableUpdate
FOR nCnt = 1 TO oQuery:Lastrec()
oRow := oQuery:GetRow(nCnt)
Clientes.ogCli.AddItem( { oRow:FieldGet(1), oRow:FieldGet(2), oRow:FieldGet(3), oRow:FieldGet(4), DTOC(oRow:FieldGet(5)) } )
AADD(aCli, { oRow:FieldGet(1), oRow:FieldGet(2), oRow:FieldGet(3), oRow:FieldGet(4), DTOC(oRow:FieldGet(5)) } )
NEXT
Clientes.ogCli.EnableUpdate
END
END
oQuery:Destroy()
RETURN(NIL)
Quando clico no cabeçario de cada coluna, é executado novamente a CRGCLI, que coloca em ordem da coluna, ascendente ou descendente...
Tenho também um textbox, que conforme digito, ele filtra....que com pouco registros...é maravilhoso....mas acima de um determinado numero...meu DEUS...agora isso...usando matriz....fico imaginando...se tivesse usando DBF com laço WHILE....
o textobox do filtro...
DEFINE LABEL LbBusca
ROW 518
COL 10
WIDTH 58
HEIGHT 20
VALUE "Localizar:"
FONTBOLD .T.
TRANSPARENT .T.
VCENTERALIGN .T.
END LABEL
DEFINE TEXTBOX eBusca
ROW 518
COL 73
WIDTH 200
HEIGHT 20
VCENTERALIGN .T.
ONCHANGE BuscaGrid('Clientes','ogCli',2,aCli)
END TEXTBOX
e a função da busca...
//-------------------------------------------------
FUNCTION BuscaGrid(zform,zgrid,zbuscapad,zmatdados)
//-------------------------------------------------
// Definir TEXTBOX eBusca, onde estiver a GRID
// Parametros
// zform = nome do form
// zgrid = nome da grid
// zbuscapad = numero da coluna a ser pesquisada
// zmatdados = matriz com os dados que estão sendo exibidos
LOCAL cTxt, nLen, nCnt
LOCAL nCntItens
// Se não houver seleção de coluna, define a zbuscapad, como padrão
nCol := GetProperty( zform, zgrid, 'Value' )
nCol := IIF( nCol[2] = 0, zbuscapad, nCol[2] )
IF nCol > 0
nCntItens := GetProperty( zform, zgrid, 'Itemcount' )
IF nCntItens > 0 .OR. LEN(zmatdados) > 0
// Armazena o que foi digitado
cTxt := GetProperty( zform, 'eBusca' , 'Value' )
nLen := LEN( cTxt )
// Elimina dados da GRID
DOMethod( zform, zgrid, 'DeleteAllItems' )
// Desabilita exibição da GRID
DOMethod( zform, zgrid, 'DisableUpdate' )
FOR nCnt := 1 To Len( zmatdados )
// Verifica se o que foi digitado, e armazena na grid qual elemento contem
IF UPPER( cTxt ) $ UPPER( zmatdados[ nCnt, nCol ] ) .OR. EMPTY(cTxt)
// Armazena na GRID
DOMethod( zform, zgrid, 'AddItem', zmatdados[ nCnt ] )
END
NEXT
// Posiciona na GRID
SetProperty( zform, zgrid, 'Value', {1,nCol} )
// Habilita exibição da GRID
DOMethod( zform, zgrid, 'EnableUpdate' )
END
ELSEIF !EMPTY(cTxt)
MsgMenu('Selecione a coluna a ser pesquisada !!!',{'OK'},,IM__ERRO,'ERRO',,,'32 ERR CAN',,,_branco_)
END
RETURN(NIL)
Enfim....como sempre, agradeço, de antemão...
F.Freire