AJUDA IMPORTACAO DE ARQUIVOS TEXTO

NAM4 09/09/2010 14:29:33
#352527
Olá a todos do VBMania... venho recorrer a ajuda de vocês mais uma vez.

tenho uma funçãozinha que le quantos registros tem num txt, por um delimitador [Ô] | [Ô] no caso...

esta importando normalmente, mas o que gostaria era fazer ficar mais bunitinho o programa,

código que tenho:
Citação:


Private Sub Command2_Click()
On Error GoTo ErrorMsg
Dim fs As New FileSystemObject
Dim fsStream As TextStream
Dim oRsNome
Dim iContador
Dim iContadors As Long
Dim sCodigo_cliente

Set fsStream = fs.OpenTextFile(txtArquivo.Text)

Dim line As Variant
Dim NovoValor00 As Variant
Dim NovoValor01 As Variant
Dim NovoValor02 As Variant
Dim NovoValor03 As Variant
Dim NovoValor04 As Variant
Dim NovoValor05 As Variant
Dim NovoValor06 As Variant
Dim NovoValor07 As Variant
Dim NovoValor08 As Variant
Dim NovoValor09 As Variant
Dim NovoValor10 As Variant
Dim NovoValor11 As Variant
Dim NovoValor12 As Variant
Dim NovoValor13 As Variant
Dim NovoValor14 As Variant

Dim fname As String
Dim num_lines As Long
fname = txtArquivo.Text
num_lines = LinesInFile(fname)

con.Execute [Ô]truncate table Tabela_Clientes[Ô]
Do While fsStream.AtEndOfStream = False
line = Split(fsStream.ReadLine, [Ô]|[Ô])

NovoValor00 = Replace(line(0), [Ô][ô][Ô], [Ô] [Ô])
NovoValor01 = Replace(line(1), [Ô][ô][Ô], [Ô] [Ô])
NovoValor02 = Replace(line(2), [Ô][ô][Ô], [Ô] [Ô])
NovoValor03 = Replace(line(3), [Ô][ô][Ô], [Ô] [Ô])
NovoValor04 = Replace(line(4), [Ô][ô][Ô], [Ô] [Ô])
NovoValor05 = Replace(line(5), [Ô][ô][Ô], [Ô] [Ô])
NovoValor06 = Replace(line(6), [Ô][ô][Ô], [Ô] [Ô])
NovoValor07 = Replace(line(7), [Ô][ô][Ô], [Ô] [Ô])
NovoValor08 = Replace(line(8), [Ô][ô][Ô], [Ô] [Ô])
NovoValor09 = Replace(line(9), [Ô][ô][Ô], [Ô] [Ô])
NovoValor10 = Replace(line(10), [Ô][ô][Ô], [Ô] [Ô])
NovoValor11 = Replace(line(11), [Ô][ô][Ô], [Ô] [Ô])
NovoValor12 = Replace(line(12), [Ô][ô][Ô], [Ô] [Ô])
NovoValor13 = Replace(line(13), [Ô][ô][Ô], [Ô] [Ô])
NovoValor14 = Replace(line(14), [Ô][ô][Ô], [Ô] [Ô])

con.Execute [Ô]INSERT INTO Tabela_Clientes(Col001, Col002, Col003, Col004, Col005, Col006, Col007, Col008, Col009, Col010, Col011, Col012, Col013, Col014,Col015) VALUES ([ô][Ô] & NovoValor00 & [Ô][ô],[ô][Ô] & NovoValor01 & [Ô][ô],[ô][Ô] & NovoValor02 & [Ô][ô],[ô][Ô] & NovoValor03 & [Ô][ô],[ô][Ô] & NovoValor04 & [Ô][ô],[ô][Ô] & NovoValor05 & [Ô][ô],[ô][Ô] & NovoValor06 & [Ô][ô],[ô][Ô] & NovoValor07 & [Ô][ô],[ô][Ô] & NovoValor08 & [Ô][ô],[ô][Ô] & NovoValor09 & [Ô][ô],[ô][Ô] & NovoValor10 & [Ô][ô],[ô][Ô] & NovoValor11 & [Ô][ô],[ô][Ô] & NovoValor12 & [Ô][ô],[ô][Ô] & NovoValor13 & [Ô][ô],[ô][Ô] & NovoValor14 & [Ô][ô])[Ô]
sCodigo_cliente = oRsNome

progressBar.Caption = [Ô]Importando [Ô] & iContador & [Ô] clientes de [Ô] & Format$(num_lines)
iContador = iContador + 1
Loop
If iContador <> Format$(num_lines) Then
MsgBox [Ô]Ocorreu um erro durante a carga e alguns registros não foram inseridos![Ô]
Else
con.Execute [Ô]EXEC P_CEMAR_CLIENTE[Ô]
progressBar.Caption = [Ô]Clientes Importados[Ô]
End If

Set con = Nothing
Set fs = Nothing
Set fsStream = Nothing

ErrorMsg:
If Err.Number = [Ô]-2147217900[Ô] Then
MsgBox [Ô]Falha, arquivo possui caracteres especiais. [Ô], vbCritical + vbOKOnly, [Ô]Erro[Ô]
End If
If txtArquivo = [Ô][Ô] Then
MsgBox [Ô]Por favor selecione o arquivo a ser importado.[Ô], vbOKOnly, [Ô]Atenção[Ô]
End If
End Sub



ok, o principal objetivo do meu post é o seguinte, nessa linha:
Citação:

progressBar.Caption = [Ô]Importando [Ô] & iContador & [Ô] clientes de [Ô] & Format$(num_lines)
iContador = iContador + 1



esta dentro de um loop, e no programa ela mostra + - assim:

Importando XXX clientes de YYY

onde XXX é o status do loop, e YYY é o total de linhas que possui o TXT...

só que dessa forma, fica muito inviavel fazer, ja que trabalha com loop, e se tiver muitos processos executando simultaneamente, nao aparecem os status..

gostaria de otimizar isso, de qualquer forma, nem que seja uma progressbar ou algo do tipo....

é isso, por favor aguardo respostas, ou dicas

nunca me decepcionei com o forum e creio nao ser dessa vez *--*


OBS: nao estou pedindo o codigo, apenas uma ajuda de como faze-lo ou uma dica de como mostrar pro usuario do programa, que os clientes estão sendo importados, pois temos aqui na empresa arquivos com muitas linhas, 50000, 100000 e se nao mostrar o que está ocorrendo capaz do usuario parar o processo... por isso queria, conforme fosse adicionando linha por linha, o programa mostrasse a linha que foi adicionada, desse modo [Ô]TRAVANDO[Ô] caso uma delas nao seja importada


Obrigado e Abraços!
VBSHAR 09/09/2010 14:57:33
#352531
Resposta escolhida
Oi, faça o seguinte

        
.....
iContador = iContador + 1
Doevents
Loop


pois o comando Doevents permite o refresh da tela.
NAM4 09/09/2010 15:03:33
#352532
VBSHAR,

muito obrigado pela resposta, vou fazer os testes e reporto aqui

=)


EDIT-----------------------------------------


Agredecendo, pois o DoEvents funcionou perfeitamente =)

obrigado mais uma vez comunidade VBMANIA e a você VBSHAR


Abraços
Tópico encerrado , respostas não são mais permitidas