2015-10-14 31 views

回答

2

ACE是一種有這種東西的野獸。與其字段類型作爲元數據一部分的普通數據庫不同,CSV只是數據。因此,ACE必須對數據類型做出決定。在你的情況下,ACE決定這是一個數字,因爲它從+-開始。如果我沒有記錯,ACE和JET前輩只分析前8個記錄來確定字段類型。

雖然有兩種解決方法。

  1. 您可以使用schema.ini文件。基本上這是一個名爲schema.ini的文本文件,您只需將其保存在與您要連接的數據相同的文件夾中即可。如果存在,ACE將自動使用該文件。 Here's some info about how to build it(你可以谷歌它並得到噸的例子)。

  2. 這是一種創可貼的方法,根據您的情況,這有時比schema.ini更容易。由於ACE僅分析CSV的前8個記錄以確定字段類型,因此只需在文件頂部插入8個具有明確字段類型的新記錄。例如,您的包含+-的字段只能粘貼像S這樣的字符。 ACE會看到這是一個非數字字段,並將其視爲一個字符串。 You can see here how to prepend data to an existing text file using the filesystemobject(和谷歌更多的信息,這是非常有用的東西)

+0

是的我知道創建一個schema.ini文件是可行的,但我有大約53個csv文件可以運行,並且從我可以收集的內容中您不能在模式文件中使用通配符。我想我會創建一個默認的schema.ini,並在我運行所有csv文件時更改文件名。 –

+0

我相信@jeeped使用'Workbooks.OpenText'的建議可能不是一個糟糕的路線。你可以將這些東西逐個打開並獲取值。唯一需要注意的是,如果你正在做一些比「SELECT * FROM '更復雜的事情。另一個替代方案,也是一種創可貼,將使用'filesystemobject'將每個csv移動到一個單獨的文件夾,快速重寫schema.ini文件並將其移動到該文件夾​​,然後運行導入。你將不得不以編程方式編寫schema.ini,但它會很好地擴展(很好地適用於Excel和VBA)。 – JNevill

1

的+/-迫使數字轉換,你正在失去支持其純粹的數學相當於其在兩種情況下是零的象徵。

您可以嘗試使用適當的Schema.ini來詳細說明字段類型。如果這是不可能的,放棄ADODB.Connection並使用Workbooks.OpenText method。將該列的xlColumnDataType指定爲xlTextFormat(例如,)。