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.
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
| FileName | Tamanho |
|---|
| ImportText.vbp | 1,464 |
| ImportText.vbw | 56 |
| Sample.out | 3,346 |
| Exemplo.txt | 3,346 |
| Sample_Header.txt | 3,708 |
| Schema.ini | 422 |
| Schema_Header.ini | 420 |
| TextImport.frm | 28,678 |
| TextImport.frx | 84 |
| TextImport.mdb | 108,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.
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