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.
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
| NomeFicheiro | 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 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.
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