ID do artigo: 230265 - Última revisão: quinta-feira, 5 de agosto de 2004 - Revisão: 3.4

Importar texto para o Access com ADO/RDO/DAO/filesys/automação ImportText.exe

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sumário

O exemplo ImportText.exe demonstra várias maneiras de importar arquivos de texto em um banco de dados Microsoft Access. Há várias maneiras para importar dados de texto para um banco de dados do Access e, normalmente a melhor opção é determinada pelos requisitos tarefa.

  • ADO
  • RDO
  • DAO
  • Filesys
  • Automação
O aplicativo de exemplo anexado detalhes as opções de codificação acima.

Mais Informações

Os seguintes arquivos estão disponíveis para download no Centro de download da Microsoft:

TextImport.exe (http://download.microsoft.com/download/vb60pro/sample/1/w9xnt4/en-us/textimport.exe)

Para obter informações adicionais sobre como baixar arquivos de suporte da Microsoft, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
119591  (http://support.microsoft.com/kb/119591/EN-US/ ) Como obter arquivos de suporte da Microsoft a partir de serviços online
Microsoft examinou esse arquivo em busca de vírus. Microsoft utilizou o mais recente software de detecção de vírus que estava disponível na data em que o arquivo foi publicado. O arquivo é armazenado em servidores com segurança avançada que ajudam a evitar qualquer alteração não autorizada no arquivo.

Recolher esta tabelaExpandir esta tabela
FileNameTamanho
ImportText.vbp1,464
ImportText.vbw56
Sample.out3,346
Exemplo.txt3,346
Sample_Header.txt3,708
Schema.ini422
Schema_Header.ini420
TextImport.frm28,678
TextImport.frx84
TextImport.mdb108,544


Todos os arquivos devem residir na mesma pasta. Execute o aplicativo de exemplo ImportText.vbp e examine as opções de importação/exportação diferentes. O exemplo TextImport.mdb é usado e deve residir no caminho do aplicativo. O arquivo de texto de exemplo do padrão é exemplo.txt. Um arquivo Sample_Header.txt está incluído e contém o cabeçalho de coluna para o arquivo de texto. Um arquivo de esquema alternativo, Schema_Header.ini, pode ser usado para demonstrar o uso de ColNameHeader = opção True no arquivo de esquema correspondente ao arquivo Sample_Header.txt.

Entre os dados opções demonstradas de importação, o DAO é provavelmente as mais eficientes (menor camadas) ou com a menor superfície de memória; especialmente se importando a um banco de dados do Access.

Consulte a lista a seguir para obter uma visão geral sobre as bibliotecas carregadas para cada método de acesso a dados.
  • O exemplo de objetos FileSys: Scripting Runtime + DAO bibliotecas + Jet bibliotecas
  • O exemplo RDO: RDO bibliotecas + bibliotecas ODBC + ODBC Jet biblioteca + Jet bibliotecas + texto ISAM driver
  • O ADO (o exemplo padrão): bibliotecas do ADO (OLEDB + MSDASQL) + bibliotecas ODBC + biblioteca do ODBC Jet + Jet bibliotecas + texto ISAM driver
  • O exemplo de automação: biblioteca de tempo de execução do MSOffice. O exemplo de DAO: DAO bibliotecas + Jet bibliotecas + texto ISAM driver
A função a seguir é o exemplo de objeto DAO no aplicativo TextImport.vbp. Esse código é usado no aplicativo quando você clica no botão de rádio DAO antes de importar. Você pode modificar o exemplo DAO, adicionando um loop para manipulação de dados exatamente como no exemplo de objetos FileSys e um conjunto de registros.
Sub DAOOpenTextFileImport()
On Error GoTo ErrHandler

lblAction.Caption = "DAO Import..."

Dim daoDB As DAO.Database
Dim strSQL As String
   
If chkCreateTbl.Value = 1 Then
    DBEngine.IniPath = App.Path & "\Schema_Header.ini"
Else
    DBEngine.IniPath = App.Path & "\Schema.ini"
End If

Set daoDB = OpenDatabase(App.Path, False, False, _
                    "Text;Database=" & App.Path & ";table=" & txtFile.Text)

If chkCreateTbl.Value = 1 Then
    'Use this if you do not already have a table created in Access.
    'Creates and appends the data in one step.
    strSQL = "SELECT * INTO [" & txtTable.Text & "] IN '" & _
                   App.Path & "\" & txtDatabase.Text & " '"
    strSQL = strSQL & "FROM " & txtFile.Text
    daoDB.Execute strSQL
Else
    'Delete data before importing - use if necessary.
    strSQL = "DELETE FROM [" & txtTable.Text & "] IN '" & _
                    App.Path & "\" & txtDatabase.Text & "'"
    daoDB.Execute strSQL
    'Append data to Access table.
    strSQL = "INSERT INTO [" & txtTable.Text & "] IN '" & _
                    App.Path & "\" & txtDatabase.Text & "'"
    strSQL = strSQL & "SELECT * FROM " & txtFile.Text
    daoDB.Execute strSQL
End If

GoTo ExitSub
   
ErrHandler:
    lblAction.Caption = "DAO Import - Error."
    MsgBox "Error: " & Err.Number & vbCrLf & Err.Description
    
ExitSub:
    lblAction.Caption = "Complete..."
    daoDB.Close
    Set daoDB = Nothing
End Sub
				
a função a seguir é o exemplo de objeto FileSys no aplicativo TextImport.vbp. Esse código é usado no aplicativo quando você seleciona o botão de opção FileSys antes de importar. Observe no código de exemplo que para criar o layout da tabela no Access, com base em arquivo Schema_Header.ini, há não precise percorrer o arquivo de cabeçalho e criar a tabela manualmente se você usar o driver ISAM de texto. Embora, se você estiver usando o ISAM de texto driver e não é necessário para usar o FileSystemObject (e que é parte do ponto) a menos que você deve use FileSystemObject para importar, em seguida, usa o DAO e fazê-lo em um, como mostra o código de exemplo do DAO. Uma vez que você deve utilizar DAO assim mesmo (para criar o objeto recordset) mesmo se você estiver fazendo manipulação de dados durante a importação, em seguida, utilize o DAO para todo o processo como você já tem-carregado na memória para criar o conjunto de registros.
Private Sub FileSysImport()
On Error GoTo ErrHandler

lblAction.Caption = "FileSys Import..."

Dim daoDB As DAO.Database
Dim daoRs As DAO.Recordset
Dim fs As FileSystemObject
Dim ts As TextStream
Dim inLine As Variant
Dim strSQL As String
Dim i As Integer

If chkCreateTbl.Value = 1 Then
    'This is an eazy way to create the Table layout in Access based on the Schema_Header.ini file.
    DBEngine.IniPath = App.Path & "\Schema_Header.ini"
    Set daoDB = OpenDatabase(App.Path, False, False, "Text;Database=" & App.Path & ";table=" & txtFile.Text)
    strSQL = "SELECT * INTO [" & txtTable.Text & "] IN '" & App.Path & "\" & txtDatabase.Text & " '"
    strSQL = strSQL & "FROM " & txtFile.Text & " WHERE 1=0"
    daoDB.Execute strSQL
    Set daoDB = Nothing
    Set daoDB = OpenDatabase(App.Path & "\" & txtDatabase.Text, False, False)
Else
    DBEngine.IniPath = App.Path & "\Schema.ini"
    Set daoDB = OpenDatabase(App.Path & "\" & txtDatabase.Text, False, False)
    strSQL = "DELETE * FROM [" & txtTable.Text & "] IN '" & App.Path & "\" & txtDatabase.Text & "'"
    daoDB.Execute strSQL, dbFailOnError
End If

strSQL = "SELECT * FROM [" & txtTable.Text & "] WHERE 1=0"
Set daoRs = daoDB.OpenRecordset(strSQL, dbOpenDynaset, dbAppendOnly)

Set fs = New FileSystemObject
Set ts = fs.OpenTextFile(App.Path & "\" & txtFile.Text, ForReading, False, TristateUseDefault)

'This skips the column header.
If chkColHeader.Value = 1 Then
    inLine = Split(ts.ReadLine, ",")
End If

While Not ts.AtEndOfStream
    inLine = Split(ts.ReadLine, ",")
    daoRs.AddNew
    For i = 0 To UBound(inLine) - 1
        daoRs.Fields(i).Value = Left(inLine(i), daoRs.Fields(i).Size)
    Next i
    daoRs.Update
Wend

GoTo ExitSub

ErrHandler:
    lblAction.Caption = "FileSys Import - Error."
    MsgBox "Error: " & Err.Number & vbCrLf & Err.Description
    
ExitSub:
    lblAction.Caption = "Complete..."
    If Not ts Is Nothing Then ts.Close
    If Not daoRs Is Nothing Then daoRs.Close
    daoDB.Close
    Set daoRs = Nothing
    Set daoDB = Nothing
    Set ts = Nothing
    Set fs = Nothing
End Sub
				
o exemplo mais simples é o exemplo de automação. Um exemplo TextImport.mdb é usado e as especificações de importação/exportação de exemplo foram criadas no arquivo .mdb de exemplo: exemplo e exemplo w/colunas. Você pode encontrar a configuração da propriedade especificação na guia Propriedades do controle guia . Para importar com ou sem a coluna nomes na primeira linha cria outra especificação de importação/exportação e inserir o nome da especificação de que em txtSpecName de caixa de texto no controle guia. Uma especificação de exemplo é incluída no arquivo .mdb de exemplo: w/colunas de exemplo. Para importar o arquivo de texto com a automação de acesso, você pode simplesmente executar o método DoCmd.TransferText do objeto do Access.
Private Sub AccessAutomateImport()
'Assumes table already exists.
On Error GoTo ErrHandler

lblAction.Caption = "Access Automation..."
   
Dim AccessApp As access.Application
Dim strDB As String
   
strDB = App.Path & "\" & txtDatabase.Text

Set AccessApp = New access.Application
AccessApp.OpenCurrentDatabase strDB
   
'To Import with/without Column names in first row create another Import/Export Specification
'and put the name of that specification in the Text box 'txtSpecName' on the Tab Control.
'An example Specification is included in the sample MDB - 'Sample w/columns'.
AccessApp.DoCmd.TransferText acImportDelim, txtSpecName.Text, txtTable.Text, App.Path & "\" & txtFile.Text

AccessApp.CloseCurrentDatabase

GoTo ExitSub

ErrHandler:
    lblAction.Caption = "Access Automation - Error."
    MsgBox "Error: " & Err.Number & vbCrLf & Err.Description
    
ExitSub:
    lblAction.Caption = "Complete..."
    appAccess.Quit
    Set appAccess = Nothing
End Sub
				
para obter detalhes adicionais e código referem-se o aplicativo de exemplo TextImport.exe.

Referências

Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
149090  (http://support.microsoft.com/kb/149090/EN-US/ ) ACC: Como utilizar Schema.ini para acessar dados de texto
155512  (http://support.microsoft.com/kb/155512/EN-US/ ) ACC: Como criar um arquivo Schema.ini programaticamente
205439  (http://support.microsoft.com/kb/205439/EN-US/ ) PROBLEMA: Arquivos de texto que usam Non-Standard delimitadores de texto não analisar adequadamente com o Microsoft Text Driver

A informação contida neste artigo aplica-se a:
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Palavras-chave: 
kbmt kbdownload kbfile kbmdacnosweep kbrdo kbsample KB230265 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 230265  (http://support.microsoft.com/kb/230265/en-us/ )