Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
hybrispt

VB6 - Array dinâmico

Recommended Posts

hybrispt

Oi

Alguém me sabe dizer como faço um array com o tamanho do nº de linhas de uma determinada tabela numa BD?

Preciso fazer leitura de um ficheiro txt e para cada linha lida, preciso verificar numa tabela se esse valor existe.

Penso que a melhor solução seria a passagem desses valores da tabela para um array e assim a verificação seria mais rápida.

Atenção - Estou a lidar com tabelas e ficheiros na ordem das 10000 linhas cada. Ou seja, por cada linha do ficheiro, há uma instrução SQL para verificar um valor noutras 10000...

Obrigado.

Share this post


Link to post
Share on other sites
milks

Boas,

Não sei se é possível, mas experimentaste contar as linhas e declarar o array com o número lido? (Não sei se é possível)

Tipo:

' Código pra contar as linhas do ficheiro
' Que fica guardado na var NumLinhas

Dim arrNLinhas(NumLinhas) As String

Ou então experimenta declarar o array e usar o ReDim, mas aqui tens uma quebra em performance.

Mas em qualquer dos casos, se são 10000 linhas no ficheiro, isso vai ser lento. Penso eu.

Não podes construir a instrução SQL à medida que vais lendo o ficheiro? E no fim executas apenas 1 instrução à BD, usando "[...]campo = 'valorLinha' OR [...]" assim devolvia-te todos os registos que tinha na BD e que estavam presentes na BD.

Share this post


Link to post
Share on other sites
hybrispt

Não dá para ir construíndo porque só posso pegar nos valores que não existam.

Mesmo que a query me devolvesse esses valores (supondo que assim a performance fosse maior), teria de os re-pesquisar no ficheiro para obter.

Vou tentar essa do array com variável mas, acho que não dá.

Obrigado.

Share this post


Link to post
Share on other sites
perdido_e_sozinho

Se o objectivo é verificar se uma determinado conjunto de registos existe ou não numa tabela poderá usar uma consulta de SQL:

SELECT *
FROM tabela
WHERE Nome IN ('JOAO','ANDRE')

Devolve todos os resultados com joao e andre no nome

SELECT *
FROM tabela
WHERE Nome NOT IN ('JOAO','ANDRE')

Devolve todos os resultados sem joao e andre no nome

Não percebi ao certo o que pretendes fazer, mas se estás a utilizar VB + Access a performance do mesmo é muito baixa, mesmo usando ADO. O VB.NET tem uma performance maior. Só para teres um termo de comparação usando access para carregar 2000 registos com 5 compos para uma listview levava 15 minutos no VB6 e 30 segundos no VB.NET.

Para o vb.net poderias usar o Streamreader que pode ler linha a linha, e executar uma SQL linha a linha, e logo executar uma SQL linha a linha, ou construir uma consulta on fly com o SQL acima referido.

Espero que isto te ajude.

Com os melhores cumprimentos,

Sérgio Matias


ser.gifsartim.gif

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.