2013-08-07 51 views
1

我正在將數據從CSV文件導入到Access表中。該數字類似於
-21000000(-2.1E7)。我正在使用TransferText進行導入。使用TransferText將CSV文件中的大負數導入錯誤

DoCmd.TransferText acImportDelim, , "matching report temp", Source_folder & "\" & Source 

在「匹配報告溫度」表中,該字段設置爲Double。導入會生成類型轉換失敗。但是,當我在Excel中打開CSV文件並複製違規行時,我可以成功使用「粘貼追加」將它手動添加到表中 - 因此該數字不會超過該字段的容量。

據我所知,這隻發生在大負數上。較小的數字和相同數量的正數看起來很好。我知道我可以在TransferText中指定一個Import Specification,但我沒有看到將字段類型設置爲Double的方法。

我該如何解決這個問題?我不想手動追蹤導入錯誤並手動添加它們。

回答

2

不要讓TransferText爲您創建Access表。首先創建訪問目標表並分配您需要的字段類型。

當您運行TransferText時,CSV數據將被追加到該現有表中。只要您爲Access字段選擇兼容的數據類型,它就應該沒有錯誤地工作。

我檢查了您的CSV文件。標題行是麻煩,因爲一些字段名失蹤:

Reporting Unit,,$ Dollars,Offset Unit,,$ Dollars,Variance 

這似乎是DoCmd.TransferText的併發症。所以我從Access UI手動導入。這給了我第3和第6列第49行的一個導入錯誤。在Access中,目標字段都被創建爲長整數。然而,CSV行中這些字段的值是2262169190和-2262169190 ......都超出了Access的長整型容量-2,147,483,648到2,147,483,647。

作爲一種便宜的解決方法,我在導入時爲這兩列的數據類型選擇了文本。這使得導入工作沒有錯誤。一旦成功將數據存入Access,您可以在需要使用它們時將這些(字符串)值轉換爲數字類型。

當我選擇Double作爲這兩列的類型時,它也起作用。聽起來這就是你真正想要的。

如果你想得到導入DoCmd.TransferText的工作,我認爲你需要創建一個導入規範。如果可能的話,我還會首先修改CSV文件的標題行,以便所有字段都有名稱。

我實際上測試過這種方法,而不改變CSV文件。在Access UI中創建導入規範後(請參閱下面的屏幕截圖),此操作在Access 2007中工作,沒有導入錯誤。

DoCmd.TransferText acImportDelim, _ 
    "IC_Y1301_Specification", _ 
    "IC_Y1301_LD10279_F25210001", _ 
    "C:\Users\hans\Downloads\IC_Y1301_LD10279_F25210001.CSV", _ 
    True 

TransferText Import Specification

+0

這是我在做什麼 - 「匹配報告TEMP」與相應的字段定義現有的表 - 在這種情況下,數字格式和雙字段的大小。 TransferText將記錄追加到這個表格 - 我仍然遇到了類型轉換失敗。 –

+0

我在目標表中使用Long來代替Double,並得到了相同的i9mport錯誤。 –

+0

好的 - 我試過了。第一,我認爲我之前有錯誤的記錄 - 看起來違規值是-2.3E9,而不是-2.1E7。第二,我無法在一行中隔離有問題的記錄 - 當我在Excel或記事本中編輯文件(將其保存爲文本)時,壞記錄可以正常導入。當我加載整個文件時,我仍然得到錯誤。它與大約55條記錄的輸入文件隔離 - 哪裏是上傳它的好地方供您查看?順便說一句 - 感謝您爲我花了這麼多時間。 –