Artigo: 230265 - Última revisão: quinta-feira, 5 de Agosto de 2004 - Revisão: 3.4

Importar texto para o Access com o ADO/RDO/DAO/filesys/automatizaçã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 | Reduzir tudo

Sumário

O exemplo ImportText.exe demonstra várias formas para importar ficheiros de texto para uma base de dados do Microsoft Access. Existem várias formas para importar dados de texto para uma base de dados do Access e, normalmente a melhor opção é determinada pelos requisitos de tarefa.

  • ADO
  • RDO
  • DAO
  • Filesys
  • Automatização
A aplicação de exemplo anexado detalhes as opções de codificação acima.

Mais Informação

Os ficheiros seguintes estão disponíveis para transferência a partir do Centro de transferências da Microsoft:

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

Para obter informações adicionais sobre como transferir ficheiros de suporte da Microsoft, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
119591  (http://support.microsoft.com/kb/119591/EN-US/ ) Como obter ficheiros de suporte da Microsoft a partir de serviços on-line
Microsoft procedeu de vírus neste ficheiro. Microsoft utilizou o mais recente software de detecção de vírus que estava disponível na data em que o ficheiro foi publicado. O ficheiro é alojado em servidores com segurança avançada que o ajudam a impedir alterações não autorizadas ao ficheiro.

Reduzir esta tabelaExpandir esta tabela
NomeFicheiroTamanho
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 ficheiros deverão residir na mesma pasta. Execute a aplicação de exemplo ImportText.vbp e examine as opções de importação/exportação diferente. O exemplo TextImport.mdb é utilizado e deve residir no caminho da aplicação. O ficheiro de texto de exemplo predefinido é exemplo.txt. Um ficheiro Sample_Header.txt incluído e contém o cabeçalho de coluna para o ficheiro de texto. Um ficheiro de esquema alternativo, Schema_Header.ini, pode ser utilizado para demonstrar a utilizar o ColNameHeader = TRUE opção no ficheiro de esquema correspondente ao ficheiro Sample_Header.txt.

Entre os dados de importação de opções demonstradas, o DAO é provavelmente mais eficazes (menor camadas) ou com poucos requisitos do mais pequeno memória espaço; especialmente se importar para uma base de dados do Access.

Consulte a lista seguinte para obter uma descrição geral das bibliotecas carregadas para cada método de acesso de dados.
  • O exemplo de objectos FileSys: Scripting Runtime + DAO bibliotecas + Jet bibliotecas
  • O exemplo RDO: RDO bibliotecas + bibliotecas ODBC Jet ODBC biblioteca, bibliotecas de Jet + texto ISAM controlador
  • O ADO (o exemplo predefinido): ADO bibliotecas (OLEDB + MSDASQL) bibliotecas ODBC + biblioteca ODBC Jet + bibliotecas de Jet + texto ISAM controlador
  • O exemplo de automatização: biblioteca de tempo de execução MSOffice. O exemplo de DAO: DAO bibliotecas, bibliotecas de Jet + texto ISAM controlador
A função seguinte é o exemplo do objecto DAO na aplicação TextImport.vbp. Este código é utilizado na aplicação, quando clica no botão de opção DAO antes de importar. Pode modificar o exemplo DAO adicionando um conjunto de registos e um ciclo de manipulação de dados tal como no exemplo FileSys objectos.
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 seguinte é o exemplo do objecto FileSys na aplicação TextImport.vbp. Este código é utilizado na aplicação quando seleccionar o botão de opção FileSys antes de importar. Repare no código de exemplo que para criar o esquema da tabela no Access, com base num ficheiro Schema_Header.ini, é necessário repetir o ficheiro de cabeçalho e crie manualmente a tabela se utilizar o controlador ISAM Text. Apesar de, se estiver a utilizar o ISAM Text controlador, em seguida, não é necessário utilizar o FileSystemObject (e que é parte da vírgula) a menos que tem de utilizar FileSystemObject para importar, em seguida, utilizar o DAO e fazê-lo num conforme demonstrado no código de exemplo DAO. Uma vez que tem de utilizar DAO mesmo assim (para criar o objecto de conjunto de registos), mesmo se estiver a fazer manipulação de dados ao importar, em seguida, utilize DAO para todo o processo uma vez que já tiver carregado na memória para criar o conjunto de registos.
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 automatização. Um exemplo TextImport.mdb é utilizada e as especificações de importação/exportação de exemplo foram criadas no ficheiro .mdb de exemplo: exemplo e exemplo w/colunas. É possível localizar a definição da propriedade especificação no separador Propriedades do controlo separador . Para importar com ou sem a coluna nomes na primeira linha crie outro especificação de importação/exportação e coloque o nome da especificação de que txtSpecName a caixa de texto no controlo do separador. Uma especificação de exemplo é incluída no ficheiro .mdb exemplo: exemplo w/colunas. Para importar o ficheiro de texto com a automatização de Access apenas é possível executar o método DoCmd.TransferText o objecto 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 consulte a aplicação de exemplo TextImport.exe.

Referências

Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
149090  (http://support.microsoft.com/kb/149090/EN-US/ ) ACC: Como utilizar Schema.ini para aceder a dados de texto
155512  (http://support.microsoft.com/kb/155512/EN-US/ ) ACC: Como criar um ficheiro Schema.ini através de programação
205439  (http://support.microsoft.com/kb/205439/EN-US/ ) PROBLEMA: Ficheiros de texto com delimitadores de texto Non-Standard não analisar correctamente 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )