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

hybrispt

VB6 - Array dinâmico

4 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora