GD Access    GD Access    Grupo de Discussão  Ir para Categorias  Grupos técnicos  Ir para Fóruns  Access    Importando TXT - Data 31/12/1899
Go
Novo
Procurar
Notificar
Ferramentas
Responder
  
-star Rating Vote!  Login/Cadastrar 
Estagiário

postado
Boa Noite

Estou montando uma rotina de importação e aproveitei uma parte do código baixado no site do Carlos Moura.

Segue o Código:
Function ImpCli()

============================================================================
====================================
'Objeto: ImpCli
'Rotina: Importação de Clientes
'Autor:  Marcos Asty
'Data Criação: 15/11/2005
'Finalizado em: 15/11/2005
'Última Alteração:
'Alterado por:
============================================================================
====================================

Dim FF As Long
Dim strLine As String
Dim strArray As Variant
Dim rsCli As Recordset
Dim i As Integer

On Error Resume Next

FF = FreeFile
'abre o arquivo texto
Open "C:\Trab\exporta\Cliente.txt" For Input As FF

'abre a tabela para receber os dados
Set rsCli = CurrentDb.OpenRecordset("TClie", dbOpenTable)
'limpa a tabela
CurrentDb.Execute ("Delete * From TClie")

Do While Not EOF(FF)
 Line Input #FF, strLine
 strArray = CriaArray(strLine)
 rsCli.AddNew          'inclui novo registro
   'Loop pelo array para pegar os dados
   For i = 0 To UBound(strArray)
       rsCli(i) = NuloToZero(strArray(i))
   Next i
 rsCli.Update   'grava o registro inserido
Loop
rsCli.Close
Close #FF


Abaixo a Função para o Array separar os campos pelo simbolo "#"
 
Private Function CriaArray(ByVal strList As String) As Variant
   Dim strArray() As String
   Dim intWhere As Integer
   Dim intIndex As Integer
   '*****************************************************************
   ' Sai se a string estiver vazia
   '*****************************************************************
   If strList = "" Then Exit Function
   
   Do
       'pega a posicao do sinal desejado (no caso #)
       intWhere = InStr(strList, "#")
       'redimensiona o array
       ReDim Preserve strArray(intIndex) As String
       If intWhere = 0 Then Exit Do
       'pega a variavel ate antes ,
       strArray(intIndex) = Left(strList, intWhere - 1)
       'diminui da variavel a parte que foi pega mais ,
       strList = Mid(strList, intWhere + 1)
       'incrementa o indice do array
       intIndex = intIndex + 1
   Loop
   strArray(intIndex) = strList
   CriaArray = strArray
End Function
Private Function NuloToZero(nValor As Variant)
   If IsNull(nValor) Or nValor = "" Then
     NuloToZero = 0
   Else
     NuloToZero = nValor
   End If
End Function


Problema

Como a Função NuloToZero, zera os campos nulos, os campos de data do arquivo txt, estão retornando zero, e consequentemente, sendo gravados com a famosa data 31/12/1899.

Tentei remover esta função, em vão, pois o strarray usa IntStr que não funciona com valores nulos.

Tem como sair dessa, sem mudar radicalmente o modulo de importação??

Desde já Agradeço a todos...
Abraços
Asty
 
Postagens: 36 | Localização: Além Paraíba -MG | Registrado: 20 June 2003Reply With QuoteEditar ou Apagar MensagemReport This Post
Programador Pleno

postado Hide Post
Precisa ser essa rotina p/ importar o txt? Usando array? Não li ela completamente, mas existem formas mais simples de importação, se o arquivo tem um layout padrao. Vc pode usar o DoCmd.TransferText:

Exemplo:
  
Private Function ImportarTxt(strPath As String, strNomeEspecif As String, strTabela As String) As Boolean
On Error GoTo Erro

    ImportarTxt = False
    
    'Limpa tabela Auxiliar
    CurrentDb.Execute ("DELETE FROM " & strTabela), dbFailOnError
    
    'Importa txt
    DoCmd.TransferText acImportDelim, strNomeEspecif, strTabela, strPath, True  '(true - qdo o arquivo vem com nomes das colunas)
    
    ImportarTxt = True

Exit Function

Erro:
    MsgBox Err.Number & " - " & Err.Description & " - ImportarTXT " & strPath, vbCritical
End Function



Vc terá que criar uma especificação de importação e enviar o nome no parâmetro "strNomeEspecif". Sabe criar especificação?

Abraços
Fernanda
 
Postagens: 275 | Localização: São Paulo / SP | Registrado: 25 April 2004Reply With QuoteEditar ou Apagar MensagemReport This Post
Analista Júnior

postado Hide Post
Asty, outra alternativa eh implementar uma funcao ou subprocedimento que abra o arquivo em modo Binary e leia dados do arquivo para um Type com a estrutura do registro. Comeco com a posicao 1, e, a cada interacao do loop, somo Len(Type) para ir para o proximo registro. Independente da forma que vc usar para ler dados do arquivo, vc esta tendo problemas de conversao de tipos de dados. Certifique-se que a funcao NuloToZero esteja processando corretamente valores do tipo data.

Cordial cumprimento.
 
Postagens: 649 | Localização: Lago Sul, DF, Brasil | Registrado: 07 March 2001Reply With QuoteEditar ou Apagar MensagemReport This Post
 Tópico Anterior | Próximo Tópico Powered by Eve For Enterprise  
 

GD Access    GD Access    Grupo de Discussão  Ir para Categorias  Grupos técnicos  Ir para Fóruns  Access    Importando TXT - Data 31/12/1899

©