2016-01-07 43 views
2

我試圖找到一個解決方案,這幾天沒有任何成功。真的很感謝任何幫助選擇查詢截斷大於10位的數字數據

我想導入一個csv文件到Access數據庫,但數字列的一些數據被截斷。

我沒有在我的機器上安裝MS Access(僅預裝Windows預裝的數據庫引擎(msjet40.dll and msjetoledb40.dll))。但是除了這個問題,其他一切都很好。我在連接字符串中使用Provider=Microsoft.ACE.OLEDB.12.0

csv文件包含文件中的數字和非數字列。只要有問題的數字列的值小於2140649050,它就會選擇正確。

SELECT * into ds1 FROM [Text;FMT=Delimited;HDR=YES;DATABASE=" & LFPath & "].[" & LFName & "] 

最初我假定在向表中加載數據時發生數據截斷。但是數據在選擇時會被截斷。下面選擇查詢返回截斷的UPC列

SELECT HeadName,[upc code],len([upc code]) as maxlen FROM [Text;FMT=Delimited;HDR=YES;DATABASE=" & LFPath & "].[" & LFName & "] 

部分數據下面是相同

HeadName upc code maxlen 
TOTAL U.S 2140649030 10 
TOTAL U.S 2140649050 10 
TOTAL U.S 2140649050 10 
TOTAL U.S  
TOTAL U.S  
TOTAL U.S  
TOTAL U.S  
TOTAL U.S  

看來它設置列的基礎上,初步幾條記錄的最大長度的輸出。我如何防止它做到這一點。

訪問權限選擇是因爲該工具不需要額外的設置來在Windows中運行。

安裝MS Access時不會截斷數據(使用Access 2010進行測試)。這是否意味着ACE.OLEDB.12可與最新的ACE egine ACECORE.dllwiki

請提出任何的可能性來解決問題,而無需安裝數據庫

+0

嘗試使用[schema.ini](https://msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx)文件來明確定義列類型應該是。它看起來像Text驅動程序假定該列是長整型並截斷超過有符號32位整數(〜2.1E9)的最大值的值。 –

+0

數據文件的列數不固定。所以我現在看到的唯一選項是基於此列以降序對文件進行排序,然後加載。但我想知道是否有可能從vba – xGen

回答

0

據我所看到和研究,我發現了2個選項,我們可以一起去。兩者都涉及一個額外的步驟

第一個選項是按照列的降序對csv文件進行排序。在我的情況下,只有一列被截斷。所以我可以按降序對特定列進行排序,並且插入的數據不會被截斷。 (無法找到一個自動化的解決方案以編程方式排序文件。所以我們需要手動排序的文件,然後加載到數據庫)

的另一種選擇是轉換CSV文件導入到Excel文件,並使用相同加載數據。相同的SO Post

0

的其他版本,你可以嘗試設置單元格一般的額外負載更好?那麼可能是你的數據不會被截斷。

+0

排序實際的csv文件本身該文件將有不同的列數,這限制了修復文件中的問題 – xGen