ERRO AO CARREGAR O FLEX GRID
pessoal esto com problema para preenche o flex grid.
eu tenho uma tabela como +ou - uns 80.000 registro
e esta dando erro ao carregar o grid
UNABLE TO ALLOCATE MEMORY FOR FLEXGRID
USO CONEXAO ADO E BANCO DE DADO DO ACCESS.
ESTOU FAZENDO O SEGUINTE:
con.Open "provider=microsoft.jet.oledb.4.0;data source= " & App.Path & " ransferencia.mdb" & ";Jet OLEDB:Database Password='0511'"
rstransferencia.CursorLocation = adUseClient
rstransferencia.CursorType = adOpenDynamic
rstransferencia.LockType = adLockBatchOptimistic
Set rstransferencia = con.Execute("select * from dbo_contasgerais where data order by data ")
If rstransferencia.RecordCount > 0 Then
rstransferencia.MoveFirst
Do Until rstransferencia.EOF
msgridbusca.Row = (msgridbusca.Rows - 1)
msgridbusca.TextMatrix(msgridbusca.Row, 1) = rstransferencia("subconta") & ""
msgridbusca.TextMatrix(msgridbusca.Row, 2) = rstransferencia("data") & "" ' coloque & "" para que o MSGRIDBUSCA aceite o campo null
msgridbusca.TextMatrix(msgridbusca.Row, 3) = rstransferencia("codloja") & ""
msgridbusca.TextMatrix(msgridbusca.Row, 4) = Format(rstransferencia("valor"), "currency") & ""
msgridbusca.TextMatrix(msgridbusca.Row, 5) = rstransferencia("descricao") & ""
msgridbusca.TextMatrix(msgridbusca.Row, 6) = rstransferencia("nnota") & ""
msgridbusca.TextMatrix(msgridbusca.Row, 7) = rstransferencia("codlan") & ""
msgridbusca.Rows = (msgridbusca.Rows + 1)
SERA QUE ALGEM PODERIA ME AJUDAR, E COMO FAZER O GRID CARREGAR MAIS RAPIDO.
eu tenho uma tabela como +ou - uns 80.000 registro
e esta dando erro ao carregar o grid
UNABLE TO ALLOCATE MEMORY FOR FLEXGRID
USO CONEXAO ADO E BANCO DE DADO DO ACCESS.
ESTOU FAZENDO O SEGUINTE:
con.Open "provider=microsoft.jet.oledb.4.0;data source= " & App.Path & " ransferencia.mdb" & ";Jet OLEDB:Database Password='0511'"
rstransferencia.CursorLocation = adUseClient
rstransferencia.CursorType = adOpenDynamic
rstransferencia.LockType = adLockBatchOptimistic
Set rstransferencia = con.Execute("select * from dbo_contasgerais where data order by data ")
If rstransferencia.RecordCount > 0 Then
rstransferencia.MoveFirst
Do Until rstransferencia.EOF
msgridbusca.Row = (msgridbusca.Rows - 1)
msgridbusca.TextMatrix(msgridbusca.Row, 1) = rstransferencia("subconta") & ""
msgridbusca.TextMatrix(msgridbusca.Row, 2) = rstransferencia("data") & "" ' coloque & "" para que o MSGRIDBUSCA aceite o campo null
msgridbusca.TextMatrix(msgridbusca.Row, 3) = rstransferencia("codloja") & ""
msgridbusca.TextMatrix(msgridbusca.Row, 4) = Format(rstransferencia("valor"), "currency") & ""
msgridbusca.TextMatrix(msgridbusca.Row, 5) = rstransferencia("descricao") & ""
msgridbusca.TextMatrix(msgridbusca.Row, 6) = rstransferencia("nnota") & ""
msgridbusca.TextMatrix(msgridbusca.Row, 7) = rstransferencia("codlan") & ""
msgridbusca.Rows = (msgridbusca.Rows + 1)
SERA QUE ALGEM PODERIA ME AJUDAR, E COMO FAZER O GRID CARREGAR MAIS RAPIDO.
Primeira pergunta:
VC precisa realmente listar estes 80.000 registros no seu GRID?? Não têm como aplicar um filtro aànão??
SEGUNDA PERGUNTA:
PQ na abertura da sua tabela, VC usa a cláusula WHERE se VC não passa parâmetro nenhum pra ela?? Não têm a necessidade deste WHERE para "tentar" exibir os seus 80.000 registros.
VC precisa realmente listar estes 80.000 registros no seu GRID?? Não têm como aplicar um filtro aànão??
SEGUNDA PERGUNTA:
PQ na abertura da sua tabela, VC usa a cláusula WHERE se VC não passa parâmetro nenhum pra ela?? Não têm a necessidade deste WHERE para "tentar" exibir os seus 80.000 registros.
O MSFLEXGRID tem um limite(máximo) de linhas, se não me engano é + ou - 32.000 linhas...
Cara pq vc não faz feito o LCSD disse, cria um filtro direcionando o que vc precisa que seja realmente apresentado. Ou vc olha os 80.000 registros um a um ??
Um abraço!
Um abraço!
Se não der para filtrar, você terá de fazer uma paginação na exibição do grid.
Você teria de criar um parâmetro inicial par ser seu top e o número de linhas que exibiria por página...
E você deve ter um campo autonumeração para saber onde ira começar a pesquisa.
Vamos supor que na sua tabela vc tenha o campo id autonumeração. e na hora de carregar a página você queira pegar 100 começando do registo de id 1, então você faria o seguinte:
Select top 10o from tabela where id >= 1
então pegaria o último id selecionado. Vamos supor que seja 110
Então você teria um bot]ao próximo para pegar os demais registros e seu select ficaria assim:
Select top 100 from tabela where id > 110
E faria uma lógica também para um botão anterior.
Eu utilizo sempre paginação pois trabalho muito com WEB, mas neste caso para 80000 registros, seria a melhor forma..
Você teria de criar um parâmetro inicial par ser seu top e o número de linhas que exibiria por página...
E você deve ter um campo autonumeração para saber onde ira começar a pesquisa.
Vamos supor que na sua tabela vc tenha o campo id autonumeração. e na hora de carregar a página você queira pegar 100 começando do registo de id 1, então você faria o seguinte:
Select top 10o from tabela where id >= 1
então pegaria o último id selecionado. Vamos supor que seja 110
Então você teria um bot]ao próximo para pegar os demais registros e seu select ficaria assim:
Select top 100 from tabela where id > 110
E faria uma lógica também para um botão anterior.
Eu utilizo sempre paginação pois trabalho muito com WEB, mas neste caso para 80000 registros, seria a melhor forma..
O pessoal aàta certo...ou filtra ou muda de componente
então
Use um datagrid conectado ao banco...é mais rápido q o flexgrid nesse caso e se tem q mostrar os 80000...ele guenta!
se n tiver q mostrar ..é só filtar com sql..q vai na boa tb
boa sorte
Concordo com o MARCOSA.
Tópico encerrado , respostas não são mais permitidas