2011-05-07 87 views
0

我想將文本文件加載到Access 2007表中。我知道你可以逐行讀取文件,然後在每行之外創建一條記錄。我試圖看看是否可以用INSERT INTO來完成,而不是循環遍歷所有文本行。我的文本文件不是字符分隔,而是固定的列寬。例如:VB2005導入固定寬度的文本文件到Access2007表...幾乎?

Date Speed Weight CarID Fuel 
1120 200  10000 T230  200 
1112 215  11000 F3AE  160 

例子中的數據以提高可讀性空間,但在現實中的數據,像這樣

112020010000T230200 
111221511000F3AE160 

反正團聚在一起。我試圖

Dim sImportFolder As String = "C:\MyData" 
    Dim sSource As String = "C:\data.accdb" 
    Dim sImportFile As String = "week.txt" 

    Dim AccessConn As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sSource & ";Persist Security Info=True;Jet OLEDB:Database Password=blah") 
    AccessConn.Open() 'open the connection to the database 

    Dim AccessCommand As New System.Data.OleDb.OleDbCommand("INSERT INTO [tblData] ([PtDate], [PtSpeed], [PtWt], [PtCar], [PtFuel]) SELECT F1, F2, F3, F4, F5 FROM [Text;DATABASE=" & sImportFolder & ";].[" & sImportFile & "]") 
    AccessCommand.Connection = AccessConn 
    AccessCommand.ExecuteNonQuery() 

    AccessConn.Close() 

我不能圖瞭解如何告訴命令數據的結構。我知道你可以使用模式文件,但必須通過代碼完成這一切。

AGP

回答

0

有上所以這裏一個類似的問題:

Read fixed width record from text file

基本上,答案是,有沒有簡單的東西,你可以在代碼做指定的模式和它爲你分手了。你需要做的是循環遍歷每一行,使用SubString提取數據,然後每行插入Access(不是非常高效),或者你可以在循環中創建一個DataTable,然後在Access中執行插入操作數據庫使用DataTable。要構建DataTable,您仍然需要解析數據(使用SubString或RegEx)。

+0

我很困惑這一切。只要您定義列寬,Access/Jet/ACE讀取固定寬度的文件就沒有問題。這可以使用Access內的導入嚮導來完成,然後可以在外部Access的代碼中使用導入規範(和/或schema.ini文件)。 – 2011-05-07 20:58:53

+0

好吧,我陷入了困境。但我真的很想在不依賴內部Access規範或schema.ini文件的情況下實現它。也許不能做到這一點,在這種情況下,我可能別無選擇。 – sinDizzy 2011-05-08 01:10:40

+0

我想不出有什麼辦法可以做到,除非直接打開文件並通過。但是,你仍然需要知道列邊界在什麼地方做出來,所以我不明白這種方法會如何優於所提出的替代方案。 – 2011-05-12 00:52:46

相關問題