Notifications
Clear all

"Estouro" populando ListView

6 Posts
3 Usuários
0 Reactions
1,590 Visualizações
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Olá prezados amigos de fórum,

Tenho um projeto com banco de dados em Access, elaborado pelo Tomás e postado aqui no fórum por outro colega.
Peguei o modelo e fiz as devidas adaptações a minha necessidade. Ai que vem os problemas.

1º - Na hora de incluir um NOVO registro, ele retorna um erro na hora de gerar a autonumeração.
2º - Está dando um "Estouro" na hora de popular o ListView.

Acho que isso é devido ao meu banco access possuir atualmente 470 mil linhas (sim, isso mesmo) de processos digitalizados de um arquivo público.

Sei que o código não está na sua totalidade errado, pois, quando altero para um banco simples, de apenas 10 registros, ele popula o ListView normalmente.

Se alguém puder me ajudar, fico muito agradecido.

 
Postado : 06/08/2014 9:50 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bilokas,

Não cheguei a olhar seu arquivo, mas pelo que você escreveu não será possível listar num listbox.
Incluir as 470.000 linhas no listbox com certeza dará erro.

Minha sugestão é incluir no listbox só o resultado de um filtro desse mundo de registros que você tem, ou seja, uma centena de resultados ... e não 470mil.

 
Postado : 06/08/2014 10:41 am
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Não há nenhuma forma de contornar esse "estouro" ?

 
Postado : 06/08/2014 11:17 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

bilokas,

Boa Tarde!

O erro está ocorrendo no evento Change do seu txtPesquisa. Lá, você tem o seguinte código:

        Dim i As Integer
        
        For i = 0 To banco.RecordCount - 1
            If Not IsNull(banco(0)) Then
                .ListItems.Add 1, , banco(0)
                .ListItems(1).ListSubItems.Add 1, , banco(1)
                .ListItems(1).ListSubItems.Add 2, , banco(2)
                .ListItems(1).ListSubItems.Add 3, , banco(3)
            End If
                
            banco.MoveNext
        Next i

A declaração da variável contadora i está com Integer (inteira). Entretanto, você quer percorrer todas as suas 470 mil linhas com uma variável Integer que não admite mais do que 32 mil linhas.

Assim, modifique o tipo da sua variável i para Long ou Double que aceita uma variedade maior de números.

Fiz aqui um teste com 100 mil linhas e a minha máquina do trabalho (que não é lá grande coisa), um Core I5, com 8 Gb de RAM, passou mais de 5 minutos para passar por 60 mil registros, chegando, inclusive a travar.

Dessa forma, não aconselho que você adote essa solução pois se demorou tudo isso em apenas 60 mil linhas, imagine em 470 mil.

Que solução eu adotaria? Primeiro, quando você passar para o Formulário de pesquisa você não deve carregar nada no ListView. Somente quando o usuário fizer as devidas escolhas e clicar no botão Pesquisar é que você faz uma consulta SQL na sua base e carrega no ListView apenas a consulta que atende aos critérios solicitados na pesquisa.

Outra coisa que você pode fazer é trabalhar diretamente no próprio Access, sem a necessidade de utilização do Excel.

 
Postado : 06/08/2014 12:46 pm
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Obrigado por responder Wagner Morel,

Interessantes observações, vou analisar aqui e logo informo o que deu pra fazer pra otmizar essa busca.

 
Postado : 06/08/2014 1:20 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Ok. De nada!

Peço que vote positivamente clicando na mãozinha ao lado da ferramenta CITAR.

 
Postado : 06/08/2014 5:07 pm