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()
Código: Selecionar todos
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
Código: Selecionar todos
//----------------------------
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)
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...
Código: Selecionar todos
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
Código: Selecionar todos
//-------------------------------------------------
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)F.Freire

