文章編號: 230265 - 上次校閱: 2004年8月5日 - 版次: 3.4

文字匯入 Access 與 ADO/RDO/DAO/filesys/自動化 ImportText.exe

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

結論

ImportText.exe 範例會示範文字檔案匯入 Microsoft Access 資料庫中的各種方法。有很多方法可用來匯入文字資料至 Access 資料庫,而且通常是最佳的選項由工作需求。

  • 努力
  • RDO
  • DAO
  • Filesys
  • 自動化
範例應用程式附加上述程式碼撰寫選項的詳細資訊。

其他相關資訊

從 「 Microsoft 下載中心 」 下載下列檔案有:

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

如需有關如何下載 Microsoft 支援檔案的詳細資訊,按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
119591? (http://support.microsoft.com/kb/119591/EN-US/ ) 如何從線上服務取得 Microsoft 支援檔案
Microsoft 已掃描這個檔案有無病毒。Microsoft 使用已張貼檔案的日期中的 [可用的最新病毒偵測軟體。檔案儲存在安全性強化的伺服器上,以避免任何未經授權的更改至檔案。

摺疊此表格展開此表格
檔案名稱大小
ImportText.vbp1,464
ImportText.vbw56
Sample.out3,346
Sample.txt3,346
Sample_Header.txt3,708
Schema.ini422
Schema_Header.ini420
TextImport.frm28,678
TextImport.frx84
TextImport.mdb108,544


所有檔案應都位於相同的資料夾。執行範例應用程式 ImportText.vbp 並檢查不同的匯入/匯出選項。範例 TextImport.mdb 用,並且應該位於應用程式路徑。預設樣本文字檔案是 Sample.txt。Sample_Header.txt 檔案是包含在內,且包含資料行標頭,對於文字檔案。替代結構描述檔案,Schema_Header.ini,可能會使用在示範如何使用 [ColNameHeader = True Sample_Header.txt 檔案的對應結構描述檔中的選項。

在資料之間匯入所示範的選項,DAO 是可能最有效率 (最低層次) 或最小記憶體耗用量 ; 特別是如果匯入到 Access 資料庫。

請參閱下列的清單,如載入每個資料存取方法的程式庫的概觀。
  • FileSys 物件範例: 指令碼執行階段 + DAO 程式庫 + Jet 的程式庫
  • RDO 範例: RDO 程式庫 + ODBC 程式庫 + ODBC Jet 庫 + Jet 的程式庫 + 文字 ISAM 驅動程式
  • ADO (預設值的範例): ADO 程式庫 (OLEDB + MSDASQL) + ODBC 程式庫 + ODBC Jet 庫 + Jet 的程式庫 + 文字 ISAM 驅動程式
  • 自動化範例: MSOffice 執行階段程式庫。DAO 範例: DAO 程式庫 + Jet 的程式庫 + 文字 ISAM 驅動程式
下列函式是 DAO 物件範例 TextImport.vbp 應用程式中。這個程式碼時使用應用程式中匯入之前按一下 [DAO] 選項按鈕。您可以加入資料錄集和資料操作按照 FileSys 物件範例只是一個迴圈,來修改 DAO 範例。
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
				
下列函式是 FileSys 物件範例 TextImport.vbp 應用程式中的。應用程式中使用此程式碼,當您匯入之前選取 FileSys 選項按鈕。請注意範例程式碼中在依據 Schema_Header.ini] 檔案的 Access 中建立的表格版面配置有是標頭檔執行迴圈,並以手動方式建立資料表,如果您使用文字 ISAM 驅動程式不需要。雖然,如果您使用的文字 ISAM 驅動程式就會有不需要使用 FileSystemObject (和也就是將點的一部分) 除非您 必須 使用 [FileSystemObject 來匯入,然後再使用 DAO,現在就在一個 DAO 程式碼範例所示。因為您必須使用 DAO 還是 (若要建立資料錄集物件) 即使您在進行匯入的資料操作,再使用 DAO 整個處理序因為您已經有它載入到建立資料錄集的記憶體中。
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
				
自動化範例就是最簡單的例子。用 TextImport.mdb 的範例和範例匯入/匯出規格已建立範例.mdb 檔案中: 範例和範例 w/資料行。您可以在 索引標籤 控制項的 [屬性] 索引標籤上找到規格屬性設定值。匯入具有或沒有資料行第一列中的名稱建立另一個匯入/匯出規格,並在 [文字] 方塊 txtSpecName 的該規格名稱置於] 索引標籤控制項。範例規格包含在範例.mdb 檔案中: 範例 w/資料行。匯入文字檔案,與 Access 自動化,您可以只需執行 Access 物件 DoCmd.TransferText 的方法。
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
				
其他詳細資料和程式碼請參閱範例應用程式 TextImport.exe。

?考

如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
149090? (http://support.microsoft.com/kb/149090/EN-US/ ) ACC: 如何使用 Schema.ini 來進行存取文字資料
155512? (http://support.microsoft.com/kb/155512/EN-US/ ) ACC: 如何以程式設計方式建立 Schema.ini 檔案
205439? (http://support.microsoft.com/kb/205439/EN-US/ ) PRB: 使用非標準的文字分隔符號的文字檔進行不剖析正確與 Microsoft 文字驅動程式

這篇文章中的資訊適用於:
  • 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
關鍵字:?
kbmt kbdownload kbfile kbmdacnosweep kbrdo kbsample KB230265 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:230265? (http://support.microsoft.com/kb/230265/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。